@@ -2,43 +2,43 @@ import { describe, expect, test } from 'vitest'
22import { defaultParseSearch , defaultStringifySearch } from '../src'
33
44describe ( 'Search Params serialization and deserialization' , ( ) => {
5- /*
6- * JSON-compatible objects can be serialized into a string,
7- * and then deserialized back into the original object.
8- */
95 test . each ( [
10- [ { } , '' ] ,
11- [ { foo : '' } , '?foo=' ] ,
12- [ { foo : 'bar' } , '?foo=bar' ] ,
13- [ { foo : 'bar baz' } , '?foo=bar+baz' ] ,
14- [ { foo : 123 } , '?foo=123' ] ,
15- [ { foo : '123' } , '?foo=%22123%22' ] ,
16- [ { foo : true } , '?foo=true' ] ,
17- [ { foo : 'true' } , '?foo=%22true%22' ] ,
18- [ { foo : null } , '?foo=null' ] ,
19- [ { foo : 'null' } , '?foo=%22null%22' ] ,
20- [ { foo : 'undefined' } , '?foo=undefined' ] ,
21- [ { foo : { } } , '?foo=%7B%7D' ] ,
22- [ { foo : '{}' } , '?foo=%22%7B%7D%22' ] ,
23- [ { foo : [ ] } , '?foo=%5B%5D' ] ,
24- [ { foo : '[]' } , '?foo=%22%5B%5D%22' ] ,
25- [ { foo : [ 1 , 2 , 3 ] } , '?foo=%5B1%2C2%2C3%5D' ] ,
26- [ { foo : '1,2,3' } , '?foo=1%2C2%2C3' ] ,
27- [ { foo : { bar : 'baz' } } , '?foo=%7B%22bar%22%3A%22baz%22%7D' ] ,
28- [ { 0 : 1 } , '?0=1' ] ,
29- [ { 'foo=bar' : 1 } , '?foo%3Dbar=1' ] ,
30- [ { '{}' : 1 } , '?%7B%7D=1' ] ,
31- [ { '' : 1 } , '?=1' ] ,
32- [ { '=' : '=' } , '?%3D=%3D' ] ,
33- [ { '=' : '' , '' : '=' } , '?%3D=&=%3D' ] ,
34- [ { 'foo=2&bar' : 3 } , '?foo%3D2%26bar=3' ] ,
35- [ { 'foo?' : 1 } , '?foo%3F=1' ] ,
36- [ { foo : 'bar=' } , '?foo=bar%3D' ] ,
37- [ { foo : '2&bar=3' } , '?foo=2%26bar%3D3' ] ,
38- ] ) ( 'isomorphism %j' , ( input , expected ) => {
39- const str = defaultStringifySearch ( input )
40- expect ( str ) . toEqual ( expected )
41- expect ( defaultParseSearch ( str ) ) . toEqual ( input )
6+ [ '' , { } ] ,
7+ [ '?foo=' , { foo : '' } ] ,
8+ [ '?foo=bar' , { foo : 'bar' } ] ,
9+ [ '?foo=%22bar%22' , { foo : '"bar"' } ] ,
10+ [ '?foo=bar+baz' , { foo : 'bar baz' } ] ,
11+ [ '?foo=%22bar+baz%22' , { foo : '"bar baz"' } ] ,
12+ [ '?foo=123' , { foo : '123' } ] ,
13+ [ '?foo=%22123%22' , { foo : '"123"' } ] ,
14+ [ '?foo=true' , { foo : 'true' } ] ,
15+ [ '?foo=%22true%22' , { foo : '"true"' } ] ,
16+ [ '?foo=null' , { foo : 'null' } ] ,
17+ [ '?foo=%22null%22' , { foo : '"null"' } ] ,
18+ [ '?foo=undefined' , { foo : 'undefined' } ] ,
19+ [ '?foo=%22undefined%22' , { foo : '"undefined"' } ] ,
20+ [ '?foo=%7B%7D' , { foo : { } } ] ,
21+ [ '?foo=%22%7B%7D%22' , { foo : '"{}"' } ] ,
22+ [ '?foo=%5B%5D' , { foo : [ ] } ] ,
23+ [ '?foo=%22%5B%5D%22' , { foo : '"[]"' } ] ,
24+ [ '?foo=%5B1%2C2%2C3%5D' , { foo : [ 1 , 2 , 3 ] } ] ,
25+ [ '?foo=1%2C2%2C3' , { foo : '1,2,3' } ] ,
26+ [ '?foo=%7B%22bar%22%3A%22baz%22%7D' , { foo : { bar : 'baz' } } ] ,
27+ [ '?0=1' , { 0 : '1' } ] ,
28+ [ '?foo%3Dbar=1' , { 'foo=bar' : '1' } ] ,
29+ [ '?%7B%7D=1' , { '{}' : '1' } ] ,
30+ [ '?=1' , { '' : '1' } ] ,
31+ [ '?%3D=%3D' , { '=' : '=' } ] ,
32+ [ '?%3D=&=%3D' , { '=' : '' , '' : '=' } ] ,
33+ [ '?foo%3D2%26bar=3' , { 'foo=2&bar' : '3' } ] ,
34+ [ '?foo%3F=1' , { 'foo?' : '1' } ] ,
35+ [ '?foo=bar%3D' , { foo : 'bar=' } ] ,
36+ [ '?foo=2%26bar%3D3' , { foo : '2&bar=3' } ] ,
37+ ] ) ( 'isomorphism %j' , ( input , expectedObj ) => {
38+ const parsed = defaultParseSearch ( input )
39+ expect ( parsed ) . toEqual ( expectedObj )
40+ const str = defaultStringifySearch ( parsed )
41+ expect ( str ) . toEqual ( input )
4242 } )
4343
4444 test ( 'undefined values are removed during stringification' , ( ) => {
@@ -67,8 +67,8 @@ describe('Search Params serialization and deserialization', () => {
6767 [ '?foo=[]' , { foo : [ ] } ] ,
6868 [ '?foo=1,2,3' , { foo : '1,2,3' } ] ,
6969 [ '?foo={"bar":"baz"}' , { foo : { bar : 'baz' } } ] ,
70- [ '?foo=1&foo=2' , { foo : [ 1 , 2 ] } ] ,
71- [ '?foo=""' , { foo : '' } ] ,
70+ [ '?foo=1&foo=2' , { foo : [ '1' , '2' ] } ] ,
71+ [ '?foo=""' , { foo : '"" ' } ] ,
7272 [ '?foo=""""' , { foo : '""""' } ] ,
7373 [ '?foo=()' , { foo : '()' } ] ,
7474 [ '?foo=[{}]' , { foo : [ { } ] } ] ,
0 commit comments