go-rfc8259/wholenumber/parse_test.go

373 lines
11 KiB
Go
Raw Normal View History

2023-11-04 18:21:58 +00:00
package rfc8259wholenumber_test
import (
"testing"
"bytes"
"io"
"sourcecode.social/reiver/go-utf8"
"sourcecode.social/reiver/go-rfc8259/wholenumber"
)
func TestParse_success(t *testing.T) {
tests := []struct{
Value []byte
Expected rfc8259wholenumber.WholeNumber
}{
{
Value: []byte("0"),
Expected: rfc8259wholenumber.Zero(),
},
{
Value: []byte("1"),
Expected: rfc8259wholenumber.One(),
},
{
Value: []byte("2"),
Expected: rfc8259wholenumber.Something("2"),
},
{
Value: []byte("3"),
Expected: rfc8259wholenumber.Something("3"),
},
{
Value: []byte("4"),
Expected: rfc8259wholenumber.Something("4"),
},
{
Value: []byte("5"),
Expected: rfc8259wholenumber.Something("5"),
},
{
Value: []byte("6"),
Expected: rfc8259wholenumber.Something("6"),
},
{
Value: []byte("7"),
Expected: rfc8259wholenumber.Something("7"),
},
{
Value: []byte("8"),
Expected: rfc8259wholenumber.Something("8"),
},
{
Value: []byte("9"),
Expected: rfc8259wholenumber.Something("9"),
},
{
Value: []byte("10"),
Expected: rfc8259wholenumber.Something("10"),
},
{
Value: []byte("11"),
Expected: rfc8259wholenumber.Something("11"),
},
{
Value: []byte("127"),
Expected: rfc8259wholenumber.Something("127"),
},
{
Value: []byte("7867"),
Expected: rfc8259wholenumber.Something("7867"),
},
{
Value: []byte("7873"),
Expected: rfc8259wholenumber.Something("7873"),
},
{
Value: []byte("7877"),
Expected: rfc8259wholenumber.Something("7877"),
},
{
Value: []byte("7879"),
Expected: rfc8259wholenumber.Something("7879"),
},
{
Value: []byte("7883"),
Expected: rfc8259wholenumber.Something("7883"),
},
{
Value: []byte("7901"),
Expected: rfc8259wholenumber.Something("7901"),
},
{
Value: []byte("7907"),
Expected: rfc8259wholenumber.Something("7907"),
},
{
Value: []byte("7919"),
Expected: rfc8259wholenumber.Something("7919"),
},
{
Value: []byte("999331"),
Expected: rfc8259wholenumber.Something("999331"),
},
{
Value: []byte("8683317618811886495518194401279999999"),
Expected: rfc8259wholenumber.Something("8683317618811886495518194401279999999"),
},
{
Value: []byte("13256278887989457651018865901401704640"),
Expected: rfc8259wholenumber.Something("13256278887989457651018865901401704640"),
},
{
Value: []byte("123.45"),
Expected: rfc8259wholenumber.Something("123"),
},
{
Value: []byte("123 "),
Expected: rfc8259wholenumber.Something("123"),
},
{
Value: []byte("123,"),
Expected: rfc8259wholenumber.Something("123"),
},
{
Value: []byte("123e"),
Expected: rfc8259wholenumber.Something("123"),
},
{
Value: []byte("123E"),
Expected: rfc8259wholenumber.Something("123"),
},
}
for testNumber, test := range tests {
var reader io.Reader = bytes.NewReader(test.Value)
var runescanner io.RuneScanner = utf8.NewRuneScanner(reader)
var actual rfc8259wholenumber.WholeNumber
err := rfc8259wholenumber.Parse(runescanner, &actual)
if nil != err {
t.Errorf("For test #%d, did not expect to get an error but actually got one.", testNumber)
t.Logf("ERROR: (%T) %s", err, err)
t.Logf("VALUE: %q", test.Value)
t.Logf("VALUE: %#v", test.Value)
t.Logf("EXPECTED: %#v", test.Expected)
continue
}
{
expected := test.Expected
if expected != actual {
t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
t.Logf("EXPECTED: %#v", expected)
t.Logf("ACTUAL: %#v", actual)
t.Logf("VALUE: %q", test.Value)
t.Logf("VALUE: %#v", test.Value)
continue
}
}
}
}
func TestParse_failure(t *testing.T) {
tests := []struct{
Value []byte
ExpectedError string
}{
{
Value: []byte(nil),
ExpectedError: "rfc8259: unexpected end-of-file",
},
{
Value: []byte(""),
ExpectedError: "rfc8259: unexpected end-of-file",
},
{
Value: []byte("\t"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '\t' (U+0009)`,
},
{
Value: []byte("\n"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '\n' (U+000A)`,
},
{
Value: []byte("\r"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '\r' (U+000D)`,
},
{
Value: []byte(" "),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was ' ' (U+0020)`,
},
{
Value: []byte("\""),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '"' (U+0022)`,
},
{
Value: []byte("-"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '-' (U+002D)`,
},
{
Value: []byte("f"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'f' (U+0066)`,
},
{
Value: []byte("n"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'n' (U+006E)`,
},
{
Value: []byte("t"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 't' (U+0074)`,
},
{
Value: []byte("false"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'f' (U+0066)`,
},
{
Value: []byte("null"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'n' (U+006E)`,
},
{
Value: []byte("true"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 't' (U+0074)`,
},
{
Value: []byte("-1"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '-' (U+002D)`,
},
{
Value: []byte("-2"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '-' (U+002D)`,
},
{
Value: []byte("-3"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '-' (U+002D)`,
},
{
Value: []byte("\"name\""),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '"' (U+0022)`,
},
{
Value: []byte("apple"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'a' (U+0061)`,
},
{
Value: []byte("banana"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'b' (U+0062)`,
},
{
Value: []byte("cherry"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'c' (U+0063)`,
},
{
Value: []byte("ONCE TWICE THRICE FOURCE"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was 'O' (U+004F)`,
},
{
Value: []byte("😈"),
ExpectedError: `rfc8259: JSON parser encountered a problem — when trying to parse a whole-number, expected the first character to be '0', '1', '2', '3', '4', '5', '6', '7', '8', ot '9', but actually was '😈' (U+1F608)`,
},
}
for testNumber, test := range tests {
var reader io.Reader = bytes.NewReader(test.Value)
var runescanner io.RuneScanner = utf8.NewRuneScanner(reader)
var actual rfc8259wholenumber.WholeNumber
err := rfc8259wholenumber.Parse(runescanner, &actual)
if nil == err {
t.Errorf("For test #%d, expected an error but did not actually get one.", testNumber)
t.Logf("VALUE: %q", test.Value)
t.Logf("VALUE: %#v", test.Value)
t.Logf("EXPECTED-ERROR: %#v", test.ExpectedError)
continue
}
{
expected := rfc8259wholenumber.Nothing()
if expected != actual {
t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
t.Logf("EXPECTED: %#v", expected)
t.Logf("ACTUAL: %#v", actual)
t.Logf("VALUE: %q", test.Value)
t.Logf("VALUE: %#v", test.Value)
continue
}
}
{
expected := test.ExpectedError
actual := err.Error()
if expected != actual {
t.Errorf("For test #%d, the actual error value is not what was expected.", testNumber)
t.Logf("EXPECTED: %#v", expected)
t.Logf("ACTUAL: %#v", actual)
t.Logf("VALUE: %q", test.Value)
t.Logf("VALUE: %#v", test.Value)
continue
}
}
}
}