summaryrefslogtreecommitdiff
path: root/parser_test.go
diff options
context:
space:
mode:
authorAdam Scarr <adam@vektah.net>2017-08-06 14:31:35 +1000
committerAdam Scarr <adam@vektah.net>2017-08-06 14:31:35 +1000
commit68cde88125e1f016c5706ca8d0b3db6ba06624a2 (patch)
treecdd2de679892179f537b22ab05bfe3820dc7b4bf /parser_test.go
Initial commit
Diffstat (limited to 'parser_test.go')
-rw-r--r--parser_test.go107
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"))
+}