@@ -11,7 +11,7 @@ const {
11
11
/* eslint-disable */
12
12
var params ; // Strict mode fix for WPT.
13
13
/* WPT Refs:
14
- https://github.com/w3c/web-platform-tests/blob/e94c604916 /url/urlsearchparams-constructor.html
14
+ https://github.com/w3c/web-platform-tests/blob/54c3502d7b /url/urlsearchparams-constructor.html
15
15
License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
16
16
*/
17
17
test ( function ( ) {
@@ -87,6 +87,17 @@ test(function() {
87
87
assert_equals ( params . get ( 'a b' ) , 'c' ) ;
88
88
} , 'Parse +' ) ;
89
89
90
+ test ( function ( ) {
91
+ const testValue = '+15555555555' ;
92
+ const params = new URLSearchParams ( ) ;
93
+ params . set ( 'query' , testValue ) ;
94
+ var newParams = new URLSearchParams ( params . toString ( ) ) ;
95
+
96
+ assert_equals ( params . toString ( ) , 'query=%2B15555555555' ) ;
97
+ assert_equals ( params . get ( 'query' ) , testValue ) ;
98
+ assert_equals ( newParams . get ( 'query' ) , testValue ) ;
99
+ } , 'Parse encoded +' ) ;
100
+
90
101
test ( function ( ) {
91
102
var params = new URLSearchParams ( 'a=b c' ) ;
92
103
assert_equals ( params . get ( 'a' ) , 'b c' ) ;
@@ -156,7 +167,8 @@ test(function() {
156
167
[
157
168
{ "input" : { "+" : "%C2" } , "output" : [ [ "+" , "%C2" ] ] , "name" : "object with +" } ,
158
169
{ "input" : { c : "x" , a : "?" } , "output" : [ [ "c" , "x" ] , [ "a" , "?" ] ] , "name" : "object with two keys" } ,
159
- { "input" : [ [ "c" , "x" ] , [ "a" , "?" ] ] , "output" : [ [ "c" , "x" ] , [ "a" , "?" ] ] , "name" : "array with two keys" }
170
+ { "input" : [ [ "c" , "x" ] , [ "a" , "?" ] ] , "output" : [ [ "c" , "x" ] , [ "a" , "?" ] ] , "name" : "array with two keys" } ,
171
+ { "input" : { "a\0b" : "42" , "c\uD83D" : "23" , "d\u1234" : "foo" } , "output" : [ [ "a\0b" , "42" ] , [ "c\uFFFD" , "23" ] , [ "d\u1234" , "foo" ] ] , "name" : "object with NULL, non-ASCII, and surrogate keys" }
160
172
] . forEach ( ( val ) => {
161
173
test ( ( ) => {
162
174
let params = new URLSearchParams ( val . input ) ,
@@ -179,12 +191,12 @@ test(() => {
179
191
/* eslint-enable */
180
192
181
193
// Tests below are not from WPT.
182
- {
183
- // assert.throws (() => {
184
- // new URLSearchParams( {
185
- // toString() { throw new TypeError('Illegal invocation'); }
186
- // });
187
- // }, TypeError );
194
+ function makeIterableFunc ( array ) {
195
+ return Object . assign ( ( ) => { } , {
196
+ [ Symbol . iterator ] ( ) {
197
+ return array [ Symbol . iterator ] ( ) ;
198
+ }
199
+ } ) ;
188
200
}
189
201
190
202
{
@@ -200,17 +212,25 @@ test(() => {
200
212
} ) ;
201
213
202
214
let params ;
203
- // URLSearchParams constructor, undefined and null as argument
204
215
params = new URLSearchParams ( undefined ) ;
205
216
assert . strictEqual ( params . toString ( ) , '' ) ;
206
217
params = new URLSearchParams ( null ) ;
207
218
assert . strictEqual ( params . toString ( ) , '' ) ;
219
+ params = new URLSearchParams (
220
+ makeIterableFunc ( [ [ 'key' , 'val' ] , [ 'key2' , 'val2' ] ] )
221
+ ) ;
222
+ assert . strictEqual ( params . toString ( ) , 'key=val&key2=val2' ) ;
223
+ params = new URLSearchParams (
224
+ makeIterableFunc ( [ [ 'key' , 'val' ] , [ 'key2' , 'val2' ] ] . map ( makeIterableFunc ) )
225
+ ) ;
226
+ assert . strictEqual ( params . toString ( ) , 'key=val&key2=val2' ) ;
208
227
assert . throws ( ( ) => new URLSearchParams ( [ [ 1 ] ] ) , tupleError ) ;
209
228
assert . throws ( ( ) => new URLSearchParams ( [ [ 1 , 2 , 3 ] ] ) , tupleError ) ;
210
229
assert . throws ( ( ) => new URLSearchParams ( { [ Symbol . iterator ] : 42 } ) ,
211
230
iterableError ) ;
212
231
assert . throws ( ( ) => new URLSearchParams ( [ { } ] ) , tupleError ) ;
213
232
assert . throws ( ( ) => new URLSearchParams ( [ 'a' ] ) , tupleError ) ;
233
+ assert . throws ( ( ) => new URLSearchParams ( [ null ] ) , tupleError ) ;
214
234
assert . throws ( ( ) => new URLSearchParams ( [ { [ Symbol . iterator ] : 42 } ] ) ,
215
235
tupleError ) ;
216
236
}
@@ -221,15 +241,14 @@ test(() => {
221
241
valueOf ( ) { throw new Error ( 'valueOf' ) ; }
222
242
} ;
223
243
const sym = Symbol ( ) ;
224
-
225
- assert . throws ( ( ) => new URLSearchParams ( { a : obj } ) , / ^ E r r o r : t o S t r i n g $ / ) ;
226
- assert . throws ( ( ) => new URLSearchParams ( [ [ 'a' , obj ] ] ) , / ^ E r r o r : t o S t r i n g $ / ) ;
227
- assert . throws ( ( ) => new URLSearchParams ( sym ) ,
228
- / ^ T y p e E r r o r : C a n n o t c o n v e r t a S y m b o l v a l u e t o a s t r i n g $ / ) ;
229
- assert . throws ( ( ) => new URLSearchParams ( { a : sym } ) ,
230
- / ^ T y p e E r r o r : C a n n o t c o n v e r t a S y m b o l v a l u e t o a s t r i n g $ / ) ;
231
- assert . throws ( ( ) => new URLSearchParams ( [ [ sym , 'a' ] ] ) ,
232
- / ^ T y p e E r r o r : C a n n o t c o n v e r t a S y m b o l v a l u e t o a s t r i n g $ / ) ;
233
- assert . throws ( ( ) => new URLSearchParams ( [ [ 'a' , sym ] ] ) ,
234
- / ^ T y p e E r r o r : C a n n o t c o n v e r t a S y m b o l v a l u e t o a s t r i n g $ / ) ;
244
+ const toStringError = / ^ E r r o r : t o S t r i n g $ / ;
245
+ const symbolError = / ^ T y p e E r r o r : C a n n o t c o n v e r t a S y m b o l v a l u e t o a s t r i n g $ / ;
246
+
247
+ assert . throws ( ( ) => new URLSearchParams ( { a : obj } ) , toStringError ) ;
248
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 'a' , obj ] ] ) , toStringError ) ;
249
+ assert . throws ( ( ) => new URLSearchParams ( sym ) , symbolError ) ;
250
+ assert . throws ( ( ) => new URLSearchParams ( { [ sym ] : 'a' } ) , symbolError ) ;
251
+ assert . throws ( ( ) => new URLSearchParams ( { a : sym } ) , symbolError ) ;
252
+ assert . throws ( ( ) => new URLSearchParams ( [ [ sym , 'a' ] ] ) , symbolError ) ;
253
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 'a' , sym ] ] ) , symbolError ) ;
235
254
}
0 commit comments