@@ -16,23 +16,30 @@ assert.strictEqual(params + '', 'a=b');
16
16
params = new URLSearchParams ( params ) ;
17
17
assert . strictEqual ( params + '' , 'a=b' ) ;
18
18
19
- // URLSearchParams constructor, empty.
19
+ // URLSearchParams constructor, no arguments
20
+ params = new URLSearchParams ( ) ;
21
+ assert . strictEqual ( params . toString ( ) , '' ) ;
22
+
20
23
assert . throws ( ( ) => URLSearchParams ( ) , TypeError ,
21
24
'Calling \'URLSearchParams\' without \'new\' should throw.' ) ;
22
- // assert.throws(() => new URLSearchParams(DOMException.prototype), TypeError);
23
- assert . throws ( ( ) => {
24
- new URLSearchParams ( {
25
- toString ( ) { throw new TypeError ( 'Illegal invocation' ) ; }
26
- } ) ;
27
- } , TypeError ) ;
25
+
26
+ // URLSearchParams constructor, undefined and null as argument
27
+ params = new URLSearchParams ( undefined ) ;
28
+ assert . strictEqual ( params . toString ( ) , '' ) ;
29
+ params = new URLSearchParams ( null ) ;
30
+ assert . strictEqual ( params . toString ( ) , '' ) ;
31
+
32
+ // URLSearchParams constructor, empty string as argument
28
33
params = new URLSearchParams ( '' ) ;
29
- assert . notStrictEqual ( params , null , 'constructor returned non-null value.' ) ;
34
+ // eslint-disable-next-line no-restricted-properties
35
+ assert . notEqual ( params , null , 'constructor returned non-null value.' ) ;
30
36
// eslint-disable-next-line no-proto
31
37
assert . strictEqual ( params . __proto__ , URLSearchParams . prototype ,
32
38
'expected URLSearchParams.prototype as prototype.' ) ;
39
+
40
+ // URLSearchParams constructor, {} as argument
33
41
params = new URLSearchParams ( { } ) ;
34
- // assert.strictEqual(params + '', '%5Bobject+Object%5D=');
35
- assert . strictEqual ( params + '' , '%5Bobject%20Object%5D=' ) ;
42
+ assert . strictEqual ( params + '' , '' ) ;
36
43
37
44
// URLSearchParams constructor, string.
38
45
params = new URLSearchParams ( 'a=b' ) ;
@@ -128,3 +135,56 @@ params = new URLSearchParams('a=b%f0%9f%92%a9c');
128
135
assert . strictEqual ( params . get ( 'a' ) , 'b\uD83D\uDCA9c' ) ;
129
136
params = new URLSearchParams ( 'a%f0%9f%92%a9b=c' ) ;
130
137
assert . strictEqual ( params . get ( 'a\uD83D\uDCA9b' ) , 'c' ) ;
138
+
139
+ // Constructor with sequence of sequences of strings
140
+ params = new URLSearchParams ( [ ] ) ;
141
+ // eslint-disable-next-line no-restricted-properties
142
+ assert . notEqual ( params , null , 'constructor returned non-null value.' ) ;
143
+ params = new URLSearchParams ( [ [ 'a' , 'b' ] , [ 'c' , 'd' ] ] ) ;
144
+ assert . strictEqual ( params . get ( 'a' ) , 'b' ) ;
145
+ assert . strictEqual ( params . get ( 'c' ) , 'd' ) ;
146
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 1 ] ] ) ,
147
+ / ^ T y p e E r r o r : E a c h q u e r y p a i r m u s t b e a n a m e \/ v a l u e t u p l e $ / ) ;
148
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 1 , 2 , 3 ] ] ) ,
149
+ / ^ T y p e E r r o r : E a c h q u e r y p a i r m u s t b e a n a m e \/ v a l u e t u p l e $ / ) ;
150
+
151
+ [
152
+ // Further confirmation needed
153
+ // https://github.com/w3c/web-platform-tests/pull/4523#discussion_r98337513
154
+ // {
155
+ // input: {'+': '%C2'},
156
+ // output: [[' ', '\uFFFD']],
157
+ // name: 'object with +'
158
+ // },
159
+ {
160
+ input : { c : 'x' , a : '?' } ,
161
+ output : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
162
+ name : 'object with two keys'
163
+ } ,
164
+ {
165
+ input : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
166
+ output : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
167
+ name : 'array with two keys'
168
+ }
169
+ ] . forEach ( ( val ) => {
170
+ const params = new URLSearchParams ( val . input ) ;
171
+ assert . deepStrictEqual ( Array . from ( params ) , val . output ,
172
+ `Construct with ${ val . name } ` ) ;
173
+ } ) ;
174
+
175
+ // Custom [Symbol.iterator]
176
+ params = new URLSearchParams ( ) ;
177
+ params [ Symbol . iterator ] = function * ( ) {
178
+ yield [ 'a' , 'b' ] ;
179
+ } ;
180
+ const params2 = new URLSearchParams ( params ) ;
181
+ assert . strictEqual ( params2 . get ( 'a' ) , 'b' ) ;
182
+
183
+ assert . throws ( ( ) => new URLSearchParams ( { [ Symbol . iterator ] : 42 } ) ,
184
+ / ^ T y p e E r r o r : Q u e r y p a i r s m u s t b e i t e r a b l e $ / ) ;
185
+ assert . throws ( ( ) => new URLSearchParams ( [ { } ] ) ,
186
+ / ^ T y p e E r r o r : E a c h q u e r y p a i r m u s t b e i t e r a b l e $ / ) ;
187
+ assert . throws ( ( ) => new URLSearchParams ( [ 'a' ] ) ,
188
+ / ^ T y p e E r r o r : E a c h q u e r y p a i r m u s t b e i t e r a b l e $ / ) ;
189
+ assert . throws ( ( ) => new URLSearchParams ( [ { [ Symbol . iterator ] : 42 } ] ) ,
190
+ / ^ T y p e E r r o r : E a c h q u e r y p a i r m u s t b e i t e r a b l e $ / ) ;
0 commit comments