1
- /*
2
- * test.js
3
- * - a test script for the querystring node.js module
4
- *
5
- * Chad Etzel
6
- *
7
- */
8
-
9
-
10
- var sys = require ( "sys" ) ,
11
- qs = require ( "./querystring" ) ;
12
-
13
- var foo ;
14
-
15
- /* test 1 */
16
- foo = qs . parse ( "foo[bar][][bla]=baz" ) ;
17
-
18
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
19
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
20
-
21
- sys . puts ( '------------------' ) ;
22
-
23
- /* test 2 */
24
- foo = qs . parse ( "foo=bar&baz=bing" ) ;
25
-
26
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
27
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
28
-
29
- sys . puts ( '------------------' ) ;
30
-
31
- /* test 2 */
32
- foo = qs . parse ( "foo=bar&foo=" ) ;
33
-
34
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
35
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
36
-
37
- sys . puts ( '------------------' ) ;
38
-
39
- /* test 3 */
40
- foo = qs . parse ( "foo[1]=1&foo[2]=2&foo[3]=4" ) ;
41
-
42
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
43
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
44
-
45
- sys . puts ( '------------------' ) ;
46
-
47
- /* test 4 */
48
- foo = qs . parse ( "foo[]=1&foo[]=2" ) ;
49
-
50
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
51
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
52
-
53
- sys . puts ( '------------------' ) ;
54
-
55
- /* test 5 */
56
- foo = qs . parse ( "foo[1]=blah&foo[2]=2" ) ;
57
-
58
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
59
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
60
-
61
- sys . puts ( '------------------' ) ;
62
-
63
- /* test 6 */
64
- foo = qs . parse ( "foo[]=1&foo[]=2&foo[]=4" ) ;
65
-
66
- sys . puts ( "obj: " + JSON . stringify ( foo ) ) ;
67
- sys . puts ( "qs: " + qs . stringify ( foo ) ) ;
68
-
1
+ // test using assert
2
+
3
+ var qs = require ( "./querystring" ) ,
4
+ assert = require ( "assert" ) ;
5
+
6
+ // folding block. js is ok with this.
7
+ {
8
+ // [ wonkyQS, canonicalQS, obj ]
9
+ var qsTestCases = [
10
+ [ "foo=bar" , "foo=bar" , { "foo" : "bar" } ] ,
11
+ [ "foo=bar&foo=quux" , "foo%5B%5D=bar&foo%5B%5D=quux" , { "foo" : [ "bar" , "quux" ] } ] ,
12
+ [ "foo=1&bar=2" , "foo=1&bar=2" , { "foo" : 1 , "bar" : 2 } ] ,
13
+ [ "my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F" , "my%20weird%20field=q1!2%22'w%245%267%2Fz8)%3F" , { "my weird field" : "q1!2\"'w$5&7/z8)?" } ] ,
14
+ [ "foo%3Dbaz=bar" , "foo%3Dbaz=bar" , { "foo=baz" : "bar" } ] ,
15
+ [ "foo=baz=bar" , "foo=baz%3Dbar" , { "foo" : "baz=bar" } ] ,
16
+ [ "str=foo&arr[]=1&arr[]=2&arr[]=3&obj[a]=bar&obj[b][]=4&obj[b][]=5&obj[b][]=6&obj[b][]=&obj[c][]=4&obj[c][]=5&obj[c][][somestr]=baz&obj[objobj][objobjstr]=blerg&somenull=&undef=" , "str=foo&arr%5B%5D=1&arr%5B%5D=2&arr%5B%5D=3&obj%5Ba%5D=bar&obj%5Bb%5D%5B%5D=4&obj%5Bb%5D%5B%5D=5&obj%5Bb%5D%5B%5D=6&obj%5Bb%5D%5B%5D=&obj%5Bc%5D%5B%5D=4&obj%5Bc%5D%5B%5D=5&obj%5Bc%5D%5B%5D%5Bsomestr%5D=baz&obj%5Bobjobj%5D%5Bobjobjstr%5D=blerg&somenull=&undef=" , {
17
+ "str" :"foo" ,
18
+ "arr" :[ 1 , 2 , 3 ] ,
19
+ "obj" :{
20
+ "a" :"bar" ,
21
+ "b" :[ 4 , 5 , 6 , "" ] ,
22
+ "c" :[ 4 , 5 , { "somestr" :"baz" } ] ,
23
+ "objobj" :{ "objobjstr" :"blerg" }
24
+ } ,
25
+ "somenull" :"" ,
26
+ "undef" :""
27
+ } ] ,
28
+ [ "foo[bar][bla]=baz&foo[bar][bla]=blo" , "foo%5Bbar%5D%5Bbla%5D%5B%5D=baz&foo%5Bbar%5D%5Bbla%5D%5B%5D=blo" , { "foo" :{ "bar" :{ "bla" :[ "baz" , "blo" ] } } } ] ,
29
+ [ "foo[bar][][bla]=baz&foo[bar][][bla]=blo" , "foo%5Bbar%5D%5B%5D%5Bbla%5D=baz&foo%5Bbar%5D%5B%5D%5Bbla%5D=blo" , { "foo" :{ "bar" :[ { "bla" :"baz" } , { "bla" :"blo" } ] } } ] ,
30
+ [ "foo[bar][bla][]=baz&foo[bar][bla][]=blo" , "foo%5Bbar%5D%5Bbla%5D%5B%5D=baz&foo%5Bbar%5D%5Bbla%5D%5B%5D=blo" , { "foo" :{ "bar" :{ "bla" :[ "baz" , "blo" ] } } } ] ,
31
+ [ " foo = bar " , "foo=bar" , { "foo" :"bar" } ]
32
+ ] ;
33
+
34
+ // [ wonkyQS, canonicalQS, obj ]
35
+ var qsColonTestCases = [
36
+ [ "foo:bar" , "foo:bar" , { "foo" :"bar" } ] ,
37
+ [ "foo:bar;foo:quux" , "foo%5B%5D:bar;foo%5B%5D:quux" , { "foo" : [ "bar" , "quux" ] } ] ,
38
+ [ "foo:1&bar:2;baz:quux" , "foo:1%26bar%3A2;baz:quux" , { "foo" :"1&bar:2" , "baz" :"quux" } ] ,
39
+ [ "foo%3Abaz:bar" , "foo%3Abaz:bar" , { "foo:baz" :"bar" } ] ,
40
+ [ "foo:baz:bar" , "foo:baz%3Abar" , { "foo" :"baz:bar" } ]
41
+ ] ;
42
+
43
+ // [ wonkyObj, qs, canonicalObj ]
44
+ var extendedFunction = function ( ) { } ;
45
+ extendedFunction . prototype = { a :"b" } ;
46
+ var qsWeirdObjects = [
47
+ [ { regexp :/ ./ g} , "regexp=" , { "regexp" :"" } ] ,
48
+ [ { regexp : new RegExp ( "." , "g" ) } , "regexp=" , { "regexp" :"" } ] ,
49
+ [ { fn :function ( ) { } } , "fn=" , { "fn" :"" } ] ,
50
+ [ { fn :new Function ( "" ) } , "fn=" , { "fn" :"" } ] ,
51
+ [ { math :Math } , "math=" , { "math" :"" } ] ,
52
+ [ { e :extendedFunction } , "e=" , { "e" :"" } ] ,
53
+ [ { d :new Date ( ) } , "d=" , { "d" :"" } ] ,
54
+ [ { d :Date } , "d=" , { "d" :"" } ] ,
55
+ [ { f :new Boolean ( false ) , t :new Boolean ( true ) } , "f=0&t=1" , { "f" :0 , "t" :1 } ] ,
56
+ [ { f :false , t :true } , "f=0&t=1" , { "f" :0 , "t" :1 } ] ,
57
+ ] ;
58
+ }
59
+
60
+ // test that the canonical qs is parsed properly.
61
+ qsTestCases . forEach ( function ( testCase ) {
62
+ assert . deepEqual ( testCase [ 2 ] , qs . parse ( testCase [ 0 ] ) ) ;
63
+ } ) ;
64
+
65
+ // test that the colon test cases can do the same
66
+ qsColonTestCases . forEach ( function ( testCase ) {
67
+ assert . deepEqual ( testCase [ 2 ] , qs . parse ( testCase [ 0 ] , ";" , ":" ) ) ;
68
+ } ) ;
69
+
70
+ // test the weird objects, that they get parsed properly
71
+ qsWeirdObjects . forEach ( function ( testCase ) {
72
+ assert . deepEqual ( testCase [ 2 ] , qs . parse ( testCase [ 1 ] ) ) ;
73
+ } ) ;
74
+
75
+ // test the nested qs-in-qs case
76
+ var f = qs . parse ( "a=b&q=x%3Dy%26y%3Dz" ) ;
77
+ f . q = qs . parse ( f . q ) ;
78
+ assert . deepEqual ( f , { a : "b" , q : { x : "y" , y : "z" } } ) ;
79
+
80
+ // nested in colon
81
+ var f = qs . parse ( "a:b;q:x%3Ay%3By%3Az" , ";" , ":" ) ;
82
+ f . q = qs . parse ( f . q , ";" , ":" ) ;
83
+ assert . deepEqual ( f , { a : "b" , q : { x : "y" , y : "z" } } ) ;
84
+
85
+
86
+ // now test stringifying
87
+ assert . throws ( function ( ) {
88
+ var f = { } ;
89
+ f . f = f ;
90
+ qs . stringify ( f ) ;
91
+ } ) ;
92
+
93
+ // basic
94
+ qsTestCases . forEach ( function ( testCase ) {
95
+ assert . equal ( testCase [ 1 ] , qs . stringify ( testCase [ 2 ] ) ) ;
96
+ } ) ;
97
+
98
+ qsColonTestCases . forEach ( function ( testCase ) {
99
+ assert . equal ( testCase [ 1 ] , qs . stringify ( testCase [ 2 ] , ";" , ":" ) ) ;
100
+ } ) ;
101
+
102
+ qsWeirdObjects . forEach ( function ( testCase ) {
103
+ assert . equal ( testCase [ 1 ] , qs . stringify ( testCase [ 0 ] ) ) ;
104
+ } ) ;
105
+
106
+ // nested
107
+ var f = qs . stringify ( {
108
+ a : "b" ,
109
+ q : qs . stringify ( {
110
+ x : "y" ,
111
+ y : "z"
112
+ } )
113
+ } ) ;
114
+ assert . equal ( f , "a=b&q=x%3Dy%26y%3Dz" ) ;
115
+
116
+ // nested in colon
117
+ var f = qs . stringify ( {
118
+ a : "b" ,
119
+ q : qs . stringify ( {
120
+ x : "y" ,
121
+ y : "z"
122
+ } , ";" , ":" )
123
+ } , ";" , ":" ) ;
124
+ assert . equal ( f , "a:b;q:x%3Ay%3By%3Az" ) ;
125
+
126
+ require ( "sys" ) . puts ( "ok" ) ;
0 commit comments