mirror of
https://github.com/datarhei/core.git
synced 2025-09-28 12:52:29 +08:00

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)
|
|
}
|