@@ -2,6 +2,7 @@ package jsonparser
22
33import (
44 "fmt"
5+ "strings"
56 "testing"
67)
78
@@ -38,3 +39,142 @@ func TestPanickingErrors(t *testing.T) {
3839 t .Error ("Expected error..." )
3940 }
4041}
42+
43+ // check having a very deep key depth
44+ func TestKeyDepth (t * testing.T ) {
45+ var sb strings.Builder
46+ var keys []string
47+ //build data
48+ sb .WriteString ("{" )
49+ for i := 0 ; i < 128 ; i ++ {
50+ fmt .Fprintf (& sb , `"key%d": %dx,` , i , i )
51+ keys = append (keys , fmt .Sprintf ("key%d" , i ))
52+ }
53+ sb .WriteString ("}" )
54+
55+ data := []byte (sb .String ())
56+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
57+ return
58+ }, keys )
59+ }
60+
61+ // check having a bunch of keys in a call to EachKey
62+ func TestKeyCount (t * testing.T ) {
63+ var sb strings.Builder
64+ var keys [][]string
65+ //build data
66+ sb .WriteString ("{" )
67+ for i := 0 ; i < 128 ; i ++ {
68+ fmt .Fprintf (& sb , `"key%d":"%d"` , i , i )
69+ if i < 127 {
70+ sb .WriteString ("," )
71+ }
72+ keys = append (keys , []string {fmt .Sprintf ("key%d" , i )})
73+ }
74+ sb .WriteString ("}" )
75+
76+ data := []byte (sb .String ())
77+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
78+ return
79+ }, keys ... )
80+ }
81+
82+ // try pulling lots of keys out of a big array
83+ func TestKeyDepthArray (t * testing.T ) {
84+ var sb strings.Builder
85+ var keys []string
86+ //build data
87+ sb .WriteString ("[" )
88+ for i := 0 ; i < 128 ; i ++ {
89+ fmt .Fprintf (& sb , `{"key": %d},` , i )
90+ keys = append (keys , fmt .Sprintf ("[%d].key" , i ))
91+ }
92+ sb .WriteString ("]" )
93+
94+ data := []byte (sb .String ())
95+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
96+ return
97+ }, keys )
98+ }
99+
100+ // check having a bunch of keys
101+ func TestKeyCountArray (t * testing.T ) {
102+ var sb strings.Builder
103+ var keys [][]string
104+ //build data
105+ sb .WriteString ("[" )
106+ for i := 0 ; i < 128 ; i ++ {
107+ fmt .Fprintf (& sb , `{"key":"%d"}` , i )
108+ if i < 127 {
109+ sb .WriteString ("," )
110+ }
111+ keys = append (keys , []string {fmt .Sprintf ("[%d].key" , i )})
112+ }
113+ sb .WriteString ("]" )
114+
115+ data := []byte (sb .String ())
116+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
117+ return
118+ }, keys ... )
119+ }
120+
121+ // check having a bunch of keys in a super deep array
122+ func TestEachKeyArray (t * testing.T ) {
123+ var sb strings.Builder
124+ var keys [][]string
125+ //build data
126+ sb .WriteString (`[` )
127+ for i := 0 ; i < 127 ; i ++ {
128+ fmt .Fprintf (& sb , `%d` , i )
129+ if i < 127 {
130+ sb .WriteString ("," )
131+ }
132+ if i < 32 {
133+ keys = append (keys , []string {fmt .Sprintf ("[%d]" , 128 + i )})
134+ }
135+ }
136+ sb .WriteString (`]` )
137+
138+ data := []byte (sb .String ())
139+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
140+ return
141+ }, keys ... )
142+ }
143+
144+ func TestLargeArray (t * testing.T ) {
145+ var sb strings.Builder
146+ //build data
147+ sb .WriteString (`[` )
148+ for i := 0 ; i < 127 ; i ++ {
149+ fmt .Fprintf (& sb , `%d` , i )
150+ if i < 127 {
151+ sb .WriteString ("," )
152+ }
153+ }
154+ sb .WriteString (`]` )
155+ keys := [][]string {[]string {`[1]` }}
156+
157+ data := []byte (sb .String ())
158+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
159+ return
160+ }, keys ... )
161+ }
162+
163+ func TestArrayOutOfBounds (t * testing.T ) {
164+ var sb strings.Builder
165+ //build data
166+ sb .WriteString (`[` )
167+ for i := 0 ; i < 61 ; i ++ {
168+ fmt .Fprintf (& sb , `%d` , i )
169+ if i < 61 {
170+ sb .WriteString ("," )
171+ }
172+ }
173+ sb .WriteString (`]` )
174+ keys := [][]string {[]string {`[128]` }}
175+
176+ data := []byte (sb .String ())
177+ EachKey (data , func (offset int , value []byte , dt ValueType , err error ) {
178+ return
179+ }, keys ... )
180+ }
0 commit comments