package config import ( "fmt" "testing" ) type interpolateTestCase struct { String string Data map[string]string Expected string } var interpolateTestCases = []interpolateTestCase{ { String: "${foo}", Data: map[string]string{ "foo": "bar", }, Expected: "bar", }, { String: "${hello:-world}", Data: map[string]string{}, Expected: "world", }, { String: "${hello:-}", Data: map[string]string{}, Expected: "${hello:-}", }, { String: "foo", Data: map[string]string{}, Expected: "foo", }, { String: "", Data: map[string]string{}, Expected: "", }, } func TestInterpolate(t *testing.T) { for idx, tc := range interpolateTestCases { func(idx int, tc interpolateTestCase) { t.Run(fmt.Sprintf("Case_%d", idx), func(t *testing.T) { result := interpolate(tc.String, func(name string) string { value, exists := tc.Data[name] if !exists { return "" } return value }) if e, g := tc.Expected, result; e != g { t.Errorf("result: expected '%v', got '%v'", tc.Expected, result) } }) }(idx, tc) } }