-
Notifications
You must be signed in to change notification settings - Fork 2
/
iterator_skip_str_test.go
84 lines (81 loc) · 2.09 KB
/
iterator_skip_str_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package jzon
import (
"io"
"testing"
"github.com/stretchr/testify/require"
)
func TestIterator_Skip_SkipString(t *testing.T) {
t.Run("eof", func(t *testing.T) {
withIterator("", func(it *Iterator) {
err := it.SkipString()
require.Equal(t, io.EOF, err)
})
})
t.Run("invalid first byte", func(t *testing.T) {
withIterator(` a`, func(it *Iterator) {
err := it.SkipString()
require.IsType(t, UnexpectedByteError{}, err)
})
})
t.Run("empty string", func(t *testing.T) {
withIterator(` ""`, func(it *Iterator) {
err := it.SkipString()
require.NoError(t, err)
_, err = it.NextValueType()
require.Equal(t, io.EOF, err)
})
})
t.Run("eof on escape", func(t *testing.T) {
withIterator(` "\`, func(it *Iterator) {
err := it.SkipString()
require.Equal(t, io.EOF, err)
})
})
t.Run("valid escape", func(t *testing.T) {
withIterator(` "\t" `, func(it *Iterator) {
err := it.SkipString()
require.NoError(t, err)
_, err = it.NextValueType()
require.Equal(t, io.EOF, err)
})
})
t.Run("invalid escape", func(t *testing.T) {
withIterator(` "\a`, func(it *Iterator) {
err := it.SkipString()
require.IsType(t, InvalidEscapeCharError{}, err)
})
})
t.Run("invalid u4", func(t *testing.T) {
withIterator(` "\uX`, func(it *Iterator) {
err := it.SkipString()
require.IsType(t, InvalidUnicodeCharError{}, err)
})
})
t.Run("eof u4", func(t *testing.T) {
withIterator(` "\u0`, func(it *Iterator) {
err := it.SkipString()
require.Equal(t, io.EOF, err)
})
})
t.Run("valid u4", func(t *testing.T) {
withIterator(` "\u0000" `, func(it *Iterator) {
err := it.SkipString()
require.NoError(t, err)
_, err = it.NextValueType()
require.Equal(t, io.EOF, err)
})
})
t.Run("invalid string char", func(t *testing.T) {
s := []byte{' ', '"', 0}
withIterator(localByteToString(s), func(it *Iterator) {
err := it.SkipString()
require.IsType(t, InvalidStringCharError{}, err)
})
})
t.Run("eof after first byte", func(t *testing.T) {
withIterator(` " `, func(it *Iterator) {
err := it.SkipString()
require.Equal(t, io.EOF, err)
})
})
}