| package addrs |
| |
| import ( |
| "fmt" |
| "testing" |
| ) |
| |
| func TestInstanceKeyString(t *testing.T) { |
| tests := []struct { |
| Key InstanceKey |
| Want string |
| }{ |
| { |
| IntKey(0), |
| `[0]`, |
| }, |
| { |
| IntKey(5), |
| `[5]`, |
| }, |
| { |
| StringKey(""), |
| `[""]`, |
| }, |
| { |
| StringKey("hi"), |
| `["hi"]`, |
| }, |
| { |
| StringKey("0"), |
| `["0"]`, // intentionally distinct from IntKey(0) |
| }, |
| { |
| // Quotes must be escaped |
| StringKey(`"`), |
| `["\""]`, |
| }, |
| { |
| // Escape sequences must themselves be escaped |
| StringKey(`\r\n`), |
| `["\\r\\n"]`, |
| }, |
| { |
| // Template interpolation sequences "${" must be escaped. |
| StringKey(`${hello}`), |
| `["$${hello}"]`, |
| }, |
| { |
| // Template control sequences "%{" must be escaped. |
| StringKey(`%{ for something in something }%{ endfor }`), |
| `["%%{ for something in something }%%{ endfor }"]`, |
| }, |
| { |
| // Dollar signs that aren't followed by { are not interpolation sequences |
| StringKey(`$hello`), |
| `["$hello"]`, |
| }, |
| { |
| // Percent signs that aren't followed by { are not control sequences |
| StringKey(`%hello`), |
| `["%hello"]`, |
| }, |
| } |
| |
| for _, test := range tests { |
| testName := fmt.Sprintf("%#v", test.Key) |
| t.Run(testName, func(t *testing.T) { |
| got := test.Key.String() |
| want := test.Want |
| if got != want { |
| t.Errorf("wrong result\nreciever: %s\ngot: %s\nwant: %s", testName, got, want) |
| } |
| }) |
| } |
| } |