64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|