diff options
author | Adam Scarr <adam@vektah.net> | 2017-08-06 14:31:35 +1000 |
---|---|---|
committer | Adam Scarr <adam@vektah.net> | 2017-08-06 14:31:35 +1000 |
commit | 68cde88125e1f016c5706ca8d0b3db6ba06624a2 (patch) | |
tree | cdd2de679892179f537b22ab05bfe3820dc7b4bf /parser_test.go |
Initial commit
Diffstat (limited to 'parser_test.go')
-rw-r--r-- | parser_test.go | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/parser_test.go b/parser_test.go new file mode 100644 index 0000000..7c22a76 --- /dev/null +++ b/parser_test.go @@ -0,0 +1,107 @@ +package parsec + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParsify(t *testing.T) { + p := Pointer{"ffooo", 0} + + t.Run("strings", func(t *testing.T) { + node, _ := Parsify("ff")(p) + require.Equal(t, NewToken(0, "ff"), node) + }) + + t.Run("parsers", func(t *testing.T) { + node, _ := Parsify(CharRun("f"))(p) + require.Equal(t, NewToken(0, "ff"), node) + }) + + t.Run("*parsers", func(t *testing.T) { + var parser Parser + parserfied := Parsify(&parser) + parser = CharRun("f") + + node, _ := parserfied(p) + require.Equal(t, NewToken(0, "ff"), node) + }) +} + +func TestExact(t *testing.T) { + p := Pointer{"fooo", 0} + + t.Run("success", func(t *testing.T) { + node, p2 := Exact("fo")(p) + require.Equal(t, NewToken(0, "fo"), node) + require.Equal(t, p.Advance(2), p2) + }) + + t.Run("error", func(t *testing.T) { + node, p2 := Exact("bar")(p) + require.Equal(t, NewError(0, "Expected bar"), node) + require.Equal(t, 0, p2.pos) + }) +} + +func TestChar(t *testing.T) { + p := Pointer{"foobar", 0} + + t.Run("success", func(t *testing.T) { + node, p2 := Char("fo")(p) + require.Equal(t, NewToken(0, "f"), node) + require.Equal(t, p.Advance(1), p2) + }) + + t.Run("error", func(t *testing.T) { + node, p2 := Char("bar")(p) + require.Equal(t, NewError(0, "Expected one of bar"), node) + require.Equal(t, 0, p2.pos) + }) +} + +func TestCharRun(t *testing.T) { + p := Pointer{"foobar", 0} + + t.Run("success", func(t *testing.T) { + node, p2 := CharRun("fo")(p) + require.Equal(t, NewToken(0, "foo"), node) + require.Equal(t, p.Advance(3), p2) + }) + + t.Run("error", func(t *testing.T) { + node, p2 := CharRun("bar")(p) + require.Equal(t, NewError(0, "Expected some of bar"), node) + require.Equal(t, 0, p2.pos) + }) +} + +func TestCharUntil(t *testing.T) { + p := Pointer{"foobar", 0} + + t.Run("success", func(t *testing.T) { + node, p2 := CharRunUntil("z")(p) + require.Equal(t, NewToken(0, "foobar"), node) + require.Equal(t, p.Advance(6), p2) + }) + + t.Run("error", func(t *testing.T) { + node, p2 := CharRunUntil("f")(p) + require.Equal(t, NewError(0, "Expected some of f"), node) + require.Equal(t, 0, p2.pos) + }) +} + +func TestWS(t *testing.T) { + p := Pointer{" fooo", 0} + + node, p2 := WS(p) + require.Equal(t, nil, node) + require.Equal(t, p.Advance(2), p2) +} + +func TestRange(t *testing.T) { + require.Equal(t, "abcdefg", Range("a-g")) + require.Equal(t, "01234abcd", Range("0-4a-d")) +} |