@@ -4,6 +4,7 @@ var assert = require('node:assert')
44var AsyncLocalStorage = require ( 'node:async_hooks' ) . AsyncLocalStorage
55var http = require ( 'node:http' )
66var request = require ( 'supertest' )
7+ var qs = require ( 'qs' )
78
89var bodyParser = require ( '..' )
910
@@ -43,11 +44,14 @@ describe('bodyParser.urlencoded()', function () {
4344 . expect ( 200 , '{}' , done )
4445 } )
4546
46- var extendedValues = [ true , false ]
47+ var extendedValues = [
48+ { extended : qs . parse , extendedParsing : true } ,
49+ { extended : qs . parse , extendedParsing : false }
50+ ]
4751 extendedValues . forEach ( function ( extended ) {
4852 describe ( 'in ' + ( extended ? 'extended' : 'simple' ) + ' mode' , function ( ) {
4953 it ( 'should parse x-www-form-urlencoded with an explicit iso-8859-1 encoding' , function ( done ) {
50- var server = createServer ( { extended : extended } )
54+ var server = createServer ( { ... extended } )
5155 request ( server )
5256 . post ( '/' )
5357 . set ( 'Content-Type' , 'application/x-www-form-urlencoded; charset=iso-8859-1' )
@@ -56,7 +60,7 @@ describe('bodyParser.urlencoded()', function () {
5660 } )
5761
5862 it ( 'should parse x-www-form-urlencoded with unspecified iso-8859-1 encoding when the defaultCharset is set to iso-8859-1' , function ( done ) {
59- var server = createServer ( { defaultCharset : 'iso-8859-1' , extended : extended } )
63+ var server = createServer ( { defaultCharset : 'iso-8859-1' , ... extended } )
6064 request ( server )
6165 . post ( '/' )
6266 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -65,7 +69,7 @@ describe('bodyParser.urlencoded()', function () {
6569 } )
6670
6771 it ( 'should parse x-www-form-urlencoded with an unspecified iso-8859-1 encoding when the utf8 sentinel has a value of %26%2310003%3B' , function ( done ) {
68- var server = createServer ( { charsetSentinel : true , extended : extended } )
72+ var server = createServer ( { charsetSentinel : true , ... extended } )
6973 request ( server )
7074 . post ( '/' )
7175 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -74,7 +78,7 @@ describe('bodyParser.urlencoded()', function () {
7478 } )
7579
7680 it ( 'should parse x-www-form-urlencoded with an unspecified utf-8 encoding when the utf8 sentinel has a value of %E2%9C%93 and the defaultCharset is iso-8859-1' , function ( done ) {
77- var server = createServer ( { charsetSentinel : true , extended : extended } )
81+ var server = createServer ( { charsetSentinel : true , ... extended } )
7882 request ( server )
7983 . post ( '/' )
8084 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -83,7 +87,7 @@ describe('bodyParser.urlencoded()', function () {
8387 } )
8488
8589 it ( 'should not leave an empty string parameter when removing the utf8 sentinel from the start of the string' , function ( done ) {
86- var server = createServer ( { charsetSentinel : true , extended : extended } )
90+ var server = createServer ( { charsetSentinel : true , ... extended } )
8791 request ( server )
8892 . post ( '/' )
8993 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -92,7 +96,7 @@ describe('bodyParser.urlencoded()', function () {
9296 } )
9397
9498 it ( 'should not leave an empty string parameter when removing the utf8 sentinel from the middle of the string' , function ( done ) {
95- var server = createServer ( { charsetSentinel : true , extended : extended } )
99+ var server = createServer ( { charsetSentinel : true , ... extended } )
96100 request ( server )
97101 . post ( '/' )
98102 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -101,7 +105,7 @@ describe('bodyParser.urlencoded()', function () {
101105 } )
102106
103107 it ( 'should not leave an empty string parameter when removing the utf8 sentinel from the end of the string' , function ( done ) {
104- var server = createServer ( { charsetSentinel : true , extended : extended } )
108+ var server = createServer ( { charsetSentinel : true , ... extended } )
105109 request ( server )
106110 . post ( '/' )
107111 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -160,10 +164,10 @@ describe('bodyParser.urlencoded()', function () {
160164 . expect ( 200 , '{"user[name][first]":"Tobi"}' , done )
161165 } )
162166
163- describe ( 'with extended option' , function ( ) {
164- describe ( 'when false' , function ( ) {
167+ describe ( 'with extendedParsing option' , function ( ) {
168+ describe ( 'with qs.parse when false' , function ( ) {
165169 before ( function ( ) {
166- this . server = createServer ( { extended : false } )
170+ this . server = createServer ( { extended : qs . parse , extendedParsing : false } )
167171 } )
168172
169173 it ( 'should not parse extended syntax' , function ( done ) {
@@ -183,9 +187,9 @@ describe('bodyParser.urlencoded()', function () {
183187 } )
184188 } )
185189
186- describe ( 'when true' , function ( ) {
190+ describe ( 'with qs.parse when true' , function ( ) {
187191 before ( function ( ) {
188- this . server = createServer ( { extended : true } )
192+ this . server = createServer ( { extended : qs . parse } )
189193 } )
190194
191195 it ( 'should parse multiple key instances' , function ( done ) {
@@ -296,7 +300,7 @@ describe('bodyParser.urlencoded()', function () {
296300 } )
297301
298302 it ( 'should parse up to the specified depth' , function ( done ) {
299- this . server = createServer ( { extended : true , depth : 10 } )
303+ this . server = createServer ( { extended : qs . parse , depth : 10 } ) // TODO: test extended: true
300304 request ( this . server )
301305 . post ( '/' )
302306 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -305,7 +309,7 @@ describe('bodyParser.urlencoded()', function () {
305309 } )
306310
307311 it ( 'should not parse beyond the specified depth' , function ( done ) {
308- this . server = createServer ( { extended : true , depth : 1 } )
312+ this . server = createServer ( { extended : qs . parse , depth : 1 } )
309313 request ( this . server )
310314 . post ( '/' )
311315 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
@@ -316,7 +320,7 @@ describe('bodyParser.urlencoded()', function () {
316320
317321 describe ( 'when default value' , function ( ) {
318322 before ( function ( ) {
319- this . server = createServer ( { extended : true } )
323+ this . server = createServer ( { extended : qs . parse } )
320324 } )
321325
322326 it ( 'should parse deeply nested objects' , function ( done ) {
@@ -462,27 +466,27 @@ describe('bodyParser.urlencoded()', function () {
462466 } )
463467
464468 describe ( 'with parameterLimit option' , function ( ) {
465- describe ( 'with extended: false' , function ( ) {
469+ describe ( 'with extended: qs.parse, extendedParsing: false' , function ( ) {
466470 it ( 'should reject 0' , function ( ) {
467- assert . throws ( createServer . bind ( null , { extended : false , parameterLimit : 0 } ) ,
471+ assert . throws ( createServer . bind ( null , { extended : qs . parse , extendedParsing : false , parameterLimit : 0 } ) ,
468472 / T y p e E r r o r : o p t i o n p a r a m e t e r L i m i t m u s t b e a p o s i t i v e n u m b e r / )
469473 } )
470474
471475 it ( 'should reject string' , function ( ) {
472- assert . throws ( createServer . bind ( null , { extended : false , parameterLimit : 'beep' } ) ,
476+ assert . throws ( createServer . bind ( null , { extended : qs . parse , extendedParsing : false , parameterLimit : 'beep' } ) ,
473477 / T y p e E r r o r : o p t i o n p a r a m e t e r L i m i t m u s t b e a p o s i t i v e n u m b e r / )
474478 } )
475479
476480 it ( 'should 413 if over limit' , function ( done ) {
477- request ( createServer ( { extended : false , parameterLimit : 10 } ) )
481+ request ( createServer ( { extended : qs . parse , extendedParsing : false , parameterLimit : 10 } ) )
478482 . post ( '/' )
479483 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
480484 . send ( createManyParams ( 11 ) )
481485 . expect ( 413 , '[parameters.too.many] too many parameters' , done )
482486 } )
483487
484488 it ( 'should work when at the limit' , function ( done ) {
485- request ( createServer ( { extended : false , parameterLimit : 10 } ) )
489+ request ( createServer ( { extended : qs . parse , extendedParsing : false , parameterLimit : 10 } ) )
486490 . post ( '/' )
487491 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
488492 . send ( createManyParams ( 10 ) )
@@ -491,15 +495,15 @@ describe('bodyParser.urlencoded()', function () {
491495 } )
492496
493497 it ( 'should work if number is floating point' , function ( done ) {
494- request ( createServer ( { extended : false , parameterLimit : 10.1 } ) )
498+ request ( createServer ( { extended : qs . parse , extendedParsing : false , parameterLimit : 10.1 } ) )
495499 . post ( '/' )
496500 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
497501 . send ( createManyParams ( 11 ) )
498502 . expect ( 413 , / t o o m a n y p a r a m e t e r s / , done )
499503 } )
500504
501505 it ( 'should work with large limit' , function ( done ) {
502- request ( createServer ( { extended : false , parameterLimit : 5000 } ) )
506+ request ( createServer ( { extended : qs . parse , extendedParsing : false , parameterLimit : 5000 } ) )
503507 . post ( '/' )
504508 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
505509 . send ( createManyParams ( 5000 ) )
@@ -508,7 +512,7 @@ describe('bodyParser.urlencoded()', function () {
508512 } )
509513
510514 it ( 'should work with Infinity limit' , function ( done ) {
511- request ( createServer ( { extended : false , parameterLimit : Infinity } ) )
515+ request ( createServer ( { extended : qs . parse , extendedParsing : false , parameterLimit : Infinity } ) )
512516 . post ( '/' )
513517 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
514518 . send ( createManyParams ( 10000 ) )
@@ -517,27 +521,27 @@ describe('bodyParser.urlencoded()', function () {
517521 } )
518522 } )
519523
520- describe ( 'with extended: true ' , function ( ) {
524+ describe ( 'with extended: qs.parse ' , function ( ) {
521525 it ( 'should reject 0' , function ( ) {
522- assert . throws ( createServer . bind ( null , { extended : true , parameterLimit : 0 } ) ,
526+ assert . throws ( createServer . bind ( null , { extended : qs . parse , parameterLimit : 0 } ) ,
523527 / T y p e E r r o r : o p t i o n p a r a m e t e r L i m i t m u s t b e a p o s i t i v e n u m b e r / )
524528 } )
525529
526530 it ( 'should reject string' , function ( ) {
527- assert . throws ( createServer . bind ( null , { extended : true , parameterLimit : 'beep' } ) ,
531+ assert . throws ( createServer . bind ( null , { extended : qs . parse , parameterLimit : 'beep' } ) ,
528532 / T y p e E r r o r : o p t i o n p a r a m e t e r L i m i t m u s t b e a p o s i t i v e n u m b e r / )
529533 } )
530534
531535 it ( 'should 413 if over limit' , function ( done ) {
532- request ( createServer ( { extended : true , parameterLimit : 10 } ) )
536+ request ( createServer ( { extended : qs . parse , parameterLimit : 10 } ) )
533537 . post ( '/' )
534538 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
535539 . send ( createManyParams ( 11 ) )
536540 . expect ( 413 , '[parameters.too.many] too many parameters' , done )
537541 } )
538542
539543 it ( 'should work when at the limit' , function ( done ) {
540- request ( createServer ( { extended : true , parameterLimit : 10 } ) )
544+ request ( createServer ( { extended : qs . parse , parameterLimit : 10 } ) )
541545 . post ( '/' )
542546 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
543547 . send ( createManyParams ( 10 ) )
@@ -546,15 +550,15 @@ describe('bodyParser.urlencoded()', function () {
546550 } )
547551
548552 it ( 'should work if number is floating point' , function ( done ) {
549- request ( createServer ( { extended : true , parameterLimit : 10.1 } ) )
553+ request ( createServer ( { extended : qs . parse , parameterLimit : 10.1 } ) )
550554 . post ( '/' )
551555 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
552556 . send ( createManyParams ( 11 ) )
553557 . expect ( 413 , / t o o m a n y p a r a m e t e r s / , done )
554558 } )
555559
556560 it ( 'should work with large limit' , function ( done ) {
557- request ( createServer ( { extended : true , parameterLimit : 5000 } ) )
561+ request ( createServer ( { extended : qs . parse , parameterLimit : 5000 } ) )
558562 . post ( '/' )
559563 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
560564 . send ( createManyParams ( 5000 ) )
@@ -563,7 +567,7 @@ describe('bodyParser.urlencoded()', function () {
563567 } )
564568
565569 it ( 'should work with Infinity limit' , function ( done ) {
566- request ( createServer ( { extended : true , parameterLimit : Infinity } ) )
570+ request ( createServer ( { extended : qs . parse , parameterLimit : Infinity } ) )
567571 . post ( '/' )
568572 . set ( 'Content-Type' , 'application/x-www-form-urlencoded' )
569573 . send ( createManyParams ( 10000 ) )
0 commit comments