summaryrefslogtreecommitdiff
path: root/node_modules/express/node_modules/qs/test
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/express/node_modules/qs/test')
-rw-r--r--node_modules/express/node_modules/qs/test/mocha.opts2
-rw-r--r--node_modules/express/node_modules/qs/test/parse.js167
-rw-r--r--node_modules/express/node_modules/qs/test/stringify.js103
3 files changed, 272 insertions, 0 deletions
diff --git a/node_modules/express/node_modules/qs/test/mocha.opts b/node_modules/express/node_modules/qs/test/mocha.opts
new file mode 100644
index 0000000..521cbb2
--- /dev/null
+++ b/node_modules/express/node_modules/qs/test/mocha.opts
@@ -0,0 +1,2 @@
+--require should
+--ui exports
diff --git a/node_modules/express/node_modules/qs/test/parse.js b/node_modules/express/node_modules/qs/test/parse.js
new file mode 100644
index 0000000..f219e27
--- /dev/null
+++ b/node_modules/express/node_modules/qs/test/parse.js
@@ -0,0 +1,167 @@
+
+/**
+ * Module dependencies.
+ */
+
+var qs = require('../');
+
+module.exports = {
+ 'test basics': function(){
+ qs.parse('0=foo').should.eql({ '0': 'foo' });
+
+ qs.parse('foo=c++')
+ .should.eql({ foo: 'c ' });
+
+ qs.parse('a[>=]=23')
+ .should.eql({ a: { '>=': '23' }});
+
+ qs.parse('a[<=>]==23')
+ .should.eql({ a: { '<=>': '=23' }});
+
+ qs.parse('a[==]=23')
+ .should.eql({ a: { '==': '23' }});
+
+ qs.parse('foo')
+ .should.eql({ foo: '' });
+
+ qs.parse('foo=bar')
+ .should.eql({ foo: 'bar' });
+
+ qs.parse('foo%3Dbar=baz')
+ .should.eql({ foo: 'bar=baz' });
+
+ qs.parse(' foo = bar = baz ')
+ .should.eql({ ' foo ': ' bar = baz ' });
+
+ qs.parse('foo=bar=baz')
+ .should.eql({ foo: 'bar=baz' });
+
+ qs.parse('foo=bar&bar=baz')
+ .should.eql({ foo: 'bar', bar: 'baz' });
+
+ qs.parse('foo=bar&baz')
+ .should.eql({ foo: 'bar', baz: '' });
+
+ qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')
+ .should.eql({
+ cht: 'p3'
+ , chd: 't:60,40'
+ , chs: '250x100'
+ , chl: 'Hello|World'
+ });
+ },
+
+ 'test nesting': function(){
+ qs.parse('ops[>=]=25')
+ .should.eql({ ops: { '>=': '25' }});
+
+ qs.parse('user[name]=tj')
+ .should.eql({ user: { name: 'tj' }});
+
+ qs.parse('user[name][first]=tj&user[name][last]=holowaychuk')
+ .should.eql({ user: { name: { first: 'tj', last: 'holowaychuk' }}});
+ },
+
+ 'test escaping': function(){
+ qs.parse('foo=foo%20bar')
+ .should.eql({ foo: 'foo bar' });
+ },
+
+ 'test arrays': function(){
+ qs.parse('images[]')
+ .should.eql({ images: [] });
+
+ qs.parse('user[]=tj')
+ .should.eql({ user: ['tj'] });
+
+ qs.parse('user[]=tj&user[]=tobi&user[]=jane')
+ .should.eql({ user: ['tj', 'tobi', 'jane'] });
+
+ qs.parse('user[names][]=tj&user[names][]=tyler')
+ .should.eql({ user: { names: ['tj', 'tyler'] }});
+
+ qs.parse('user[names][]=tj&user[names][]=tyler&user[email]=tj@vision-media.ca')
+ .should.eql({ user: { names: ['tj', 'tyler'], email: 'tj@vision-media.ca' }});
+
+ qs.parse('items=a&items=b')
+ .should.eql({ items: ['a', 'b'] });
+
+ qs.parse('user[names]=tj&user[names]=holowaychuk&user[names]=TJ')
+ .should.eql({ user: { names: ['tj', 'holowaychuk', 'TJ'] }});
+
+ qs.parse('user[name][first]=tj&user[name][first]=TJ')
+ .should.eql({ user: { name: { first: ['tj', 'TJ'] }}});
+
+ var o = qs.parse('existing[fcbaebfecc][name][last]=tj')
+ o.should.eql({ existing: { 'fcbaebfecc': { name: { last: 'tj' }}}})
+ Array.isArray(o.existing).should.be.false;
+ },
+
+ 'test right-hand brackets': function(){
+ qs.parse('pets=["tobi"]')
+ .should.eql({ pets: '["tobi"]' });
+
+ qs.parse('operators=[">=", "<="]')
+ .should.eql({ operators: '[">=", "<="]' });
+
+ qs.parse('op[>=]=[1,2,3]')
+ .should.eql({ op: { '>=': '[1,2,3]' }});
+
+ qs.parse('op[>=]=[1,2,3]&op[=]=[[[[1]]]]')
+ .should.eql({ op: { '>=': '[1,2,3]', '=': '[[[[1]]]]' }});
+ },
+
+ 'test duplicates': function(){
+ qs.parse('items=bar&items=baz&items=raz')
+ .should.eql({ items: ['bar', 'baz', 'raz'] });
+ },
+
+ 'test empty': function(){
+ qs.parse('').should.eql({});
+ qs.parse(undefined).should.eql({});
+ qs.parse(null).should.eql({});
+ },
+
+ 'test arrays with indexes': function(){
+ qs.parse('foo[0]=bar&foo[1]=baz').should.eql({ foo: ['bar', 'baz'] });
+ qs.parse('foo[1]=bar&foo[0]=baz').should.eql({ foo: ['baz', 'bar'] });
+ qs.parse('foo[base64]=RAWR').should.eql({ foo: { base64: 'RAWR' }});
+ qs.parse('foo[64base]=RAWR').should.eql({ foo: { '64base': 'RAWR' }});
+ },
+
+ 'test arrays becoming objects': function(){
+ qs.parse('foo[0]=bar&foo[bad]=baz').should.eql({ foo: { 0: "bar", bad: "baz" }});
+ qs.parse('foo[bad]=baz&foo[0]=bar').should.eql({ foo: { 0: "bar", bad: "baz" }});
+ },
+
+ 'test bleed-through of Array native properties/methods': function(){
+ Array.prototype.protoProperty = true;
+ Array.prototype.protoFunction = function () {};
+ qs.parse('foo=bar').should.eql({ foo: 'bar' });
+ },
+
+ 'test malformed uri': function(){
+ qs.parse('{%:%}').should.eql({ '{%:%}': '' });
+ qs.parse('foo=%:%}').should.eql({ 'foo': '%:%}' });
+ },
+
+ 'test semi-parsed': function(){
+ qs.parse({ 'user[name]': 'tobi' })
+ .should.eql({ user: { name: 'tobi' }});
+
+ qs.parse({ 'user[name]': 'tobi', 'user[email][main]': 'tobi@lb.com' })
+ .should.eql({ user: { name: 'tobi', email: { main: 'tobi@lb.com' } }});
+ }
+
+ // 'test complex': function(){
+ // qs.parse('users[][name][first]=tj&users[foo]=bar')
+ // .should.eql({
+ // users: [ { name: 'tj' }, { name: 'tobi' }, { foo: 'bar' }]
+ // });
+ //
+ // qs.parse('users[][name][first]=tj&users[][name][first]=tobi')
+ // .should.eql({
+ // users: [ { name: 'tj' }, { name: 'tobi' }]
+ // });
+ // }
+};
diff --git a/node_modules/express/node_modules/qs/test/stringify.js b/node_modules/express/node_modules/qs/test/stringify.js
new file mode 100644
index 0000000..c2195cb
--- /dev/null
+++ b/node_modules/express/node_modules/qs/test/stringify.js
@@ -0,0 +1,103 @@
+
+/**
+ * Module dependencies.
+ */
+
+var qs = require('../')
+ , should = require('should')
+ , str_identities = {
+ 'basics': [
+ { str: 'foo=bar', obj: {'foo' : 'bar'}},
+ { str: 'foo=%22bar%22', obj: {'foo' : '\"bar\"'}},
+ { str: 'foo=', obj: {'foo': ''}},
+ { str: 'foo=1&bar=2', obj: {'foo' : '1', 'bar' : '2'}},
+ { str: 'my%20weird%20field=q1!2%22\'w%245%267%2Fz8)%3F', obj: {'my weird field': "q1!2\"'w$5&7/z8)?"}},
+ { str: 'foo%3Dbaz=bar', obj: {'foo=baz': 'bar'}},
+ { str: 'foo=bar&bar=baz', obj: {foo: 'bar', bar: 'baz'}}
+ ],
+ 'escaping': [
+ { str: 'foo=foo%20bar', obj: {foo: 'foo bar'}},
+ { str: 'cht=p3&chd=t%3A60%2C40&chs=250x100&chl=Hello%7CWorld', obj: {
+ cht: 'p3'
+ , chd: 't:60,40'
+ , chs: '250x100'
+ , chl: 'Hello|World'
+ }}
+ ],
+ 'nested': [
+ { str: 'foo[]=bar&foo[]=quux', obj: {'foo' : ['bar', 'quux']}},
+ { str: 'foo[]=bar', obj: {foo: ['bar']}},
+ { str: 'foo[]=1&foo[]=2', obj: {'foo' : ['1', '2']}},
+ { str: 'foo=bar&baz[]=1&baz[]=2&baz[]=3', obj: {'foo' : 'bar', 'baz' : ['1', '2', '3']}},
+ { str: 'foo[]=bar&baz[]=1&baz[]=2&baz[]=3', obj: {'foo' : ['bar'], 'baz' : ['1', '2', '3']}},
+ { str: 'x[y][z]=1', obj: {'x' : {'y' : {'z' : '1'}}}},
+ { str: 'x[y][z][]=1', obj: {'x' : {'y' : {'z' : ['1']}}}},
+ { str: 'x[y][z]=2', obj: {'x' : {'y' : {'z' : '2'}}}},
+ { str: 'x[y][z][]=1&x[y][z][]=2', obj: {'x' : {'y' : {'z' : ['1', '2']}}}},
+ { str: 'x[y][][z]=1', obj: {'x' : {'y' : [{'z' : '1'}]}}},
+ { str: 'x[y][][z][]=1', obj: {'x' : {'y' : [{'z' : ['1']}]}}},
+ { str: 'x[y][][z]=1&x[y][][w]=2', obj: {'x' : {'y' : [{'z' : '1', 'w' : '2'}]}}},
+ { str: 'x[y][][v][w]=1', obj: {'x' : {'y' : [{'v' : {'w' : '1'}}]}}},
+ { str: 'x[y][][z]=1&x[y][][v][w]=2', obj: {'x' : {'y' : [{'z' : '1', 'v' : {'w' : '2'}}]}}},
+ { str: 'x[y][][z]=1&x[y][][z]=2', obj: {'x' : {'y' : [{'z' : '1'}, {'z' : '2'}]}}},
+ { str: 'x[y][][z]=1&x[y][][w]=a&x[y][][z]=2&x[y][][w]=3', obj: {'x' : {'y' : [{'z' : '1', 'w' : 'a'}, {'z' : '2', 'w' : '3'}]}}},
+ { str: 'user[name][first]=tj&user[name][last]=holowaychuk', obj: { user: { name: { first: 'tj', last: 'holowaychuk' }}}}
+ ],
+ 'errors': [
+ { obj: 'foo=bar', message: 'stringify expects an object' },
+ { obj: ['foo', 'bar'], message: 'stringify expects an object' }
+ ],
+ 'numbers': [
+ { str: 'limit[]=1&limit[]=2&limit[]=3', obj: { limit: [1, 2, '3'] }},
+ { str: 'limit=1', obj: { limit: 1 }}
+ ]
+ };
+
+
+// Assert error
+function err(fn, msg){
+ var err;
+ try {
+ fn();
+ } catch (e) {
+ should.equal(e.message, msg);
+ return;
+ }
+ throw new Error('no exception thrown, expected "' + msg + '"');
+}
+
+function test(type) {
+ var str, obj;
+ for (var i = 0; i < str_identities[type].length; i++) {
+ str = str_identities[type][i].str;
+ obj = str_identities[type][i].obj;
+ qs.stringify(obj).should.eql(str);
+ }
+}
+
+module.exports = {
+ 'test basics': function() {
+ test('basics');
+ },
+
+ 'test escaping': function() {
+ test('escaping');
+ },
+
+ 'test nested': function() {
+ test('nested');
+ },
+
+ 'test numbers': function(){
+ test('numbers');
+ },
+
+ 'test errors': function() {
+ var obj, message;
+ for (var i = 0; i < str_identities['errors'].length; i++) {
+ message = str_identities['errors'][i].message;
+ obj = str_identities['errors'][i].obj;
+ err(function(){ qs.stringify(obj) }, message);
+ }
+ }
+}; \ No newline at end of file