| package funcs |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "github.com/zclconf/go-cty/cty" |
| ) |
| |
| func TestReplace(t *testing.T) { |
| tests := []struct { |
| String cty.Value |
| Substr cty.Value |
| Replace cty.Value |
| Want cty.Value |
| Err bool |
| }{ |
| { // Regular search and replace |
| cty.StringVal("hello"), |
| cty.StringVal("hel"), |
| cty.StringVal("bel"), |
| cty.StringVal("bello"), |
| false, |
| }, |
| { // Search string doesn't match |
| cty.StringVal("hello"), |
| cty.StringVal("nope"), |
| cty.StringVal("bel"), |
| cty.StringVal("hello"), |
| false, |
| }, |
| { // Regular expression |
| cty.StringVal("hello"), |
| cty.StringVal("/l/"), |
| cty.StringVal("L"), |
| cty.StringVal("heLLo"), |
| false, |
| }, |
| { |
| cty.StringVal("helo"), |
| cty.StringVal("/(l)/"), |
| cty.StringVal("$1$1"), |
| cty.StringVal("hello"), |
| false, |
| }, |
| { // Bad regexp |
| cty.StringVal("hello"), |
| cty.StringVal("/(l/"), |
| cty.StringVal("$1$1"), |
| cty.UnknownVal(cty.String), |
| true, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(fmt.Sprintf("replace(%#v, %#v, %#v)", test.String, test.Substr, test.Replace), func(t *testing.T) { |
| got, err := Replace(test.String, test.Substr, test.Replace) |
| |
| if test.Err { |
| if err == nil { |
| t.Fatal("succeeded; want error") |
| } |
| return |
| } else if err != nil { |
| t.Fatalf("unexpected error: %s", err) |
| } |
| |
| if !got.RawEquals(test.Want) { |
| t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) |
| } |
| }) |
| } |
| } |