qs 6.1.3 → 6.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,24 +20,24 @@
20
20
  </h1>
21
21
  <div class='clearfix'>
22
22
  <div class='fl pad1y space-right2'>
23
- <span class="strong">99.86% </span>
23
+ <span class="strong">99.83% </span>
24
24
  <span class="quiet">Statements</span>
25
- <span class='fraction'>737/738</span>
25
+ <span class='fraction'>590/591</span>
26
26
  </div>
27
27
  <div class='fl pad1y space-right2'>
28
- <span class="strong">92.86% </span>
28
+ <span class="strong">91.67% </span>
29
29
  <span class="quiet">Branches</span>
30
- <span class='fraction'>13/14</span>
30
+ <span class='fraction'>11/12</span>
31
31
  </div>
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Functions</span>
35
- <span class='fraction'>180/180</span>
35
+ <span class='fraction'>136/136</span>
36
36
  </div>
37
37
  <div class='fl pad1y space-right2'>
38
- <span class="strong">99.86% </span>
38
+ <span class="strong">99.83% </span>
39
39
  <span class="quiet">Lines</span>
40
- <span class='fraction'>737/738</span>
40
+ <span class='fraction'>590/591</span>
41
41
  </div>
42
42
  </div>
43
43
  </div>
@@ -1239,323 +1239,7 @@
1239
1239
  1194
1240
1240
  1195
1241
1241
  1196
1242
- 1197
1243
- 1198
1244
- 1199
1245
- 1200
1246
- 1201
1247
- 1202
1248
- 1203
1249
- 1204
1250
- 1205
1251
- 1206
1252
- 1207
1253
- 1208
1254
- 1209
1255
- 1210
1256
- 1211
1257
- 1212
1258
- 1213
1259
- 1214
1260
- 1215
1261
- 1216
1262
- 1217
1263
- 1218
1264
- 1219
1265
- 1220
1266
- 1221
1267
- 1222
1268
- 1223
1269
- 1224
1270
- 1225
1271
- 1226
1272
- 1227
1273
- 1228
1274
- 1229
1275
- 1230
1276
- 1231
1277
- 1232
1278
- 1233
1279
- 1234
1280
- 1235
1281
- 1236
1282
- 1237
1283
- 1238
1284
- 1239
1285
- 1240
1286
- 1241
1287
- 1242
1288
- 1243
1289
- 1244
1290
- 1245
1291
- 1246
1292
- 1247
1293
- 1248
1294
- 1249
1295
- 1250
1296
- 1251
1297
- 1252
1298
- 1253
1299
- 1254
1300
- 1255
1301
- 1256
1302
- 1257
1303
- 1258
1304
- 1259
1305
- 1260
1306
- 1261
1307
- 1262
1308
- 1263
1309
- 1264
1310
- 1265
1311
- 1266
1312
- 1267
1313
- 1268
1314
- 1269
1315
- 1270
1316
- 1271
1317
- 1272
1318
- 1273
1319
- 1274
1320
- 1275
1321
- 1276
1322
- 1277
1323
- 1278
1324
- 1279
1325
- 1280
1326
- 1281
1327
- 1282
1328
- 1283
1329
- 1284
1330
- 1285
1331
- 1286
1332
- 1287
1333
- 1288
1334
- 1289
1335
- 1290
1336
- 1291
1337
- 1292
1338
- 1293
1339
- 1294
1340
- 1295
1341
- 1296
1342
- 1297
1343
- 1298
1344
- 1299
1345
- 1300
1346
- 1301
1347
- 1302
1348
- 1303
1349
- 1304
1350
- 1305
1351
- 1306
1352
- 1307
1353
- 1308
1354
- 1309
1355
- 1310
1356
- 1311
1357
- 1312
1358
- 1313
1359
- 1314
1360
- 1315
1361
- 1316
1362
- 1317
1363
- 1318
1364
- 1319
1365
- 1320
1366
- 1321
1367
- 1322
1368
- 1323
1369
- 1324
1370
- 1325
1371
- 1326
1372
- 1327
1373
- 1328
1374
- 1329
1375
- 1330
1376
- 1331
1377
- 1332
1378
- 1333
1379
- 1334
1380
- 1335
1381
- 1336
1382
- 1337
1383
- 1338
1384
- 1339
1385
- 1340
1386
- 1341
1387
- 1342
1388
- 1343
1389
- 1344
1390
- 1345
1391
- 1346
1392
- 1347
1393
- 1348
1394
- 1349
1395
- 1350
1396
- 1351
1397
- 1352
1398
- 1353
1399
- 1354
1400
- 1355
1401
- 1356
1402
- 1357
1403
- 1358
1404
- 1359
1405
- 1360
1406
- 1361
1407
- 1362
1408
- 1363
1409
- 1364
1410
- 1365
1411
- 1366
1412
- 1367
1413
- 1368
1414
- 1369
1415
- 1370
1416
- 1371
1417
- 1372
1418
- 1373
1419
- 1374
1420
- 1375
1421
- 1376
1422
- 1377
1423
- 1378
1424
- 1379
1425
- 1380
1426
- 1381
1427
- 1382
1428
- 1383
1429
- 1384
1430
- 1385
1431
- 1386
1432
- 1387
1433
- 1388
1434
- 1389
1435
- 1390
1436
- 1391
1437
- 1392
1438
- 1393
1439
- 1394
1440
- 1395
1441
- 1396
1442
- 1397
1443
- 1398
1444
- 1399
1445
- 1400
1446
- 1401
1447
- 1402
1448
- 1403
1449
- 1404
1450
- 1405
1451
- 1406
1452
- 1407
1453
- 1408
1454
- 1409
1455
- 1410
1456
- 1411
1457
- 1412
1458
- 1413
1459
- 1414
1460
- 1415
1461
- 1416
1462
- 1417
1463
- 1418
1464
- 1419
1465
- 1420
1466
- 1421
1467
- 1422
1468
- 1423
1469
- 1424
1470
- 1425
1471
- 1426
1472
- 1427
1473
- 1428
1474
- 1429
1475
- 1430
1476
- 1431
1477
- 1432
1478
- 1433
1479
- 1434
1480
- 1435
1481
- 1436
1482
- 1437
1483
- 1438
1484
- 1439
1485
- 1440
1486
- 1441
1487
- 1442
1488
- 1443
1489
- 1444
1490
- 1445
1491
- 1446
1492
- 1447
1493
- 1448
1494
- 1449
1495
- 1450
1496
- 1451
1497
- 1452
1498
- 1453
1499
- 1454
1500
- 1455
1501
- 1456
1502
- 1457
1503
- 1458
1504
- 1459
1505
- 1460
1506
- 1461
1507
- 1462
1508
- 1463
1509
- 1464
1510
- 1465
1511
- 1466
1512
- 1467
1513
- 1468
1514
- 1469
1515
- 1470
1516
- 1471
1517
- 1472
1518
- 1473
1519
- 1474
1520
- 1475
1521
- 1476
1522
- 1477
1523
- 1478
1524
- 1479
1525
- 1480
1526
- 1481
1527
- 1482
1528
- 1483
1529
- 1484
1530
- 1485
1531
- 1486
1532
- 1487
1533
- 1488
1534
- 1489
1535
- 1490
1536
- 1491
1537
- 1492
1538
- 1493
1539
- 1494
1540
- 1495
1541
- 1496
1542
- 1497
1543
- 1498
1544
- 1499
1545
- 1500
1546
- 1501
1547
- 1502
1548
- 1503
1549
- 1504
1550
- 1505
1551
- 1506
1552
- 1507
1553
- 1508
1554
- 1509
1555
- 1510
1556
- 1511
1557
- 1512
1558
- 1513</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1242
+ 1197</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1559
1243
  <span class="cline-any cline-neutral">&nbsp;</span>
