| package hclsyntax |
| |
| import ( |
| "reflect" |
| "testing" |
| |
| "github.com/davecgh/go-spew/spew" |
| ) |
| |
| func TestScanStringLit(t *testing.T) { |
| tests := []struct { |
| Input string |
| WantQuoted []string |
| WantUnquoted []string |
| }{ |
| { |
| ``, |
| []string{}, |
| []string{}, |
| }, |
| { |
| `hello`, |
| []string{`hello`}, |
| []string{`hello`}, |
| }, |
| { |
| `hello world`, |
| []string{`hello world`}, |
| []string{`hello world`}, |
| }, |
| { |
| `hello\nworld`, |
| []string{`hello`, `\n`, `world`}, |
| []string{`hello\nworld`}, |
| }, |
| { |
| `hello\🥁world`, |
| []string{`hello`, `\🥁`, `world`}, |
| []string{`hello\🥁world`}, |
| }, |
| { |
| `hello\uabcdworld`, |
| []string{`hello`, `\uabcd`, `world`}, |
| []string{`hello\uabcdworld`}, |
| }, |
| { |
| `hello\uabcdabcdworld`, |
| []string{`hello`, `\uabcd`, `abcdworld`}, |
| []string{`hello\uabcdabcdworld`}, |
| }, |
| { |
| `hello\uabcworld`, |
| []string{`hello`, `\uabc`, `world`}, |
| []string{`hello\uabcworld`}, |
| }, |
| { |
| `hello\U01234567world`, |
| []string{`hello`, `\U01234567`, `world`}, |
| []string{`hello\U01234567world`}, |
| }, |
| { |
| `hello\U012345670123world`, |
| []string{`hello`, `\U01234567`, `0123world`}, |
| []string{`hello\U012345670123world`}, |
| }, |
| { |
| `hello\Uabcdworld`, |
| []string{`hello`, `\Uabcd`, `world`}, |
| []string{`hello\Uabcdworld`}, |
| }, |
| { |
| `hello\Uabcworld`, |
| []string{`hello`, `\Uabc`, `world`}, |
| []string{`hello\Uabcworld`}, |
| }, |
| { |
| `hello\uworld`, |
| []string{`hello`, `\u`, `world`}, |
| []string{`hello\uworld`}, |
| }, |
| { |
| `hello\Uworld`, |
| []string{`hello`, `\U`, `world`}, |
| []string{`hello\Uworld`}, |
| }, |
| { |
| `hello\u`, |
| []string{`hello`, `\u`}, |
| []string{`hello\u`}, |
| }, |
| { |
| `hello\U`, |
| []string{`hello`, `\U`}, |
| []string{`hello\U`}, |
| }, |
| { |
| `hello\`, |
| []string{`hello`, `\`}, |
| []string{`hello\`}, |
| }, |
| { |
| `hello$${world}`, |
| []string{`hello`, `$${`, `world}`}, |
| []string{`hello`, `$${`, `world}`}, |
| }, |
| { |
| `hello$$world`, |
| []string{`hello`, `$$`, `world`}, |
| []string{`hello`, `$$`, `world`}, |
| }, |
| { |
| `hello$world`, |
| []string{`hello`, `$`, `world`}, |
| []string{`hello`, `$`, `world`}, |
| }, |
| { |
| `hello$`, |
| []string{`hello`, `$`}, |
| []string{`hello`, `$`}, |
| }, |
| { |
| `hello$${`, |
| []string{`hello`, `$${`}, |
| []string{`hello`, `$${`}, |
| }, |
| { |
| `hello%%{world}`, |
| []string{`hello`, `%%{`, `world}`}, |
| []string{`hello`, `%%{`, `world}`}, |
| }, |
| { |
| `hello%%world`, |
| []string{`hello`, `%%`, `world`}, |
| []string{`hello`, `%%`, `world`}, |
| }, |
| { |
| `hello%world`, |
| []string{`hello`, `%`, `world`}, |
| []string{`hello`, `%`, `world`}, |
| }, |
| { |
| `hello%`, |
| []string{`hello`, `%`}, |
| []string{`hello`, `%`}, |
| }, |
| { |
| `hello%%{`, |
| []string{`hello`, `%%{`}, |
| []string{`hello`, `%%{`}, |
| }, |
| { |
| `hello\${world}`, |
| []string{`hello`, `\$`, `{world}`}, |
| []string{`hello\`, `$`, `{world}`}, |
| }, |
| { |
| `hello\%{world}`, |
| []string{`hello`, `\%`, `{world}`}, |
| []string{`hello\`, `%`, `{world}`}, |
| }, |
| { |
| "hello\nworld", |
| []string{`hello`, "\n", `world`}, |
| []string{`hello`, "\n", `world`}, |
| }, |
| { |
| "hello\rworld", |
| []string{`hello`, "\r", `world`}, |
| []string{`hello`, "\r", `world`}, |
| }, |
| { |
| "hello\r\nworld", |
| []string{`hello`, "\r\n", `world`}, |
| []string{`hello`, "\r\n", `world`}, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(test.Input, func(t *testing.T) { |
| t.Run("quoted", func(t *testing.T) { |
| slices := scanStringLit([]byte(test.Input), true) |
| got := make([]string, len(slices)) |
| for i, slice := range slices { |
| got[i] = string(slice) |
| } |
| if !reflect.DeepEqual(got, test.WantQuoted) { |
| t.Errorf("wrong result\ngot: %swant: %s", spew.Sdump(got), spew.Sdump(test.WantQuoted)) |
| } |
| }) |
| t.Run("unquoted", func(t *testing.T) { |
| slices := scanStringLit([]byte(test.Input), false) |
| got := make([]string, len(slices)) |
| for i, slice := range slices { |
| got[i] = string(slice) |
| } |
| if !reflect.DeepEqual(got, test.WantUnquoted) { |
| t.Errorf("wrong result\ngot: %swant: %s", spew.Sdump(got), spew.Sdump(test.WantUnquoted)) |
| } |
| }) |
| }) |
| } |
| } |