-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdec_arr_test.go
81 lines (76 loc) · 1.76 KB
/
dec_arr_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
package jx
import (
"encoding/json"
"io"
"testing"
"github.com/stretchr/testify/require"
)
func TestDecoder_Arr(t *testing.T) {
t.Run("Blank", func(t *testing.T) {
d := DecodeStr(`[]`)
require.NoError(t, d.Arr(nil))
})
t.Run("Invalid", func(t *testing.T) {
d := DecodeStr(`{`)
require.Error(t, d.Arr(nil))
})
t.Run("ErrUnexpectedEOF", func(t *testing.T) {
d := DecodeStr("")
require.ErrorIs(t, d.Arr(nil), io.ErrUnexpectedEOF)
})
t.Run("ErrUnexpectedEOF", func(t *testing.T) {
d := DecodeStr("[")
require.ErrorIs(t, d.Arr(nil), io.ErrUnexpectedEOF)
})
t.Run("Invalid", func(t *testing.T) {
for _, s := range testArrs {
checker := require.Error
if json.Valid([]byte(s)) {
checker = require.NoError
}
d := DecodeStr(s)
checker(t, d.Arr(crawlValue), s)
}
})
t.Run("Whitespace", func(t *testing.T) {
d := DecodeStr(`[1 , 2, 3 ,45, 6]`)
require.NoError(t, d.Arr(func(d *Decoder) error {
_, err := d.Int()
return err
}))
})
t.Run("Depth", func(t *testing.T) {
var data []byte
for i := 0; i <= maxDepth; i++ {
data = append(data, '[')
}
d := DecodeBytes(data)
require.ErrorIs(t, d.Arr(nil), errMaxDepth)
})
}
func TestDecoder_Elem(t *testing.T) {
t.Run("Blank", func(t *testing.T) {
d := DecodeStr(`[]`)
ok, err := d.Elem()
require.NoError(t, err)
require.False(t, ok)
})
t.Run("Invalid", func(t *testing.T) {
d := DecodeStr(`{`)
ok, err := d.Elem()
require.Error(t, err)
require.False(t, ok)
})
t.Run("EOF", func(t *testing.T) {
d := DecodeStr("")
ok, err := d.Elem()
require.ErrorIs(t, err, io.EOF)
require.False(t, ok)
})
t.Run("ErrUnexpectedEOF", func(t *testing.T) {
d := DecodeStr("[")
ok, err := d.Elem()
require.ErrorIs(t, err, io.ErrUnexpectedEOF)
require.False(t, ok)
})
}