Separate parsing status from actual errors
This commit is contained in:
@ -7,6 +7,7 @@ import (
|
||||
"git.codemonkeysoftware.net/b/gigaparsec"
|
||||
"git.codemonkeysoftware.net/b/gigaparsec/cursor"
|
||||
"github.com/shoenig/test"
|
||||
"github.com/shoenig/test/must"
|
||||
"pgregory.net/rapid"
|
||||
)
|
||||
|
||||
@ -23,17 +24,17 @@ func hasPrefix(prefix []byte) func([]byte) bool {
|
||||
}
|
||||
|
||||
func TestSlice(t *testing.T) {
|
||||
assertParseFails := func(t rapid.TB, input []byte, p gigaparsec.Parser[byte, []byte]) (parseErr gigaparsec.ParseError) {
|
||||
assertParseFails := func(t rapid.TB, input []byte, p gigaparsec.Parser[byte, []byte]) {
|
||||
t.Helper()
|
||||
start := gigaparsec.MakeState(cursor.NewSlice(input))
|
||||
consumed, result, err := p(start)
|
||||
test.ErrorAs(t, err, &parseErr, test.Sprint("expected ParseError"))
|
||||
test.False(t, consumed, test.Sprint("expected consumed to be false"))
|
||||
test.SliceEmpty(t, result.Value, test.Sprint("expected result value to be empty"))
|
||||
result, err := p(start)
|
||||
must.NoError(t, err)
|
||||
failed, consumed, _ := result.Failed()
|
||||
test.True(t, failed)
|
||||
test.False(t, consumed)
|
||||
if t.Failed() {
|
||||
t.FailNow()
|
||||
}
|
||||
return parseErr
|
||||
}
|
||||
|
||||
t.Run("fails with wrong contents", rapid.MakeCheck(func(t *rapid.T) {
|
||||
@ -55,11 +56,13 @@ func TestSlice(t *testing.T) {
|
||||
s := input[:sLen]
|
||||
start := gigaparsec.MakeState(cursor.NewSlice(input))
|
||||
|
||||
consumed, result, err := gigaparsec.Slice(s)(start)
|
||||
test.NoError(t, err)
|
||||
test.True(t, consumed, test.Sprint("expected consumed to be true"))
|
||||
test.SliceEqOp(t, s, result.Value)
|
||||
test.EqOp(t, uint64(len(s)), result.State.Pos())
|
||||
result, err := gigaparsec.Slice(s)(start)
|
||||
must.NoError(t, err)
|
||||
succeeded, consumed, value, next, _ := result.Succeeded()
|
||||
test.True(t, succeeded)
|
||||
test.True(t, consumed)
|
||||
test.SliceEqOp(t, s, value)
|
||||
test.EqOp(t, uint64(len(s)), next.Pos())
|
||||
}))
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user