mirror of
				https://github.com/datarhei/core.git
				synced 2025-10-31 03:16:21 +08:00 
			
		
		
		
	 0147651de6
			
		
	
	0147651de6
	
	
	
		
			
			1. Allow variables in placeholders for parameter values, e.g.
   {rtmp,name=$processid}. The variable starts with a $ letter.
   The recognized variables are provided with the Replace func.
2. The template func recieves the process config and the name of
   the section where this placeholder is located, i.e. "global",
   "input", or "output".
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package replace
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/datarhei/core/v16/restream/app"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestReplace(t *testing.T) {
 | |
| 	foobar := ";:.,-_$\\£!^"
 | |
| 
 | |
| 	samples := [][2]string{
 | |
| 		{"{foobar}", foobar},
 | |
| 		{"{foobar^:}", ";\\\\:.,-_$\\\\\\£!^"},
 | |
| 		{"{foobar^:}barfoo{foobar^:}", ";\\\\:.,-_$\\\\\\£!^barfoo;\\\\:.,-_$\\\\\\£!^"},
 | |
| 		{"{foobar^:.}", "{foobar^:.}"},
 | |
| 		{"{foobar^}", "{foobar^}"},
 | |
| 		{"{barfoo^:}", "{barfoo^:}"},
 | |
| 		{"{foobar^^}", ";:.,-_$\\\\\\£!\\\\^"},
 | |
| 		{`{foobar^\}`, ";:.,-_$\\\\\\£!^"},
 | |
| 		{`{barfoo}`, "{barfoo}"},
 | |
| 	}
 | |
| 
 | |
| 	r := New()
 | |
| 
 | |
| 	for _, e := range samples {
 | |
| 		replaced := r.Replace(e[0], "foobar", foobar, nil, nil, "")
 | |
| 		require.Equal(t, e[1], replaced, e[0])
 | |
| 	}
 | |
| 
 | |
| 	replaced := r.Replace("{foobar}", "foobar", "", nil, nil, "")
 | |
| 	require.Equal(t, "", replaced)
 | |
| }
 | |
| 
 | |
| func TestReplaceTemplate(t *testing.T) {
 | |
| 	r := New()
 | |
| 	r.RegisterTemplate("foo:bar", "Hello {who}! {what}?", nil)
 | |
| 
 | |
| 	replaced := r.Replace("{foo:bar,who=World}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! {what}?", replaced)
 | |
| 
 | |
| 	replaced = r.Replace("{foo:bar,who=World,what=E%3dmc^2}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! E=mc^2?", replaced)
 | |
| 
 | |
| 	replaced = r.Replace("{foo:bar^:,who=World,what=E%3dmc:2}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! E=mc\\\\:2?", replaced)
 | |
| }
 | |
| 
 | |
| func TestReplaceTemplateFunc(t *testing.T) {
 | |
| 	r := New()
 | |
| 	r.RegisterTemplateFunc("foo:bar", func(config *app.Config, kind string) string { return "Hello {who}! {what}?" }, nil)
 | |
| 
 | |
| 	replaced := r.Replace("{foo:bar,who=World}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! {what}?", replaced)
 | |
| 
 | |
| 	replaced = r.Replace("{foo:bar,who=World,what=E%3dmc^2}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! E=mc^2?", replaced)
 | |
| 
 | |
| 	replaced = r.Replace("{foo:bar^:,who=World,what=E%3dmc:2}", "foo:bar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! E=mc\\\\:2?", replaced)
 | |
| }
 | |
| 
 | |
| func TestReplaceTemplateDefaults(t *testing.T) {
 | |
| 	r := New()
 | |
| 	r.RegisterTemplate("foobar", "Hello {who}! {what}?", map[string]string{
 | |
| 		"who":  "someone",
 | |
| 		"what": "something",
 | |
| 	})
 | |
| 
 | |
| 	replaced := r.Replace("{foobar}", "foobar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello someone! something?", replaced)
 | |
| 
 | |
| 	replaced = r.Replace("{foobar,who=World}", "foobar", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello World! something?", replaced)
 | |
| }
 | |
| 
 | |
| func TestReplaceCompileTemplate(t *testing.T) {
 | |
| 	samples := [][3]string{
 | |
| 		{"Hello {who}!", "who=World", "Hello World!"},
 | |
| 		{"Hello {who}! {what}?", "who=World", "Hello World! {what}?"},
 | |
| 		{"Hello {who}! {what}?", "who=World,what=Yeah", "Hello World! Yeah?"},
 | |
| 		{"Hello {who}! {what}?", "who=World,what=", "Hello World! ?"},
 | |
| 		{"Hello {who}!", "who=E%3dmc^2", "Hello E=mc^2!"},
 | |
| 	}
 | |
| 
 | |
| 	r := New().(*replacer)
 | |
| 
 | |
| 	for _, e := range samples {
 | |
| 		replaced := r.compileTemplate(e[0], e[1], nil, nil)
 | |
| 		require.Equal(t, e[2], replaced, e[0])
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReplaceCompileTemplateDefaults(t *testing.T) {
 | |
| 	samples := [][3]string{
 | |
| 		{"Hello {who}!", "", "Hello someone!"},
 | |
| 		{"Hello {who}!", "who=World", "Hello World!"},
 | |
| 		{"Hello {who}! {what}?", "who=World", "Hello World! something?"},
 | |
| 		{"Hello {who}! {what}?", "who=World,what=Yeah", "Hello World! Yeah?"},
 | |
| 		{"Hello {who}! {what}?", "who=World,what=", "Hello World! ?"},
 | |
| 	}
 | |
| 
 | |
| 	r := New().(*replacer)
 | |
| 
 | |
| 	for _, e := range samples {
 | |
| 		replaced := r.compileTemplate(e[0], e[1], nil, map[string]string{
 | |
| 			"who":  "someone",
 | |
| 			"what": "something",
 | |
| 		})
 | |
| 		require.Equal(t, e[2], replaced, e[0])
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReplaceCompileTemplateWithVars(t *testing.T) {
 | |
| 	samples := [][3]string{
 | |
| 		{"Hello {who}!", "who=$processid", "Hello 123456789!"},
 | |
| 		{"Hello {who}! {what}?", "who=$location", "Hello World! {what}?"},
 | |
| 		{"Hello {who}! {what}?", "who=$location,what=Yeah", "Hello World! Yeah?"},
 | |
| 		{"Hello {who}! {what}?", "who=$location,what=$processid", "Hello World! 123456789?"},
 | |
| 		{"Hello {who}!", "who=$processidxxx", "Hello 123456789xxx!"},
 | |
| 	}
 | |
| 
 | |
| 	vars := map[string]string{
 | |
| 		"processid": "123456789",
 | |
| 		"location":  "World",
 | |
| 	}
 | |
| 
 | |
| 	r := New().(*replacer)
 | |
| 
 | |
| 	for _, e := range samples {
 | |
| 		replaced := r.compileTemplate(e[0], e[1], vars, nil)
 | |
| 		require.Equal(t, e[2], replaced, e[0])
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReplaceGlob(t *testing.T) {
 | |
| 	r := New()
 | |
| 	r.RegisterTemplate("foo:bar", "Hello foobar", nil)
 | |
| 	r.RegisterTemplate("foo:baz", "Hello foobaz", nil)
 | |
| 
 | |
| 	replaced := r.Replace("{foo:baz}, {foo:bar}", "foo:*", "", nil, nil, "")
 | |
| 	require.Equal(t, "Hello foobaz, Hello foobar", replaced)
 | |
| }
 |