Skip to content

Commit e8ecb0f

Browse files
author
isaacs
committed
Beef up the tests a lot.
1 parent 6afb20c commit e8ecb0f

File tree

1 file changed

+126
-68
lines changed

1 file changed

+126
-68
lines changed

test.js

Lines changed: 126 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,126 @@
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

Comments
 (0)