diff options
author | Adam Scarr <adam@vektah.net> | 2017-08-08 19:56:14 +1000 |
---|---|---|
committer | Adam Scarr <adam@vektah.net> | 2017-08-08 19:56:32 +1000 |
commit | 73b55459ac724bc84c43159e820b90909dc63d51 (patch) | |
tree | 5d0d00ceb9b60da1ce13be4d0f6164d7df3b208e /literals_test.go | |
parent | 7e6f7ce4cfb577a14999a2434db94c8bb3befa82 (diff) |
Move String to its own file
Diffstat (limited to 'literals_test.go')
-rw-r--r-- | literals_test.go | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/literals_test.go b/literals_test.go new file mode 100644 index 0000000..15b971d --- /dev/null +++ b/literals_test.go @@ -0,0 +1,77 @@ +package goparsify + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestString(t *testing.T) { + parser := StringLit(`"'`) + t.Run("test double match", func(t *testing.T) { + result, p := runParser(`"hello"`, parser) + require.Equal(t, `hello`, result.Token) + require.Equal(t, "", p.Get()) + }) + + t.Run("test single match", func(t *testing.T) { + result, p := runParser(`"hello"`, parser) + require.Equal(t, `hello`, result.Token) + require.Equal(t, "", p.Get()) + }) + + t.Run("test nested quotes", func(t *testing.T) { + result, p := runParser(`"hello 'world'"`, parser) + require.Equal(t, `hello 'world'`, result.Token) + require.Equal(t, "", p.Get()) + }) + + t.Run("test non match", func(t *testing.T) { + _, p := runParser(`1`, parser) + require.Equal(t, `"'`, p.Error.Expected) + require.Equal(t, `1`, p.Get()) + }) + + t.Run("test unterminated string", func(t *testing.T) { + _, p := runParser(`"hello `, parser) + require.Equal(t, `"`, p.Error.Expected) + require.Equal(t, `"hello `, p.Get()) + }) + + t.Run("test unmatched quotes", func(t *testing.T) { + _, p := runParser(`"hello '`, parser) + require.Equal(t, `"`, p.Error.Expected) + require.Equal(t, 0, p.Pos) + }) + + t.Run("test unterminated escape", func(t *testing.T) { + _, p := runParser(`"hello \`, parser) + require.Equal(t, `"`, p.Error.Expected) + require.Equal(t, 0, p.Pos) + }) + + t.Run("test escaping", func(t *testing.T) { + result, p := runParser(`"hello \"world\""`, parser) + require.Equal(t, `hello "world"`, result.Token) + require.Equal(t, ``, p.Get()) + }) + + t.Run("test escaped unicode", func(t *testing.T) { + result, p := runParser(`"hello \ubeef cake"`, parser) + require.Equal(t, "", p.Error.Expected) + require.Equal(t, "hello \uBEEF cake", result.Token) + require.Equal(t, ``, p.Get()) + }) + + t.Run("test invalid escaped unicode", func(t *testing.T) { + _, p := runParser(`"hello \ucake"`, parser) + require.Equal(t, "offset 9: Expected [a-f0-9]", p.Error.Error()) + require.Equal(t, 0, p.Pos) + }) + + t.Run("test incomplete escaped unicode", func(t *testing.T) { + _, p := runParser(`"hello \uca"`, parser) + require.Equal(t, "offset 9: Expected [a-f0-9]{4}", p.Error.Error()) + require.Equal(t, 0, p.Pos) + }) +} |