package stringreplace
import (
"fmt"
"reflect"
"testing"
)
type sampleInnerStruct struct {
Name string
Number int
List []string
Map map[string]string
}
type sampleStruct struct {
Name string
Inner sampleInnerStruct
Ptr *sampleInnerStruct
MapInMap map[string]map[string]string
ArrayInArray [][]string
Array []string
ArrayInMap map[string][]interface{}
}
func TestVisitObjectStringsOnStruct(t *testing.T) {
samples := [][]sampleStruct{
{{}, {}},
{{Name: "Foo"}, {Name: "sample-Foo"}},
{{Ptr: nil}, {Ptr: nil}},
{{Ptr: &sampleInnerStruct{Name: "foo"}}, {Ptr: &sampleInnerStruct{Name: "sample-foo"}}},
{{Inner: sampleInnerStruct{Name: "foo"}}, {Inner: sampleInnerStruct{Name: "sample-foo"}}},
{{Array: []string{"foo", "bar"}}, {Array: []string{"sample-foo", "sample-bar"}}},
{
{
MapInMap: map[string]map[string]string{
"foo": {"bar": "test"},
},
},
{
MapInMap: map[string]map[string]string{
"sample-foo": {"sample-bar": "sample-test"},
},
},
},
{
{ArrayInArray: [][]string{{"foo", "bar"}}},
{ArrayInArray: [][]string{{"sample-foo", "sample-bar"}}},
},
{
{ArrayInMap: map[string][]interface{}{"key": {"foo", "bar"}}},
{ArrayInMap: map[string][]interface{}{"sample-key": {"sample-foo", "sample-bar"}}},
},
}
for i := range samples {
VisitObjectStrings(&samples[i][0], func(in string) (string, bool) {
if len(in) == 0 {
return in, true
}
return fmt.Sprintf("sample-%s", in), true
})
if !reflect.DeepEqual(samples[i][0], samples[i][1]) {
t.Errorf("[%d] Got:\n%#v\nExpected:\n%#v", i, samples[i][0], samples[i][1])
}
}
}
func TestVisitObjectStringsOnMap(t *testing.T) {
samples := [][]map[string]string{
{
{"foo": "bar"},
{"sample-foo": "sample-bar"},
},
{
{"empty": ""},
{"sample-empty": "sample-"},
},
{
{"": "invalid"},
{"sample-": "sample-invalid"},
},
}
for i := range samples {
VisitObjectStrings(&samples[i][0], func(in string) (string, bool) {
return fmt.Sprintf("sample-%s", in), true
})
if !reflect.DeepEqual(samples[i][0], samples[i][1]) {
t.Errorf("Got %#v, expected %#v", samples[i][0], samples[i][1])
}
}
}
func TestVisitObjectStringsOnArray(t *testing.T) {
samples := [][][]string{
{
{"foo", "bar"},
{"sample-foo", "sample-bar"},
},
}
for i := range samples {
VisitObjectStrings(&samples[i][0], func(in string) (string, bool) {
return fmt.Sprintf("sample-%s", in), true
})
if !reflect.DeepEqual(samples[i][0], samples[i][1]) {
t.Errorf("Got %#v, expected %#v", samples[i][0], samples[i][1])
}
}
}