1560
1244
  <span class="cline-any cline-yes">1x</span>
1561
1245
  <span class="cline-any cline-yes">1x</span>
@@ -1766,6 +1450,15 @@
1766
1450
  <span class="cline-any cline-neutral">&nbsp;</span>
1767
1451
  <span class="cline-any cline-yes">1x</span>
1768
1452
  <span class="cline-any cline-yes">1x</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-yes">1x</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-yes">1x</span>
1461
+ <span class="cline-any cline-yes">1x</span>
1769
1462
  <span class="cline-any cline-yes">1x</span>
1770
1463
  <span class="cline-any cline-yes">1x</span>
1771
1464
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2555,20 +2248,6 @@
2555
2248
  <span class="cline-any cline-neutral">&nbsp;</span>
2556
2249
  <span class="cline-any cline-yes">1x</span>
2557
2250
  <span class="cline-any cline-yes">1x</span>
2558
- <span class="cline-any cline-neutral">&nbsp;</span>
2559
- <span class="cline-any cline-neutral">&nbsp;</span>
2560
- <span class="cline-any cline-yes">3x</span>
2561
- <span class="cline-any cline-neutral">&nbsp;</span>
2562
- <span class="cline-any cline-neutral">&nbsp;</span>
2563
- <span class="cline-any cline-neutral">&nbsp;</span>
2564
- <span class="cline-any cline-neutral">&nbsp;</span>
2565
- <span class="cline-any cline-neutral">&nbsp;</span>
2566
- <span class="cline-any cline-neutral">&nbsp;</span>
2567
- <span class="cline-any cline-yes">1x</span>
2568
- <span class="cline-any cline-neutral">&nbsp;</span>
2569
- <span class="cline-any cline-neutral">&nbsp;</span>
2570
- <span class="cline-any cline-yes">1x</span>
2571
- <span class="cline-any cline-yes">1x</span>
2572
2251
  <span class="cline-any cline-yes">1x</span>
2573
2252
  <span class="cline-any cline-neutral">&nbsp;</span>
2574
2253
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2607,138 +2286,6 @@
2607
2286
  <span class="cline-any cline-neutral">&nbsp;</span>
2608
2287
  <span class="cline-any cline-neutral">&nbsp;</span>
2609
2288
  <span class="cline-any cline-yes">1x</span>
2610
- <span class="cline-any cline-yes">1x</span>
2611
- <span class="cline-any cline-yes">1x</span>
2612
- <span class="cline-any cline-yes">1x</span>
2613
- <span class="cline-any cline-yes">1x</span>
2614
- <span class="cline-any cline-neutral">&nbsp;</span>
2615
- <span class="cline-any cline-neutral">&nbsp;</span>
2616
- <span class="cline-any cline-yes">1x</span>
2617
- <span class="cline-any cline-yes">1x</span>
2618
- <span class="cline-any cline-neutral">&nbsp;</span>
2619
- <span class="cline-any cline-yes">1x</span>
2620
- <span class="cline-any cline-neutral">&nbsp;</span>
2621
- <span class="cline-any cline-neutral">&nbsp;</span>
2622
- <span class="cline-any cline-neutral">&nbsp;</span>
2623
- <span class="cline-any cline-neutral">&nbsp;</span>
2624
- <span class="cline-any cline-yes">1x</span>
2625
- <span class="cline-any cline-neutral">&nbsp;</span>
2626
- <span class="cline-any cline-neutral">&nbsp;</span>
2627
- <span class="cline-any cline-yes">1x</span>
2628
- <span class="cline-any cline-yes">1x</span>
2629
- <span class="cline-any cline-neutral">&nbsp;</span>
2630
- <span class="cline-any cline-yes">1x</span>
2631
- <span class="cline-any cline-neutral">&nbsp;</span>
2632
- <span class="cline-any cline-neutral">&nbsp;</span>
2633
- <span class="cline-any cline-neutral">&nbsp;</span>
2634
- <span class="cline-any cline-neutral">&nbsp;</span>
2635
- <span class="cline-any cline-yes">1x</span>
2636
- <span class="cline-any cline-neutral">&nbsp;</span>
2637
- <span class="cline-any cline-neutral">&nbsp;</span>
2638
- <span class="cline-any cline-yes">1x</span>
2639
- <span class="cline-any cline-yes">1x</span>
2640
- <span class="cline-any cline-yes">1x</span>
2641
- <span class="cline-any cline-yes">1x</span>
2642
- <span class="cline-any cline-neutral">&nbsp;</span>
2643
- <span class="cline-any cline-neutral">&nbsp;</span>
2644
- <span class="cline-any cline-yes">1x</span>
2645
- <span class="cline-any cline-yes">1x</span>
2646
- <span class="cline-any cline-yes">1x</span>
2647
- <span class="cline-any cline-yes">1x</span>
2648
- <span class="cline-any cline-neutral">&nbsp;</span>
2649
- <span class="cline-any cline-neutral">&nbsp;</span>
2650
- <span class="cline-any cline-yes">1x</span>
2651
- <span class="cline-any cline-yes">1x</span>
2652
- <span class="cline-any cline-yes">1x</span>
2653
- <span class="cline-any cline-yes">1x</span>
2654
- <span class="cline-any cline-neutral">&nbsp;</span>
2655
- <span class="cline-any cline-neutral">&nbsp;</span>
2656
- <span class="cline-any cline-yes">1x</span>
2657
- <span class="cline-any cline-neutral">&nbsp;</span>
2658
- <span class="cline-any cline-neutral">&nbsp;</span>
2659
- <span class="cline-any cline-yes">1x</span>
2660
- <span class="cline-any cline-yes">1x</span>
2661
- <span class="cline-any cline-yes">1x</span>
2662
- <span class="cline-any cline-yes">1x</span>
2663
- <span class="cline-any cline-yes">1x</span>
2664
- <span class="cline-any cline-neutral">&nbsp;</span>
2665
- <span class="cline-any cline-neutral">&nbsp;</span>
2666
- <span class="cline-any cline-yes">1x</span>
2667
- <span class="cline-any cline-yes">1x</span>
2668
- <span class="cline-any cline-neutral">&nbsp;</span>
2669
- <span class="cline-any cline-yes">1x</span>
2670
- <span class="cline-any cline-neutral">&nbsp;</span>
2671
- <span class="cline-any cline-neutral">&nbsp;</span>
2672
- <span class="cline-any cline-neutral">&nbsp;</span>
2673
- <span class="cline-any cline-neutral">&nbsp;</span>
2674
- <span class="cline-any cline-yes">1x</span>
2675
- <span class="cline-any cline-neutral">&nbsp;</span>
2676
- <span class="cline-any cline-neutral">&nbsp;</span>
2677
- <span class="cline-any cline-yes">1x</span>
2678
- <span class="cline-any cline-neutral">&nbsp;</span>
2679
- <span class="cline-any cline-yes">1x</span>
2680
- <span class="cline-any cline-neutral">&nbsp;</span>
2681
- <span class="cline-any cline-yes">1x</span>
2682
- <span class="cline-any cline-neutral">&nbsp;</span>
2683
- <span class="cline-any cline-neutral">&nbsp;</span>
2684
- <span class="cline-any cline-neutral">&nbsp;</span>
2685
- <span class="cline-any cline-neutral">&nbsp;</span>
2686
- <span class="cline-any cline-yes">1x</span>
2687
- <span class="cline-any cline-neutral">&nbsp;</span>
2688
- <span class="cline-any cline-neutral">&nbsp;</span>
2689
- <span class="cline-any cline-yes">1x</span>
2690
- <span class="cline-any cline-neutral">&nbsp;</span>
2691
- <span class="cline-any cline-yes">1x</span>
2692
- <span class="cline-any cline-yes">1x</span>
2693
- <span class="cline-any cline-yes">1x</span>
2694
- <span class="cline-any cline-yes">1x</span>
2695
- <span class="cline-any cline-neutral">&nbsp;</span>
2696
- <span class="cline-any cline-neutral">&nbsp;</span>
2697
- <span class="cline-any cline-yes">1x</span>
2698
- <span class="cline-any cline-yes">1x</span>
2699
- <span class="cline-any cline-neutral">&nbsp;</span>
2700
- <span class="cline-any cline-yes">1x</span>
2701
- <span class="cline-any cline-yes">1x</span>
2702
- <span class="cline-any cline-neutral">&nbsp;</span>
2703
- <span class="cline-any cline-neutral">&nbsp;</span>
2704
- <span class="cline-any cline-yes">1x</span>
2705
- <span class="cline-any cline-yes">1x</span>
2706
- <span class="cline-any cline-neutral">&nbsp;</span>
2707
- <span class="cline-any cline-yes">1x</span>
2708
- <span class="cline-any cline-neutral">&nbsp;</span>
2709
- <span class="cline-any cline-neutral">&nbsp;</span>
2710
- <span class="cline-any cline-neutral">&nbsp;</span>
2711
- <span class="cline-any cline-neutral">&nbsp;</span>
2712
- <span class="cline-any cline-neutral">&nbsp;</span>
2713
- <span class="cline-any cline-yes">1x</span>
2714
- <span class="cline-any cline-neutral">&nbsp;</span>
2715
- <span class="cline-any cline-yes">1x</span>
2716
- <span class="cline-any cline-neutral">&nbsp;</span>
2717
- <span class="cline-any cline-neutral">&nbsp;</span>
2718
- <span class="cline-any cline-neutral">&nbsp;</span>
2719
- <span class="cline-any cline-neutral">&nbsp;</span>
2720
- <span class="cline-any cline-neutral">&nbsp;</span>
2721
- <span class="cline-any cline-yes">1x</span>
2722
- <span class="cline-any cline-neutral">&nbsp;</span>
2723
- <span class="cline-any cline-neutral">&nbsp;</span>
2724
- <span class="cline-any cline-yes">1x</span>
2725
- <span class="cline-any cline-yes">1x</span>
2726
- <span class="cline-any cline-yes">1x</span>
2727
- <span class="cline-any cline-yes">1x</span>
2728
- <span class="cline-any cline-yes">1x</span>
2729
- <span class="cline-any cline-yes">1x</span>
2730
- <span class="cline-any cline-neutral">&nbsp;</span>
2731
- <span class="cline-any cline-neutral">&nbsp;</span>
2732
- <span class="cline-any cline-yes">1x</span>
2733
- <span class="cline-any cline-yes">1x</span>
2734
- <span class="cline-any cline-yes">1x</span>
2735
- <span class="cline-any cline-yes">1x</span>
2736
- <span class="cline-any cline-neutral">&nbsp;</span>
2737
- <span class="cline-any cline-neutral">&nbsp;</span>
2738
- <span class="cline-any cline-yes">1x</span>
2739
- <span class="cline-any cline-neutral">&nbsp;</span>
2740
- <span class="cline-any cline-neutral">&nbsp;</span>
2741
- <span class="cline-any cline-yes">1x</span>
2742
2289
  <span class="cline-any cline-neutral">&nbsp;</span>
