Files
core/restream/replace/replace_test.go
2023-04-03 10:25:06 +02:00

172 lines
4.6 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()
r.RegisterReplaceFunc(
"foobar",
func(params map[string]string, config *app.Config, section string) string {
return ";:.,-_$\\£!^"
},
nil,
)
for _, e := range samples {
replaced := r.Replace(e[0], "foobar", "", nil, nil, "")
require.Equal(t, e[1], replaced, e[0])
}
r.RegisterReplaceFunc(
"foobar",
func(params map[string]string, config *app.Config, section string) string {
return ""
},
nil,
)
replaced := r.Replace("{foobar}", "foobar", "", nil, nil, "")
require.Equal(t, "", replaced)
replaced = r.Replace("{foobar}", "barfoo", "", nil, nil, "")
require.Equal(t, "{foobar}", replaced)
replaced = r.Replace("{barfoo}", "barfoo", "barfoo", nil, nil, "")
require.Equal(t, "barfoo", replaced)
replaced = r.Replace("{barfoo}", "barfoo", "", nil, nil, "")
require.Equal(t, "", replaced)
}
func TestReplaceInvalid(t *testing.T) {
r := New()
r.RegisterReplaceFunc(
"foo:bar",
func(params map[string]string, config *app.Config, section string) string {
return "Hello " + params["who"] + "! " + params["what"] + "?"
},
nil,
)
replaced := r.Replace("{foo:bar, who=World}", "foo:bar", "", nil, nil, "")
require.Equal(t, "Hello World! defaultWhat?", replaced)
}
func TestReplacerFunc(t *testing.T) {
r := New()
r.RegisterReplaceFunc(
"foo:bar",
func(params map[string]string, config *app.Config, section string) string {
return "Hello " + params["who"] + "! " + params["what"] + "?"
},
map[string]string{
"who": "defaultWho",
"what": "defaultWhat",
},
)
replaced := r.Replace("{foo:bar}", "foo:bar", "", nil, nil, "")
require.Equal(t, "Hello defaultWho! defaultWhat?", replaced)
replaced = r.Replace("{foo:bar,who=World}", "foo:bar", "", nil, nil, "")
require.Equal(t, "Hello World! defaultWhat?", replaced)
replaced = r.Replace("{foo:bar,who=World,what=E=mc^2}", "foo:bar", "", nil, nil, "")
require.Equal(t, "Hello World! E=mc^2?", replaced)
replaced = r.Replace("{foo:bar^:,who=World,what=E=mc:2}", "foo:bar", "", nil, nil, "")
require.Equal(t, "Hello World! E=mc\\\\:2?", replaced)
}
func TestReplacerFuncWithVars(t *testing.T) {
r := New()
r.RegisterReplaceFunc(
"foo:bar",
func(params map[string]string, config *app.Config, section string) string {
return "Hello " + params["who"] + "! " + params["what"] + "?"
},
map[string]string{
"who": "$processid_$location",
"what": "$location",
},
)
vars := map[string]string{
"processid": "123456789",
"location": "World",
}
replaced := r.Replace("{foo:bar}", "foo:bar", "", vars, nil, "")
require.Equal(t, "Hello 123456789_World! World?", replaced)
replaced = r.Replace("{foo:bar,who=World}", "foo:bar", "", vars, nil, "")
require.Equal(t, "Hello World! World?", replaced)
replaced = r.Replace("{foo:bar,who=World,what=E=mc^2}", "foo:bar", "", vars, nil, "")
require.Equal(t, "Hello World! E=mc^2?", replaced)
replaced = r.Replace("{foo:bar^:,who=World,what=E=mc:2}", "foo:bar", "", vars, nil, "")
require.Equal(t, "Hello World! E=mc\\\\:2?", replaced)
replaced = r.Replace("{foo:bar,who=$location,what=$processid}", "foo:bar", "", vars, nil, "")
require.Equal(t, "Hello World! 123456789?", replaced)
}
func TestReplaceGlob(t *testing.T) {
r := New()
r.RegisterReplaceFunc(
"foo:bar",
func(params map[string]string, config *app.Config, section string) string {
return "Hello foobar"
},
nil,
)
r.RegisterReplaceFunc(
"foo:baz",
func(params map[string]string, config *app.Config, section string) string {
return "Hello foobaz"
},
nil,
)
replaced := r.Replace("{foo:baz}, {foo:bar}", "foo:*", "", nil, nil, "")
require.Equal(t, "Hello foobaz, Hello foobar", replaced)
}
func TestParseParams(t *testing.T) {
r := New().(*replacer)
tests := [][2]string{
{"", "def"},
{"foobar=hello", "hello"},
{"foobar=%Y%m%d_%H%M%S", "%Y%m%d_%H%M%S"},
{"foobar=foo\\,bar", "foo,bar"},
{"barfoo=xxx,foobar=something", "something"},
}
for _, test := range tests {
params := r.parseParametes(test[0], nil, map[string]string{"foobar": "def"})
require.Equal(t, test[1], params["foobar"])
}
}