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 /pointer_test.go |
Initial commit
Diffstat (limited to 'pointer_test.go')
-rw-r--r-- | pointer_test.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/pointer_test.go b/pointer_test.go new file mode 100644 index 0000000..e8076d7 --- /dev/null +++ b/pointer_test.go @@ -0,0 +1,86 @@ +package parsec + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPointer(t *testing.T) { + p := Pointer{"fooo", 0} + + t.Run("Advances", func(t *testing.T) { + p2 := p.Advance(2) + require.Equal(t, Pointer{"fooo", 2}, p2) + require.Equal(t, Pointer{"fooo", 0}, p) + require.Equal(t, Pointer{"fooo", 3}, p2.Advance(1)) + }) + + t.Run("Get", func(t *testing.T) { + require.Equal(t, "fooo", p.Get()) + require.Equal(t, "ooo", p.Advance(1).Get()) + }) + + t.Run("Remaining", func(t *testing.T) { + require.Equal(t, 4, p.Remaining()) + require.Equal(t, 0, p.Advance(4).Remaining()) + require.Equal(t, 0, p.Advance(10).Remaining()) + }) + + t.Run("Next takes one character", func(t *testing.T) { + s, p2 := p.Next() + require.Equal(t, p.Advance(1), p2) + require.Equal(t, 'f', s) + }) + + t.Run("Next handles EOF", func(t *testing.T) { + s, p2 := p.Advance(5).Next() + require.Equal(t, p.Advance(5), p2) + require.Equal(t, EOF, s) + }) + + t.Run("HasPrefix", func(t *testing.T) { + require.True(t, p.HasPrefix("fo")) + require.False(t, p.HasPrefix("ooo")) + require.True(t, p.Advance(1).HasPrefix("ooo")) + require.False(t, p.Advance(1).HasPrefix("oooo")) + }) + + t.Run("Accept", func(t *testing.T) { + s, p2 := p.Accept("abcdef") + require.Equal(t, "f", s) + require.Equal(t, p.Advance(1), p2) + + s, p2 = p.Accept("ooooo") + require.Equal(t, "", s) + require.Equal(t, p.Advance(0), p2) + + s, p2 = p.Advance(4).Accept("ooooo") + require.Equal(t, "", s) + require.Equal(t, p.Advance(4), p2) + }) + + t.Run("AcceptRun", func(t *testing.T) { + s, p2 := p.AcceptRun("f") + require.Equal(t, "f", s) + require.Equal(t, p.Advance(1), p2) + + s, p3 := p.AcceptRun("fo") + require.Equal(t, "fooo", s) + require.Equal(t, p.Advance(4), p3) + + s, p4 := p3.AcceptRun("fo") + require.Equal(t, "", s) + require.Equal(t, p.Advance(4), p4) + }) + + t.Run("AcceptUntil", func(t *testing.T) { + s, p2 := p.AcceptUntil("o") + require.Equal(t, "f", s) + require.Equal(t, p.Advance(1), p2) + + s, p3 := p2.AcceptRun("o") + require.Equal(t, "ooo", s) + require.Equal(t, p.Advance(4), p3) + }) +} |