2743
2290
  <span class="cline-any cline-neutral">&nbsp;</span>
2744
2291
  <span class="cline-any cline-yes">1x</span>
@@ -2888,185 +2435,6 @@
2888
2435
  <span class="cline-any cline-yes">1x</span>
2889
2436
  <span class="cline-any cline-neutral">&nbsp;</span>
2890
2437
  <span class="cline-any cline-neutral">&nbsp;</span>
2891
- <span class="cline-any cline-neutral">&nbsp;</span>
2892
- <span class="cline-any cline-yes">1x</span>
2893
- <span class="cline-any cline-yes">1x</span>
2894
- <span class="cline-any cline-yes">1x</span>
2895
- <span class="cline-any cline-yes">105x</span>
2896
- <span class="cline-any cline-neutral">&nbsp;</span>
2897
- <span class="cline-any cline-yes">1x</span>
2898
- <span class="cline-any cline-yes">1x</span>
2899
- <span class="cline-any cline-neutral">&nbsp;</span>
2900
- <span class="cline-any cline-yes">1x</span>
2901
- <span class="cline-any cline-yes">1x</span>
2902
- <span class="cline-any cline-neutral">&nbsp;</span>
2903
- <span class="cline-any cline-yes">1x</span>
2904
- <span class="cline-any cline-neutral">&nbsp;</span>
2905
- <span class="cline-any cline-neutral">&nbsp;</span>
2906
- <span class="cline-any cline-yes">1x</span>
2907
- <span class="cline-any cline-neutral">&nbsp;</span>
2908
- <span class="cline-any cline-yes">1x</span>
2909
- <span class="cline-any cline-neutral">&nbsp;</span>
2910
- <span class="cline-any cline-yes">1x</span>
2911
- <span class="cline-any cline-yes">1x</span>
2912
- <span class="cline-any cline-yes">1x</span>
2913
- <span class="cline-any cline-yes">1x</span>
2914
- <span class="cline-any cline-neutral">&nbsp;</span>
2915
- <span class="cline-any cline-neutral">&nbsp;</span>
2916
- <span class="cline-any cline-yes">1x</span>
2917
- <span class="cline-any cline-neutral">&nbsp;</span>
2918
- <span class="cline-any cline-yes">1x</span>
2919
- <span class="cline-any cline-yes">1x</span>
2920
- <span class="cline-any cline-yes">1x</span>
2921
- <span class="cline-any cline-yes">1x</span>
2922
- <span class="cline-any cline-neutral">&nbsp;</span>
2923
- <span class="cline-any cline-neutral">&nbsp;</span>
2924
- <span class="cline-any cline-yes">1x</span>
2925
- <span class="cline-any cline-neutral">&nbsp;</span>
2926
- <span class="cline-any cline-yes">1x</span>
2927
- <span class="cline-any cline-yes">1x</span>
2928
- <span class="cline-any cline-yes">1x</span>
2929
- <span class="cline-any cline-yes">1x</span>
2930
- <span class="cline-any cline-neutral">&nbsp;</span>
2931
- <span class="cline-any cline-neutral">&nbsp;</span>
2932
- <span class="cline-any cline-yes">1x</span>
2933
- <span class="cline-any cline-neutral">&nbsp;</span>
2934
- <span class="cline-any cline-yes">1x</span>
2935
- <span class="cline-any cline-yes">1x</span>
2936
- <span class="cline-any cline-yes">1x</span>
2937
- <span class="cline-any cline-yes">1x</span>
2938
- <span class="cline-any cline-neutral">&nbsp;</span>
2939
- <span class="cline-any cline-neutral">&nbsp;</span>
2940
- <span class="cline-any cline-yes">1x</span>
2941
- <span class="cline-any cline-neutral">&nbsp;</span>
2942
- <span class="cline-any cline-neutral">&nbsp;</span>
2943
- <span class="cline-any cline-yes">1x</span>
2944
- <span class="cline-any cline-yes">1x</span>
2945
- <span class="cline-any cline-yes">1x</span>
2946
- <span class="cline-any cline-yes">1x</span>
2947
- <span class="cline-any cline-yes">1x</span>
2948
- <span class="cline-any cline-yes">1x</span>
2949
- <span class="cline-any cline-neutral">&nbsp;</span>
2950
- <span class="cline-any cline-neutral">&nbsp;</span>
2951
- <span class="cline-any cline-yes">1x</span>
2952
- <span class="cline-any cline-yes">1x</span>
2953
- <span class="cline-any cline-yes">1x</span>
2954
- <span class="cline-any cline-yes">1x</span>
2955
- <span class="cline-any cline-yes">1x</span>
2956
- <span class="cline-any cline-neutral">&nbsp;</span>
2957
- <span class="cline-any cline-neutral">&nbsp;</span>
2958
- <span class="cline-any cline-yes">1x</span>
2959
- <span class="cline-any cline-yes">1x</span>
2960
- <span class="cline-any cline-neutral">&nbsp;</span>
2961
- <span class="cline-any cline-yes">1x</span>
2962
- <span class="cline-any cline-neutral">&nbsp;</span>
2963
- <span class="cline-any cline-neutral">&nbsp;</span>
2964
- <span class="cline-any cline-neutral">&nbsp;</span>
2965
- <span class="cline-any cline-neutral">&nbsp;</span>
2966
- <span class="cline-any cline-yes">1x</span>
2967
- <span class="cline-any cline-neutral">&nbsp;</span>
2968
- <span class="cline-any cline-neutral">&nbsp;</span>
2969
- <span class="cline-any cline-yes">1x</span>
2970
- <span class="cline-any cline-yes">1x</span>
2971
- <span class="cline-any cline-yes">1x</span>
2972
- <span class="cline-any cline-yes">1x</span>
2973
- <span class="cline-any cline-yes">1x</span>
2974
- <span class="cline-any cline-neutral">&nbsp;</span>
2975
- <span class="cline-any cline-neutral">&nbsp;</span>
2976
- <span class="cline-any cline-yes">1x</span>
2977
- <span class="cline-any cline-neutral">&nbsp;</span>
2978
- <span class="cline-any cline-neutral">&nbsp;</span>
2979
- <span class="cline-any cline-yes">1x</span>
2980
- <span class="cline-any cline-yes">1x</span>
2981
- <span class="cline-any cline-yes">1x</span>
2982
- <span class="cline-any cline-neutral">&nbsp;</span>
2983
- <span class="cline-any cline-neutral">&nbsp;</span>
2984
- <span class="cline-any cline-neutral">&nbsp;</span>
2985
- <span class="cline-any cline-neutral">&nbsp;</span>
2986
- <span class="cline-any cline-yes">1x</span>
2987
- <span class="cline-any cline-neutral">&nbsp;</span>
2988
- <span class="cline-any cline-neutral">&nbsp;</span>
2989
- <span class="cline-any cline-yes">1x</span>
2990
- <span class="cline-any cline-yes">1x</span>
2991
- <span class="cline-any cline-neutral">&nbsp;</span>
2992
- <span class="cline-any cline-neutral">&nbsp;</span>
2993
- <span class="cline-any cline-neutral">&nbsp;</span>
2994
- <span class="cline-any cline-neutral">&nbsp;</span>
2995
- <span class="cline-any cline-yes">1x</span>
2996
- <span class="cline-any cline-neutral">&nbsp;</span>
2997
- <span class="cline-any cline-neutral">&nbsp;</span>
2998
- <span class="cline-any cline-yes">1x</span>
2999
- <span class="cline-any cline-yes">1x</span>
3000
- <span class="cline-any cline-neutral">&nbsp;</span>
3001
- <span class="cline-any cline-neutral">&nbsp;</span>
3002
- <span class="cline-any cline-neutral">&nbsp;</span>
3003
- <span class="cline-any cline-neutral">&nbsp;</span>
3004
- <span class="cline-any cline-yes">1x</span>
3005
- <span class="cline-any cline-neutral">&nbsp;</span>
3006
- <span class="cline-any cline-neutral">&nbsp;</span>
3007
- <span class="cline-any cline-yes">1x</span>
3008
- <span class="cline-any cline-yes">1x</span>
3009
- <span class="cline-any cline-neutral">&nbsp;</span>
3010
- <span class="cline-any cline-neutral">&nbsp;</span>
3011
- <span class="cline-any cline-neutral">&nbsp;</span>
3012
- <span class="cline-any cline-neutral">&nbsp;</span>
3013
- <span class="cline-any cline-yes">1x</span>
3014
- <span class="cline-any cline-neutral">&nbsp;</span>
3015
- <span class="cline-any cline-neutral">&nbsp;</span>
3016
- <span class="cline-any cline-yes">1x</span>
3017
- <span class="cline-any cline-yes">1x</span>
3018
- <span class="cline-any cline-neutral">&nbsp;</span>
3019
- <span class="cline-any cline-neutral">&nbsp;</span>
3020
- <span class="cline-any cline-neutral">&nbsp;</span>
3021
- <span class="cline-any cline-neutral">&nbsp;</span>
3022
- <span class="cline-any cline-yes">1x</span>
3023
- <span class="cline-any cline-neutral">&nbsp;</span>
3024
- <span class="cline-any cline-neutral">&nbsp;</span>
3025
- <span class="cline-any cline-yes">1x</span>
3026
- <span class="cline-any cline-yes">1x</span>
3027
- <span class="cline-any cline-neutral">&nbsp;</span>
3028
- <span class="cline-any cline-neutral">&nbsp;</span>
3029
- <span class="cline-any cline-neutral">&nbsp;</span>
3030
- <span class="cline-any cline-neutral">&nbsp;</span>
3031
- <span class="cline-any cline-yes">1x</span>
3032
- <span class="cline-any cline-neutral">&nbsp;</span>
3033
- <span class="cline-any cline-neutral">&nbsp;</span>
3034
- <span class="cline-any cline-yes">1x</span>
3035
- <span class="cline-any cline-neutral">&nbsp;</span>
3036
- <span class="cline-any cline-yes">1x</span>
3037
- <span class="cline-any cline-neutral">&nbsp;</span>
3038
- <span class="cline-any cline-neutral">&nbsp;</span>
3039
- <span class="cline-any cline-neutral">&nbsp;</span>
3040
- <span class="cline-any cline-neutral">&nbsp;</span>
3041
- <span class="cline-any cline-yes">1x</span>
3042
- <span class="cline-any cline-neutral">&nbsp;</span>
3043
- <span class="cline-any cline-neutral">&nbsp;</span>
3044
- <span class="cline-any cline-yes">1x</span>
3045
- <span class="cline-any cline-yes">1x</span>
3046
- <span class="cline-any cline-neutral">&nbsp;</span>
3047
- <span class="cline-any cline-yes">1x</span>
3048
- <span class="cline-any cline-neutral">&nbsp;</span>
3049
- <span class="cline-any cline-neutral">&nbsp;</span>
3050
- <span class="cline-any cline-neutral">&nbsp;</span>
3051
- <span class="cline-any cline-neutral">&nbsp;</span>
3052
- <span class="cline-any cline-neutral">&nbsp;</span>
3053
- <span class="cline-any cline-yes">1x</span>
3054
- <span class="cline-any cline-neutral">&nbsp;</span>
3055
- <span class="cline-any cline-neutral">&nbsp;</span>
3056
- <span class="cline-any cline-neutral">&nbsp;</span>
3057
- <span class="cline-any cline-neutral">&nbsp;</span>
3058
- <span class="cline-any cline-neutral">&nbsp;</span>
3059
- <span class="cline-any cline-yes">1x</span>
3060
- <span class="cline-any cline-neutral">&nbsp;</span>
3061
- <span class="cline-any cline-neutral">&nbsp;</span>
3062
- <span class="cline-any cline-neutral">&nbsp;</span>
3063
- <span class="cline-any cline-neutral">&nbsp;</span>
3064
- <span class="cline-any cline-neutral">&nbsp;</span>
3065
- <span class="cline-any cline-yes">1x</span>
3066
- <span class="cline-any cline-neutral">&nbsp;</span>
3067
- <span class="cline-any cline-neutral">&nbsp;</span>
3068
- <span class="cline-any cline-yes">1x</span>
3069
- <span class="cline-any cline-neutral">&nbsp;</span>
3070
2438
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict';
3071
2439
  &nbsp;
