@@ -16,23 +16,24 @@ 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, empty string as argument
28
27
params = new URLSearchParams ( '' ) ;
29
- assert . notStrictEqual ( params , null , 'constructor returned non-null value.' ) ;
28
+ // eslint-disable-next-line no-restricted-properties
29
+ assert . notEqual ( params , null , 'constructor returned non-null value.' ) ;
30
30
// eslint-disable-next-line no-proto
31
31
assert . strictEqual ( params . __proto__ , URLSearchParams . prototype ,
32
32
'expected URLSearchParams.prototype as prototype.' ) ;
33
+
34
+ // URLSearchParams constructor, {} as argument
33
35
params = new URLSearchParams ( { } ) ;
34
- // assert.strictEqual(params + '', '%5Bobject+Object%5D=');
35
- assert . strictEqual ( params + '' , '%5Bobject%20Object%5D=' ) ;
36
+ assert . strictEqual ( params + '' , '' ) ;
36
37
37
38
// URLSearchParams constructor, string.
38
39
params = new URLSearchParams ( 'a=b' ) ;
@@ -128,3 +129,60 @@ params = new URLSearchParams('a=b%f0%9f%92%a9c');
128
129
assert . strictEqual ( params . get ( 'a' ) , 'b\uD83D\uDCA9c' ) ;
129
130
params = new URLSearchParams ( 'a%f0%9f%92%a9b=c' ) ;
130
131
assert . strictEqual ( params . get ( 'a\uD83D\uDCA9b' ) , 'c' ) ;
132
+
133
+ // Constructor with sequence of sequences of strings
134
+ params = new URLSearchParams ( [ ] ) ;
135
+ // eslint-disable-next-line no-restricted-properties
136
+ assert . notEqual ( params , null , 'constructor returned non-null value.' ) ;
137
+ params = new URLSearchParams ( [ [ 'a' , 'b' ] , [ 'c' , 'd' ] ] ) ;
138
+ assert . strictEqual ( params . get ( 'a' ) , 'b' ) ;
139
+ assert . strictEqual ( params . get ( 'c' ) , 'd' ) ;
140
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 1 ] ] ) ,
141
+ / ^ 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 $ / ) ;
142
+ assert . throws ( ( ) => new URLSearchParams ( [ [ 1 , 2 , 3 ] ] ) ,
143
+ / ^ 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 $ / ) ;
144
+
145
+ [
146
+ // Further confirmation needed
147
+ // https://github.com/w3c/web-platform-tests/pull/4523#discussion_r98337513
148
+ // {
149
+ // input: {'+': '%C2'},
150
+ // output: [[' ', '\uFFFD']],
151
+ // name: 'object with +'
152
+ // },
153
+ {
154
+ input : { c : 'x' , a : '?' } ,
155
+ output : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
156
+ name : 'object with two keys'
157
+ } ,
158
+ {
159
+ input : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
160
+ output : [ [ 'c' , 'x' ] , [ 'a' , '?' ] ] ,
161
+ name : 'array with two keys'
162
+ }
163
+ ] . forEach ( ( val ) => {
164
+ const params = new URLSearchParams ( val . input ) ;
165
+ let i = 0 ;
166
+ for ( const param of params ) {
167
+ assert . deepStrictEqual ( param , val . output [ i ] ,
168
+ `Construct with ${ val . name } ` ) ;
169
+ i ++ ;
170
+ }
171
+ } ) ;
172
+
173
+ // Custom [Symbol.iterator]
174
+ params = new URLSearchParams ( ) ;
175
+ params [ Symbol . iterator ] = function * ( ) {
176
+ yield [ 'a' , 'b' ] ;
177
+ } ;
178
+ const params2 = new URLSearchParams ( params ) ;
179
+ assert . strictEqual ( params2 . get ( 'a' ) , 'b' ) ;
180
+
181
+ assert . throws ( ( ) => new URLSearchParams ( { [ Symbol . iterator ] : 42 } ) ,
182
+ / ^ 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 $ / ) ;
183
+ assert . throws ( ( ) => new URLSearchParams ( [ { } ] ) ,
184
+ / ^ 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 $ / ) ;
185
+ assert . throws ( ( ) => new URLSearchParams ( [ 'a' ] ) ,
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 ( [ { [ Symbol . iterator ] : 42 } ] ) ,
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 $ / ) ;
0 commit comments