@@ -30,7 +30,21 @@ test('stringify()', function (t) {
30
30
} ) ;
31
31
32
32
t . test ( 'stringifies an array value' , function ( st ) {
33
- st . equal ( qs . stringify ( { a : [ 'b' , 'c' , 'd' ] } ) , 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d' ) ;
33
+ st . equal (
34
+ qs . stringify ( { a : [ 'b' , 'c' , 'd' ] } , { arrayFormat : 'indices' } ) ,
35
+ 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d' ,
36
+ 'indices => indices'
37
+ ) ;
38
+ st . equal (
39
+ qs . stringify ( { a : [ 'b' , 'c' , 'd' ] } , { arrayFormat : 'brackets' } ) ,
40
+ 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d' ,
41
+ 'brackets => brackets'
42
+ ) ;
43
+ st . equal (
44
+ qs . stringify ( { a : [ 'b' , 'c' , 'd' ] } ) ,
45
+ 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d' ,
46
+ 'default => indices'
47
+ ) ;
34
48
st . end ( ) ;
35
49
} ) ;
36
50
@@ -39,7 +53,6 @@ test('stringify()', function (t) {
39
53
st . end ( ) ;
40
54
} ) ;
41
55
42
-
43
56
t . test ( 'omits nested nulls when asked' , function ( st ) {
44
57
st . equal ( qs . stringify ( { a : { b : 'c' , d : null } } , { skipNulls : true } ) , 'a%5Bb%5D=c' ) ;
45
58
st . end ( ) ;
@@ -51,29 +64,149 @@ test('stringify()', function (t) {
51
64
} ) ;
52
65
53
66
t . test ( 'stringifies a nested array value' , function ( st ) {
67
+ st . equal ( qs . stringify ( { a : { b : [ 'c' , 'd' ] } } , { arrayFormat : 'indices' } ) , 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d' ) ;
68
+ st . equal ( qs . stringify ( { a : { b : [ 'c' , 'd' ] } } , { arrayFormat : 'brackets' } ) , 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d' ) ;
54
69
st . equal ( qs . stringify ( { a : { b : [ 'c' , 'd' ] } } ) , 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d' ) ;
55
70
st . end ( ) ;
56
71
} ) ;
57
72
58
73
t . test ( 'stringifies a nested array value with dots notation' , function ( st ) {
59
- st . equal ( qs . stringify ( { a : { b : [ 'c' , 'd' ] } } , { allowDots : true , encode : false } ) , 'a.b[0]=c&a.b[1]=d' ) ;
74
+ st . equal (
75
+ qs . stringify (
76
+ { a : { b : [ 'c' , 'd' ] } } ,
77
+ { allowDots : true , encode : false , arrayFormat : 'indices' }
78
+ ) ,
79
+ 'a.b[0]=c&a.b[1]=d' ,
80
+ 'indices: stringifies with dots + indices'
81
+ ) ;
82
+ st . equal (
83
+ qs . stringify (
84
+ { a : { b : [ 'c' , 'd' ] } } ,
85
+ { allowDots : true , encode : false , arrayFormat : 'brackets' }
86
+ ) ,
87
+ 'a.b[]=c&a.b[]=d' ,
88
+ 'brackets: stringifies with dots + brackets'
89
+ ) ;
90
+ st . equal (
91
+ qs . stringify (
92
+ { a : { b : [ 'c' , 'd' ] } } ,
93
+ { allowDots : true , encode : false }
94
+ ) ,
95
+ 'a.b[0]=c&a.b[1]=d' ,
96
+ 'default: stringifies with dots + indices'
97
+ ) ;
60
98
st . end ( ) ;
61
99
} ) ;
62
100
63
101
t . test ( 'stringifies an object inside an array' , function ( st ) {
64
- st . equal ( qs . stringify ( { a : [ { b : 'c' } ] } ) , 'a%5B0%5D%5Bb%5D=c' ) ;
65
- st . equal ( qs . stringify ( { a : [ { b : { c : [ 1 ] } } ] } ) , 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1' ) ;
102
+ st . equal (
103
+ qs . stringify ( { a : [ { b : 'c' } ] } , { arrayFormat : 'indices' } ) ,
104
+ 'a%5B0%5D%5Bb%5D=c' ,
105
+ 'indices => brackets'
106
+ ) ;
107
+ st . equal (
108
+ qs . stringify ( { a : [ { b : 'c' } ] } , { arrayFormat : 'brackets' } ) ,
109
+ 'a%5B%5D%5Bb%5D=c' ,
110
+ 'brackets => brackets'
111
+ ) ;
112
+ st . equal (
113
+ qs . stringify ( { a : [ { b : 'c' } ] } ) ,
114
+ 'a%5B0%5D%5Bb%5D=c' ,
115
+ 'default => indices'
116
+ ) ;
117
+
118
+ st . equal (
119
+ qs . stringify ( { a : [ { b : { c : [ 1 ] } } ] } , { arrayFormat : 'indices' } ) ,
120
+ 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1' ,
121
+ 'indices => indices'
122
+ ) ;
123
+
124
+ st . equal (
125
+ qs . stringify ( { a : [ { b : { c : [ 1 ] } } ] } , { arrayFormat : 'brackets' } ) ,
126
+ 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1' ,
127
+ 'brackets => brackets'
128
+ ) ;
129
+
130
+ st . equal (
131
+ qs . stringify ( { a : [ { b : { c : [ 1 ] } } ] } ) ,
132
+ 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1' ,
133
+ 'default => indices'
134
+ ) ;
135
+
66
136
st . end ( ) ;
67
137
} ) ;
68
138
69
139
t . test ( 'stringifies an array with mixed objects and primitives' , function ( st ) {
70
- st . equal ( qs . stringify ( { a : [ { b : 1 } , 2 , 3 ] } , { encode : false } ) , 'a[0][b]=1&a[1]=2&a[2]=3' ) ;
140
+ st . equal (
141
+ qs . stringify ( { a : [ { b : 1 } , 2 , 3 ] } , { encode : false , arrayFormat : 'indices' } ) ,
142
+ 'a[0][b]=1&a[1]=2&a[2]=3' ,
143
+ 'indices => indices'
144
+ ) ;
145
+ st . equal (
146
+ qs . stringify ( { a : [ { b : 1 } , 2 , 3 ] } , { encode : false , arrayFormat : 'brackets' } ) ,
147
+ 'a[][b]=1&a[]=2&a[]=3' ,
148
+ 'brackets => brackets'
149
+ ) ;
150
+ st . equal (
151
+ qs . stringify ( { a : [ { b : 1 } , 2 , 3 ] } , { encode : false } ) ,
152
+ 'a[0][b]=1&a[1]=2&a[2]=3' ,
153
+ 'default => indices'
154
+ ) ;
155
+
71
156
st . end ( ) ;
72
157
} ) ;
73
158
74
159
t . test ( 'stringifies an object inside an array with dots notation' , function ( st ) {
75
- st . equal ( qs . stringify ( { a : [ { b : 'c' } ] } , { allowDots : true , encode : false } ) , 'a[0].b=c' ) ;
76
- st . equal ( qs . stringify ( { a : [ { b : { c : [ 1 ] } } ] } , { allowDots : true , encode : false } ) , 'a[0].b.c[0]=1' ) ;
160
+ st . equal (
161
+ qs . stringify (
162
+ { a : [ { b : 'c' } ] } ,
163
+ { allowDots : true , encode : false , arrayFormat : 'indices' }
164
+ ) ,
165
+ 'a[0].b=c' ,
166
+ 'indices => indices'
167
+ ) ;
168
+ st . equal (
169
+ qs . stringify (
170
+ { a : [ { b : 'c' } ] } ,
171
+ { allowDots : true , encode : false , arrayFormat : 'brackets' }
172
+ ) ,
173
+ 'a[].b=c' ,
174
+ 'brackets => brackets'
175
+ ) ;
176
+ st . equal (
177
+ qs . stringify (
178
+ { a : [ { b : 'c' } ] } ,
179
+ { allowDots : true , encode : false }
180
+ ) ,
181
+ 'a[0].b=c' ,
182
+ 'default => indices'
183
+ ) ;
184
+
185
+ st . equal (
186
+ qs . stringify (
187
+ { a : [ { b : { c : [ 1 ] } } ] } ,
188
+ { allowDots : true , encode : false , arrayFormat : 'indices' }
189
+ ) ,
190
+ 'a[0].b.c[0]=1' ,
191
+ 'indices => indices'
192
+ ) ;
193
+ st . equal (
194
+ qs . stringify (
195
+ { a : [ { b : { c : [ 1 ] } } ] } ,
196
+ { allowDots : true , encode : false , arrayFormat : 'brackets' }
197
+ ) ,
198
+ 'a[].b.c[]=1' ,
199
+ 'brackets => brackets'
200
+ ) ;
201
+ st . equal (
202
+ qs . stringify (
203
+ { a : [ { b : { c : [ 1 ] } } ] } ,
204
+ { allowDots : true , encode : false }
205
+ ) ,
206
+ 'a[0].b.c[0]=1' ,
207
+ 'default => indices'
208
+ ) ;
209
+
77
210
st . end ( ) ;
78
211
} ) ;
79
212
@@ -214,7 +347,32 @@ test('stringify()', function (t) {
214
347
t . test ( 'selects properties when filter=array' , function ( st ) {
215
348
st . equal ( qs . stringify ( { a : 'b' } , { filter : [ 'a' ] } ) , 'a=b' ) ;
216
349
st . equal ( qs . stringify ( { a : 1 } , { filter : [ ] } ) , '' ) ;
217
- st . equal ( qs . stringify ( { a : { b : [ 1 , 2 , 3 , 4 ] , c : 'd' } , c : 'f' } , { filter : [ 'a' , 'b' , 0 , 2 ] } ) , 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3' ) ;
350
+
351
+ st . equal (
352
+ qs . stringify (
353
+ { a : { b : [ 1 , 2 , 3 , 4 ] , c : 'd' } , c : 'f' } ,
354
+ { filter : [ 'a' , 'b' , 0 , 2 ] , arrayFormat : 'indices' }
355
+ ) ,
356
+ 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3' ,
357
+ 'indices => indices'
358
+ ) ;
359
+ st . equal (
360
+ qs . stringify (
361
+ { a : { b : [ 1 , 2 , 3 , 4 ] , c : 'd' } , c : 'f' } ,
362
+ { filter : [ 'a' , 'b' , 0 , 2 ] , arrayFormat : 'brackets' }
363
+ ) ,
364
+ 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3' ,
365
+ 'brackets => brackets'
366
+ ) ;
367
+ st . equal (
368
+ qs . stringify (
369
+ { a : { b : [ 1 , 2 , 3 , 4 ] , c : 'd' } , c : 'f' } ,
370
+ { filter : [ 'a' , 'b' , 0 , 2 ] }
371
+ ) ,
372
+ 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3' ,
373
+ 'default => indices'
374
+ ) ;
375
+
218
376
st . end ( ) ;
219
377
} ) ;
220
378
0 commit comments