3072
2440
  var test = require('tape');
@@ -3187,7 +2555,7 @@ test('parse()', function (t) {
3187
2555
  st.end();
3188
2556
  });
3189
2557
  &nbsp;
3190
- t.test('decodes dot in key of object, and allow enabling dot notation when decodeDotInKeys is set to true and allowDots is undefined', function (st) {
2558
+ t.test('should decode dot in key of object, and allow enabling dot notation when decodeDotInKeys is set to true and allowDots is undefined', function (st) {
3191
2559
  st.deepEqual(
3192
2560
  qs.parse(
3193
2561
  'name%252Eobj%252Esubobject.first%252Egodly%252Ename=John&amp;name%252Eobj%252Esubobject.last=Doe',
@@ -3200,7 +2568,7 @@ test('parse()', function (t) {
3200
2568
  st.end();
3201
2569
  });
3202
2570
  &nbsp;
3203
- t.test('throws when decodeDotInKeys is not of type boolean', function (st) {
2571
+ t.test('should throw when decodeDotInKeys is not of type boolean', function (st) {
3204
2572
  st['throws'](
3205
2573
  function () { qs.parse('foo[]&amp;bar=baz', { decodeDotInKeys: 'foobar' }); },
3206
2574
  TypeError
@@ -3230,7 +2598,7 @@ test('parse()', function (t) {
3230
2598
  st.end();
3231
2599
  });
3232
2600
  &nbsp;
3233
- t.test('throws when allowEmptyArrays is not of type boolean', function (st) {
2601
+ t.test('should throw when allowEmptyArrays is not of type boolean', function (st) {
3234
2602
  st['throws'](
3235
2603
  function () { qs.parse('foo[]&amp;bar=baz', { allowEmptyArrays: 'foobar' }); },
3236
2604
  TypeError
@@ -3275,6 +2643,15 @@ test('parse()', function (t) {
3275
2643
  st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } });
3276
2644
  st.end();
3277
2645
  });
2646
+ &nbsp;
2647
+ t.test('correctly computes the remainder when depth is exceeded', function (st) {
2648
+ st.deepEqual(
2649
+ qs.parse('a[b][c][d][e]=f', { depth: 2 }),
2650
+ { a: { b: { c: { '[d][e]': 'f' } } } },
2651
+ 'the remainder is "[d][e]", not the full original key'
2652
+ );
2653
+ st.end();
2654
+ });
3278
2655
  &nbsp;
3279
2656
  t.test('uses original key when depth = 0', function (st) {
3280
2657
  st.deepEqual(qs.parse('a[0]=b&amp;a[1]=c', { depth: 0 }), { 'a[0]': 'b', 'a[1]': 'c' });
@@ -3304,11 +2681,11 @@ test('parse()', function (t) {
3304
2681
  st.deepEqual(qs.parse('a=b&amp;a[0]=c'), { a: ['b', 'c'] });
3305
2682
  &nbsp;
3306
2683
  st.deepEqual(qs.parse('a[1]=b&amp;a=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
3307
- st.deepEqual(qs.parse('a[]=b&amp;a=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } });
2684
+ st.deepEqual(qs.parse('a[]=b&amp;a=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
3308
2685
  st.deepEqual(qs.parse('a[]=b&amp;a=c'), { a: ['b', 'c'] });
3309
2686
  &nbsp;
3310
2687
  st.deepEqual(qs.parse('a=b&amp;a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
3311
- st.deepEqual(qs.parse('a=b&amp;a[]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } });
2688
+ st.deepEqual(qs.parse('a=b&amp;a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
3312
2689
  st.deepEqual(qs.parse('a=b&amp;a[]=c'), { a: ['b', 'c'] });
3313
2690
  &nbsp;
3314
2691
  st.end();
@@ -3330,11 +2707,11 @@ test('parse()', function (t) {
3330
2707
  });
3331
2708
  &nbsp;
3332
2709
  t.test('limits specific array indices to arrayLimit', function (st) {
3333
- st.deepEqual(qs.parse('a[19]=a', { arrayLimit: 20 }), { a: ['a'] });
3334
- st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: { 20: 'a' } });
2710
+ st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] });
2711
+ st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } });
3335
2712
  &nbsp;
3336
- st.deepEqual(qs.parse('a[19]=a'), { a: ['a'] });
3337
- st.deepEqual(qs.parse('a[20]=a'), { a: { 20: 'a' } });
2713
+ st.deepEqual(qs.parse('a[20]=a'), { a: ['a'] });
2714
+ st.deepEqual(qs.parse('a[21]=a'), { a: { 21: 'a' } });
3338
2715
  st.end();
3339
2716
  });
3340
2717
  &nbsp;
@@ -3433,7 +2810,7 @@ test('parse()', function (t) {
3433
2810
  );
3434
2811
  st.deepEqual(
3435
2812
  qs.parse('a[]=b&amp;a[]&amp;a[]=c&amp;a[]=', { strictNullHandling: true, arrayLimit: 0 }),
3436
- { a: { 0: 'b', 1: null, 2: 'c', 3: '' } },
2813
+ { a: ['b', null, 'c', ''] },
3437
2814
  'with arrayLimit 0 + array brackets: null then empty string works'
3438
2815
  );
3439
2816
  &nbsp;
@@ -3444,7 +2821,7 @@ test('parse()', function (t) {
3444
2821
  );
3445
2822
  st.deepEqual(
3446
2823
  qs.parse('a[]=b&amp;a[]=&amp;a[]=c&amp;a[]', { strictNullHandling: true, arrayLimit: 0 }),
3447
- { a: { 0: 'b', 1: '', 2: 'c', 3: null } },
2824
+ { a: ['b', '', 'c', null] },
3448
2825
  'with arrayLimit 0 + array brackets: empty string then null works'
3449
2826
  );
3450
2827
  &nbsp;
@@ -3513,7 +2890,7 @@ test('parse()', function (t) {
3513
2890
  st.end();
3514
2891
  });
3515
2892
  &nbsp;
3516
- t.test('does not throw when a native prototype has an enumerable property', function (st) {
2893
+ t.test('should not throw when a native prototype has an enumerable property', function (st) {
3517
2894
  st.intercept(Object.prototype, 'crash', { value: '' });
3518
2895
  st.intercept(Array.prototype, 'crash', { value: '' });
3519
2896
  &nbsp;
@@ -3552,7 +2929,7 @@ test('parse()', function (t) {
3552
2929
  &nbsp;
3553
2930
  t.test('allows overriding array limit', function (st) {
3554
2931
  st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } });
3555
- st.deepEqual(qs.parse('a[0]=b', { arrayLimit: 0 }), { a: { 0: 'b' } });
2932
+ st.deepEqual(qs.parse('a[0]=b', { arrayLimit: 0 }), { a: ['b'] });
3556
2933
  &nbsp;
3557
2934
  st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } });
3558
2935
  st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: 0 }), { a: { '-1': 'b' } });
@@ -4034,7 +3411,7 @@ test('parse()', function (t) {
4034
3411
  st.end();
4035
3412
  });
4036
3413
  &nbsp;
4037
- t.test('ignores an utf8 sentinel with an unknown value', function (st) {
3414
+ t.test('should ignore an utf8 sentinel with an unknown value', function (st) {
4038
3415
  st.deepEqual(qs.parse('utf8=foo&amp;' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' });
4039
3416
  st.end();
4040
3417
  });
@@ -4064,20 +3441,6 @@ test('parse()', function (t) {
4064
3441
  }), { foo: null, bar: '☺' });
4065
3442
  st.end();
4066
3443
  });
4067
- &nbsp;
4068
- t.test('handles a custom decoder returning `null`, with a string key of `null`', function (st) {
4069
- st.deepEqual(
4070
- qs.parse('null=1&amp;ToNull=2', {
4071
- decoder: function (str, defaultDecoder, charset) {
4072
- return str === 'ToNull' ? null : defaultDecoder(str, defaultDecoder, charset);
4073
- }
4074
- }),
4075
- { 'null': '1' },
4076
- '"null" key is not overridden by `null` decoder result'
4077
- );
4078
- &nbsp;
4079
- st.end();
4080
- });
4081
3444
  &nbsp;
4082
3445
  t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) {
4083
3446
  st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '&amp;#9786;' });
@@ -4117,138 +3480,6 @@ test('parse()', function (t) {
4117
3480
  st.deepEqual(qs.parse('KeY=vAlUe', { decoder: decoder }), { key: 'VALUE' });
4118
3481
  st.end();
4119
3482
  });
4120
- &nbsp;
4121
- t.test('parameter limit tests', function (st) {
4122
- st.test('does not throw error when within parameter limit', function (sst) {
4123
- var result = qs.parse('a=1&amp;b=2&amp;c=3', { parameterLimit: 5, throwOnLimitExceeded: true });
4124
- sst.deepEqual(result, { a: '1', b: '2', c: '3' }, 'parses without errors');
4125
- sst.end();
4126
- });
4127
- &nbsp;
4128
- st.test('throws error when throwOnLimitExceeded is present but not boolean', function (sst) {
4129
- sst['throws'](
4130
- function () {
4131
- qs.parse('a=1&amp;b=2&amp;c=3&amp;d=4&amp;e=5&amp;f=6', { parameterLimit: 3, throwOnLimitExceeded: 'true' });
4132
- },
4133
- new TypeError('`throwOnLimitExceeded` option must be a boolean'),
4134
- 'throws error when throwOnLimitExceeded is present and not boolean'
4135
- );
4136
- sst.end();
4137
- });
4138
- &nbsp;
4139
- st.test('throws error when parameter limit exceeded', function (sst) {
4140
- sst['throws'](
4141
- function () {
4142
- qs.parse('a=1&amp;b=2&amp;c=3&amp;d=4&amp;e=5&amp;f=6', { parameterLimit: 3, throwOnLimitExceeded: true });
4143
- },
4144
- new RangeError('Parameter limit exceeded. Only 3 parameters allowed.'),
4145
- 'throws error when parameter limit is exceeded'
4146
- );
4147
- sst.end();
4148
- });
4149
- &nbsp;
4150
- st.test('silently truncates when throwOnLimitExceeded is not given', function (sst) {
4151
- var result = qs.parse('a=1&amp;b=2&amp;c=3&amp;d=4&amp;e=5', { parameterLimit: 3 });
4152
- sst.deepEqual(result, { a: '1', b: '2', c: '3' }, 'parses and truncates silently');
4153
- sst.end();
4154
- });
4155
- &nbsp;
4156
- st.test('silently truncates when parameter limit exceeded without error', function (sst) {
4157
- var result = qs.parse('a=1&amp;b=2&amp;c=3&amp;d=4&amp;e=5', { parameterLimit: 3, throwOnLimitExceeded: false });
4158
- sst.deepEqual(result, { a: '1', b: '2', c: '3' }, 'parses and truncates silently');
4159
- sst.end();
4160
- });
4161
- &nbsp;
4162
- st.test('allows unlimited parameters when parameterLimit set to Infinity', function (sst) {
4163
- var result = qs.parse('a=1&amp;b=2&amp;c=3&amp;d=4&amp;e=5&amp;f=6', { parameterLimit: Infinity });
4164
- sst.deepEqual(result, { a: '1', b: '2', c: '3', d: '4', e: '5', f: '6' }, 'parses all parameters without truncation');
4165
- sst.end();
4166
- });
4167
- &nbsp;
4168
- st.end();
4169
- });
4170
- &nbsp;
4171
- t.test('array limit tests', function (st) {
4172
- st.test('does not throw error when array is within limit', function (sst) {
4173
- var result = qs.parse('a[]=1&amp;a[]=2&amp;a[]=3', { arrayLimit: 5, throwOnLimitExceeded: true });
4174
- sst.deepEqual(result, { a: ['1', '2', '3'] }, 'parses array without errors');
4175
- sst.end();
4176
- });
4177
- &nbsp;
4178
- st.test('throws error when throwOnLimitExceeded is present but not boolean for array limit', function (sst) {
4179
- sst['throws'](
4180
- function () {
4181
- qs.parse('a[]=1&amp;a[]=2&amp;a[]=3&amp;a[]=4', { arrayLimit: 3, throwOnLimitExceeded: 'true' });
4182
- },
4183
- new TypeError('`throwOnLimitExceeded` option must be a boolean'),
4184
- 'throws error when throwOnLimitExceeded is present and not boolean for array limit'
4185
- );
4186
- sst.end();
4187
- });
4188
- &nbsp;
4189
- st.test('throws error when array limit exceeded', function (sst) {
4190
- // 4 elements exceeds limit of 3
4191
- sst['throws'](
4192
- function () {
4193
- qs.parse('a[]=1&amp;a[]=2&amp;a[]=3&amp;a[]=4', { arrayLimit: 3, throwOnLimitExceeded: true });
4194
- },
4195
- new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
4196
- 'throws error when array limit is exceeded'
4197
- );
4198
- sst.end();
4199
- });
4200
- &nbsp;
4201
- st.test('does not throw when at limit', function (sst) {
4202
- // 3 elements = limit of 3, should not throw
4203
- var result = qs.parse('a[]=1&amp;a[]=2&amp;a[]=3', { arrayLimit: 3, throwOnLimitExceeded: true });
4204
- sst.ok(Array.isArray(result.a), 'result is an array');
4205
- sst.deepEqual(result.a, ['1', '2', '3'], 'all values present');
4206
- sst.end();
4207
- });
4208
- &nbsp;
4209
- st.test('converts array to object if length is greater than limit', function (sst) {
4210
- var result = qs.parse('a[1]=1&amp;a[2]=2&amp;a[3]=3&amp;a[4]=4&amp;a[5]=5&amp;a[6]=6', { arrayLimit: 5 });
4211
- &nbsp;
4212
- sst.deepEqual(result, { a: { 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6' } }, 'parses into object if array length is greater than limit');
4213
- sst.end();
4214
- });
4215
- &nbsp;
4216
- st.test('throws error when indexed notation exceeds arrayLimit with throwOnLimitExceeded', function (sst) {
4217
- sst['throws'](
4218
- function () {
4219
- qs.parse('a[1001]=b', { arrayLimit: 1000, throwOnLimitExceeded: true });
4220
- },
4221
- new RangeError('Array limit exceeded. Only 1000 elements allowed in an array.'),
4222
- 'throws error for a single index exceeding arrayLimit'
4223
- );
4224
- &nbsp;
4225
- sst['throws'](
4226
- function () {
4227
- qs.parse('a[0]=1&amp;a[1]=2&amp;a[2]=3&amp;a[10]=4', { arrayLimit: 6, throwOnLimitExceeded: true, allowSparse: true });
4228
- },
4229
- new RangeError('Array limit exceeded. Only 6 elements allowed in an array.'),
4230
- 'throws error when a sparse index exceeds arrayLimit'
4231
- );
4232
- &nbsp;
4233
- sst.end();
4234
- });
4235
- &nbsp;
4236
- st.test('does not throw for indexed notation within arrayLimit with throwOnLimitExceeded', function (sst) {
4237
- var result = qs.parse('a[4]=b', { arrayLimit: 5, throwOnLimitExceeded: true, allowSparse: true });
4238
- sst.ok(Array.isArray(result.a), 'result is an array');
4239
- sst.equal(result.a.length, 5, 'array has correct length');
4240
- sst.equal(result.a[4], 'b', 'value at index 4 is correct');
4241
- sst.end();
4242
- });
4243
- &nbsp;
4244
- st.test('silently converts to object for indexed notation exceeding arrayLimit without throwOnLimitExceeded', function (sst) {
4245
- var result = qs.parse('a[1001]=b', { arrayLimit: 1000 });
4246
- sst.deepEqual(result, { a: { 1001: 'b' } }, 'converts to object without throwing');
4247
- sst.end();
4248
- });
4249
- &nbsp;
4250
- st.end();
4251
- });
4252
3483
  &nbsp;
4253
3484
  t.end();
4254
3485
  });
@@ -4308,7 +3539,7 @@ test('qs strictDepth option - throw cases', function (t) {
4308
3539
  qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1, strictDepth: true });
4309
3540
  },
4310
3541
  RangeError,
4311
- 'throws RangeError'
3542
+ 'Should throw RangeError'
4312
3543
  );
4313
3544
  st.end();
4314
3545
  });
@@ -4319,7 +3550,7 @@ test('qs strictDepth option - throw cases', function (t) {
4319
3550
  qs.parse('a[0][1][2][3][4]=b', { depth: 3, strictDepth: true });
4320
3551
  },
4321
3552
  RangeError,
4322
- 'throws RangeError'
3553
+ 'Should throw RangeError'
4323
3554
  );
4324
3555
  st.end();
4325
3556
  });
@@ -4330,7 +3561,7 @@ test('qs strictDepth option - throw cases', function (t) {
4330
3561
  qs.parse('a[b][c][0][d][e]=f', { depth: 3, strictDepth: true });
4331
3562
  },
4332
3563
  RangeError,
4333
- 'throws RangeError'
3564
+ 'Should throw RangeError'
4334
3565
  );
4335
3566
  st.end();
4336
3567
  });
@@ -4341,7 +3572,7 @@ test('qs strictDepth option - throw cases', function (t) {
4341
3572
  qs.parse('a[b][c][d][e]=true&amp;a[b][c][d][f]=42', { depth: 3, strictDepth: true });
4342
3573
  },
4343
3574
  RangeError,
4344
- 'throws RangeError'
3575
+ 'Should throw RangeError'
4345
3576
  );
4346
3577
  st.end();
4347
3578
  });
@@ -4355,7 +3586,7 @@ test('qs strictDepth option - non-throw cases', function (t) {
4355
3586
  qs.parse('a[b][c][d][e]=true&amp;a[b][c][d][f]=42', { depth: 0, strictDepth: true });
4356
3587
  },
4357
3588
  RangeError,
4358
- 'does not throw RangeError'
3589
+ 'Should not throw RangeError'
4359
3590
  );
4360
3591
  st.end();
4361
3592
  });
@@ -4364,7 +3595,7 @@ test('qs strictDepth option - non-throw cases', function (t) {
4364
3595
  st.doesNotThrow(
4365
3596
  function () {
4366
3597
  var result = qs.parse('a[b]=c', { depth: 1, strictDepth: true });
4367
- st.deepEqual(result, { a: { b: 'c' } }, 'parses correctly');
3598
+ st.deepEqual(result, { a: { b: 'c' } }, 'Should parse correctly');
4368
3599
  }
4369
3600
  );
4370
3601
  st.end();
@@ -4374,7 +3605,7 @@ test('qs strictDepth option - non-throw cases', function (t) {
4374
3605
  st.doesNotThrow(
4375
3606
  function () {
4376
3607
  var result = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 });
4377
- st.deepEqual(result, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }, 'parses with depth limit');
3608
+ st.deepEqual(result, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }, 'Should parse with depth limit');
4378
3609
  }
4379
3610
  );
4380
3611
  st.end();
@@ -4384,7 +3615,7 @@ test('qs strictDepth option - non-throw cases', function (t) {
4384
3615
  st.doesNotThrow(
4385
3616
  function () {
4386
3617
  var result = qs.parse('a[b]=c', { depth: 1 });
4387
- st.deepEqual(result, { a: { b: 'c' } }, 'parses correctly');
3618
+ st.deepEqual(result, { a: { b: 'c' } }, 'Should parse correctly');
4388
3619
  }
4389
3620
  );
4390
3621
  st.end();
@@ -4394,198 +3625,19 @@ test('qs strictDepth option - non-throw cases', function (t) {
4394
3625
  st.doesNotThrow(
4395
3626
  function () {
4396
3627
  var result = qs.parse('a[b][c]=d', { depth: 2, strictDepth: true });
4397
- st.deepEqual(result, { a: { b: { c: 'd' } } }, 'parses correctly');
3628
+ st.deepEqual(result, { a: { b: { c: 'd' } } }, 'Should parse correctly');
4398
3629
  }
4399
3630
  );
4400
3631
  st.end();
4401
3632
  });
4402
3633
  });
4403
- &nbsp;
4404
- test('DOS', function (t) {
4405
- var arr = [];
4406
- for (var i = 0; i &lt; 105; i++) {
4407
- arr[arr.length] = 'x';
4408
- }
4409
- var attack = 'a[]=' + arr.join('&amp;a[]=');
4410
- var result = qs.parse(attack, { arrayLimit: 100 });
4411
- &nbsp;
4412
- t.notOk(Array.isArray(result.a), 'arrayLimit is respected: result is an object, not an array');
4413
- t.equal(Object.keys(result.a).length, 105, 'all values are preserved');
4414
- &nbsp;
4415
- t.end();
4416
- });
4417
- &nbsp;
4418
- test('arrayLimit boundary conditions', function (t) {
4419
- // arrayLimit is the max number of elements allowed in an array
4420
- t.test('exactly at the limit stays as array', function (st) {
4421
- // 3 elements = limit of 3
4422
- var result = qs.parse('a[]=1&amp;a[]=2&amp;a[]=3', { arrayLimit: 3 });
4423
- st.ok(Array.isArray(result.a), 'result is an array when count equals limit');
4424
- st.deepEqual(result.a, ['1', '2', '3'], 'all values present');
4425
- st.end();
4426
- });
4427
- &nbsp;
4428
- t.test('one over the limit converts to object', function (st) {
4429
- // 4 elements exceeds limit of 3
4430
- var result = qs.parse('a[]=1&amp;a[]=2&amp;a[]=3&amp;a[]=4', { arrayLimit: 3 });
4431
- st.notOk(Array.isArray(result.a), 'result is not an array when over limit');
4432
- st.deepEqual(result.a, { 0: '1', 1: '2', 2: '3', 3: '4' }, 'all values preserved as object');
4433
- st.end();
4434
- });
4435
- &nbsp;
4436
- t.test('arrayLimit 1 with one value', function (st) {
4437
- // 1 element = limit of 1
4438
- var result = qs.parse('a[]=1', { arrayLimit: 1 });
4439
- st.ok(Array.isArray(result.a), 'result is an array when count equals limit');
4440
- st.deepEqual(result.a, ['1'], 'value preserved as array');
4441
- st.end();
4442
- });
4443
- &nbsp;
4444
- t.test('arrayLimit 1 with two values converts to object', function (st) {
4445
- // 2 elements exceeds limit of 1
4446
- var result = qs.parse('a[]=1&amp;a[]=2', { arrayLimit: 1 });
4447
- st.notOk(Array.isArray(result.a), 'result is not an array');
4448
- st.deepEqual(result.a, { 0: '1', 1: '2' }, 'all values preserved as object');
4449
- st.end();
4450
- });
4451
- &nbsp;
4452
- t.end();
4453
- });
4454
- &nbsp;
4455
- test('comma + arrayLimit', function (t) {
4456
- t.test('comma-separated values within arrayLimit stay as array', function (st) {
4457
- var result = qs.parse('a=1,2,3', { comma: true, arrayLimit: 5 });
4458
- st.ok(Array.isArray(result.a), 'result is an array');
4459
- st.deepEqual(result.a, ['1', '2', '3'], 'all values present');
4460
- st.end();
4461
- });
4462
- &nbsp;
4463
- t.test('comma-separated values exceeding arrayLimit convert to object', function (st) {
4464
- var result = qs.parse('a=1,2,3,4', { comma: true, arrayLimit: 2 });
4465
- st.notOk(Array.isArray(result.a), 'result is not an array when over limit');
4466
- st.deepEqual(result.a, { 0: '1', 1: '2', 2: '3', 3: '4' }, 'all values preserved as object');
4467
- st.end();
4468
- });
4469
- &nbsp;
4470
- t.test('comma-separated values exceeding arrayLimit with throwOnLimitExceeded throws', function (st) {
4471
- st['throws'](
4472
- function () {
4473
- qs.parse('a=1,2,3,4', { comma: true, arrayLimit: 2, throwOnLimitExceeded: true });
4474
- },
4475
- new RangeError('Array limit exceeded. Only 2 elements allowed in an array.'),
4476
- 'throws error when comma-split exceeds array limit'
4477
- );
4478
- st.end();
4479
- });
4480
- &nbsp;
4481
- t.test('comma-separated values at exactly arrayLimit stay as array', function (st) {
4482
- var result = qs.parse('a=1,2,3', { comma: true, arrayLimit: 3 });
4483
- st.ok(Array.isArray(result.a), 'result is an array when exactly at limit');
4484
- st.deepEqual(result.a, ['1', '2', '3'], 'all values present');
4485
- st.end();
4486
- });
4487
- &nbsp;
4488
- t.end();
4489
- });
4490
- &nbsp;
4491
- test('mixed array and object notation', function (t) {
4492
- t.test('array brackets with object key - under limit', function (st) {
4493
- st.deepEqual(
4494
- qs.parse('a[]=b&amp;a[c]=d'),
4495
- { a: { 0: 'b', c: 'd' } },
4496
- 'mixing [] and [key] converts to object'
4497
- );
4498
- st.end();
4499
- });
4500
- &nbsp;
4501
- t.test('array index with object key - under limit', function (st) {
4502
- st.deepEqual(
4503
- qs.parse('a[0]=b&amp;a[c]=d'),
4504
- { a: { 0: 'b', c: 'd' } },
4505
- 'mixing [0] and [key] produces object'
4506
- );
4507
- st.end();
4508
- });
4509
- &nbsp;
4510
- t.test('plain value with array brackets - under limit', function (st) {
4511
- st.deepEqual(
4512
- qs.parse('a=b&amp;a[]=c', { arrayLimit: 20 }),
4513
- { a: ['b', 'c'] },
4514
- 'plain value combined with [] stays as array under limit'
4515
- );
4516
- st.end();
4517
- });
4518
- &nbsp;
4519
- t.test('array brackets with plain value - under limit', function (st) {
4520
- st.deepEqual(
4521
- qs.parse('a[]=b&amp;a=c', { arrayLimit: 20 }),
4522
- { a: ['b', 'c'] },
4523
- '[] combined with plain value stays as array under limit'
4524
- );
4525
- st.end();
4526
- });
4527
- &nbsp;
4528
- t.test('plain value with array index - under limit', function (st) {
4529
- st.deepEqual(
4530
- qs.parse('a=b&amp;a[0]=c', { arrayLimit: 20 }),
4531
- { a: ['b', 'c'] },
4532
- 'plain value combined with [0] stays as array under limit'
4533
- );
4534
- st.end();
4535
- });
4536
- &nbsp;
4537
- t.test('multiple plain values with duplicates combine', function (st) {
4538
- st.deepEqual(
4539
- qs.parse('a=b&amp;a=c&amp;a=d', { arrayLimit: 20 }),
4540
- { a: ['b', 'c', 'd'] },
4541
- 'duplicate plain keys combine into array'
4542
- );
4543
- st.end();
4544
- });
4545
- &nbsp;
4546
- t.test('multiple plain values exceeding limit', function (st) {
4547
- // 3 elements (indices 0-2), max index 2 &gt; limit 1
4548
- st.deepEqual(
4549
- qs.parse('a=b&amp;a=c&amp;a=d', { arrayLimit: 1 }),
4550
- { a: { 0: 'b', 1: 'c', 2: 'd' } },
4551
- 'duplicate plain keys convert to object when exceeding limit'
4552
- );
4553
- st.end();
4554
- });
4555
- &nbsp;
4556
- t.test('mixed notation produces consistent results when arrayLimit is exceeded', function (st) {
4557
- var expected = { a: { 0: 'b', 1: 'c', 2: 'd' } };
4558
- &nbsp;
4559
- st.deepEqual(
4560
- qs.parse('a[]=b&amp;a[1]=c&amp;a=d', { arrayLimit: -1 }),
4561
- expected,
4562
- 'arrayLimit -1'
4563
- );
4564
- &nbsp;
4565
- st.deepEqual(
4566
- qs.parse('a[]=b&amp;a[1]=c&amp;a=d', { arrayLimit: 0 }),
4567
- expected,
4568
- 'arrayLimit 0'
4569
- );
4570
- &nbsp;
4571
- st.deepEqual(
4572
- qs.parse('a[]=b&amp;a[1]=c&amp;a=d', { arrayLimit: 1 }),
4573
- expected,
4574
- 'arrayLimit 1'
4575
- );
4576
- &nbsp;
4577
- st.end();
4578
- });
4579
- &nbsp;
4580
- t.end();
4581
- });
4582
3634
  &nbsp;</pre></td></tr>
4583
3635
  </table></pre>
4584
3636
  <div class='push'></div><!-- for sticky footer -->
4585
3637
  </div><!-- /wrapper -->
4586
3638
  <div class='footer quiet pad2 space-top1 center small'>
4587
3639
  Code coverage
4588
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Wed Feb 11 2026 23:54:42 GMT-0800 (Pacific Standard Time)
3640
+ generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Thu Feb 12 2026 15:44:30 GMT-0800 (Pacific Standard Time)
4589
3641
  </div>
4590
3642
  </div>
4591
3643
  <script src="../prettify.js"></script>