summaryrefslogtreecommitdiff
diff options
authorBastien Roucariès <rouca@debian.org>2017-03-23 22:04:03 +0100
committergit-ubuntu importer <ubuntu-devel-discuss@lists.ubuntu.com>2017-03-24 16:20:19 +0000
commit8a76e1805f8fa8bb9e03b54b0813507385544ff4 (patch)
tree7764b988a088da40c82828d80e50f8bda13dbf97
Imported using git-ubuntu import.
Notes
Notes:
-rw-r--r--.travis.yml4
-rw-r--r--History.md20
-rw-r--r--License.md19
-rw-r--r--Readme.md15
-rw-r--r--debian/.git-dpm8
-rw-r--r--debian/changelog6
-rw-r--r--debian/compat1
-rw-r--r--debian/control33
-rw-r--r--debian/copyright38
-rw-r--r--debian/docs1
-rw-r--r--debian/install4
-rwxr-xr-xdebian/rules17
-rw-r--r--debian/source/format1
-rw-r--r--debian/tests/control2
-rw-r--r--debian/tests/require3
-rw-r--r--debian/watch5
-rw-r--r--decode.js80
-rw-r--r--encode.js64
-rw-r--r--index.js4
-rw-r--r--package.json65
-rw-r--r--test/common-index.js3
-rw-r--r--test/index.js210
-rw-r--r--test/tap-index.js3
23 files changed, 606 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..895dbd3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
diff --git a/History.md b/History.md
new file mode 100644
index 0000000..4fddbaf
--- /dev/null
+++ b/History.md
@@ -0,0 +1,20 @@
+# 0.2.0 / 2013-02-21
+
+ - Refactor into function per-module idiomatic style.
+ - Improved test coverage.
+
+# 0.1.0 / 2011-12-13
+
+ - Minor project reorganization
+
+# 0.0.3 / 2011-04-16
+ - Support for AMD module loaders
+
+# 0.0.2 / 2011-04-16
+
+ - Ported unit tests
+ - Removed functionality that depended on Buffers
+
+# 0.0.1 / 2011-04-15
+
+ - Initial release
diff --git a/License.md b/License.md
new file mode 100644
index 0000000..fc80e85
--- /dev/null
+++ b/License.md
@@ -0,0 +1,19 @@
+
+Copyright 2012 Irakli Gozalishvili. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..a4fe252
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,15 @@
+# querystring
+
+[![Build Status](https://secure.travis-ci.org/Gozala/querystring.png)](http://travis-ci.org/Gozala/querystring)
+
+
+[![Browser support](http://ci.testling.com/Gozala/querystring.png)](http://ci.testling.com/Gozala/querystring)
+
+
+
+Node's querystring module for all engines.
+
+## Install ##
+
+ npm install querystring
+
diff --git a/debian/.git-dpm b/debian/.git-dpm
new file mode 100644
index 0000000..e6cf101
--- /dev/null
+++ b/debian/.git-dpm
@@ -0,0 +1,8 @@
+# see git-dpm(1) from git-dpm package
+c5d69ed5675a9752f2a7070160cfeb339eb98caf
+c5d69ed5675a9752f2a7070160cfeb339eb98caf
+c5d69ed5675a9752f2a7070160cfeb339eb98caf
+c5d69ed5675a9752f2a7070160cfeb339eb98caf
+node-querystring_0.2.0.orig.tar.gz
+11a966f049db78814b4a1593ceb0f06603aba430
+4844
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..f5b28eb
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
+node-querystring (0.2.0-1) unstable; urgency=low
+
+ * Initial release (Closes: #858566)
+
+ -- Bastien Roucariès <rouca@debian.org> Thu, 23 Mar 2017 22:04:03 +0100
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..f599e28
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+10
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..81d5a13
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,33 @@
+Source: node-querystring
+Section: web
+Priority: optional
+Maintainer: Debian Javascript Maintainers <pkg-javascript-devel@lists.alioth.debian.org>
+Uploaders: Bastien Roucariès <rouca@debian.org>
+Build-Depends:
+ debhelper (>= 10)
+ , dh-buildinfo
+ , nodejs
+Standards-Version: 3.9.8
+Homepage: https://github.com/Gozala/querystring
+Vcs-Git: https://anonscm.debian.org/git/collab-maint/node-querystring.git
+Vcs-Browser: https://anonscm.debian.org/cgit/collab-mait/node-querystring.git
+
+Package: node-querystring
+Architecture: all
+Depends:
+ ${misc:Depends}
+ , nodejs
+Description: Node's querystring module for all engines
+ The querystring module provides utilities for parsing and formatting
+ URL query strings.
+ .
+ On the World Wide Web, a query string is the part of a uniform
+ resource locator (URL) containing data that does not fit conveniently
+ into a hierarchical path structure. The query string commonly includes
+ fields added to a base URL by a Web browser or other client
+ application, for example as part of an HTML form.
+ .
+ node-querystring allow one to encode, decode, parse and
+ stringify query string.
+ .
+ Node.js is an event-based server-side JavaScript engine.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..59c9115
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,38 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: querystring
+Upstream-Contact: http://github.com/Gozala/querystring/issues/
+Source: https://github.com/Gozala/querystring
+
+Files: *
+Copyright: 2012-2017, Irakli Gozalishvili <rfobic@gmail.com>
+License: Expat
+
+Files: *code.js test/index.js
+Copyright: 2012-2017, Joyent, Inc. and other Node contributors.
+License: Expat
+
+Files: debian/*
+Copyright: 2017 Bastien Roucaries <rouca@debian.org>
+License: Expat
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..ad1245d
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1 @@
+Readme.md
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..c1f1b28
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,4 @@
+index.js usr/lib/nodejs/querystring/
+encode.js usr/lib/nodejs/querystring/
+decode.js usr/lib/nodejs/querystring/
+package.json usr/lib/nodejs/querystring/
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..b77c631
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,17 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@
+
+#override_dh_auto_build:
+
+#override_dh_auto_test:
+
+override_dh_installchangelogs:
+ dh_installchangelogs -k History.md
+
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 0000000..02d2682
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: require
+Depends: node-querystring
diff --git a/debian/tests/require b/debian/tests/require
new file mode 100644
index 0000000..094ea07
--- /dev/null
+++ b/debian/tests/require
@@ -0,0 +1,3 @@
+#!/bin/sh
+set -e
+nodejs -e "require('querystring');"
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..e53d9f5
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,5 @@
+version=4
+opts=\
+dversionmangle=s/\+(debian|dfsg|ds|deb)(\.\d+)?$//,\
+filenamemangle=s/.*\/v?([\d\.-]+)\.tar\.gz/node-querystring-$1.tar.gz/ \
+ https://github.com/Gozala/querystring/tags .*/archive/v?([\d\.]+).tar.gz
diff --git a/decode.js b/decode.js
new file mode 100644
index 0000000..a6518b8
--- /dev/null
+++ b/decode.js
@@ -0,0 +1,80 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+'use strict';
+
+// If obj.hasOwnProperty has been overridden, then calling
+// obj.hasOwnProperty(prop) will break.
+// See: https://github.com/joyent/node/issues/1707
+function hasOwnProperty(obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+}
+
+module.exports = function(qs, sep, eq, options) {
+ sep = sep || '&';
+ eq = eq || '=';
+ var obj = {};
+
+ if (typeof qs !== 'string' || qs.length === 0) {
+ return obj;
+ }
+
+ var regexp = /\+/g;
+ qs = qs.split(sep);
+
+ var maxKeys = 1000;
+ if (options && typeof options.maxKeys === 'number') {
+ maxKeys = options.maxKeys;
+ }
+
+ var len = qs.length;
+ // maxKeys <= 0 means that we should not limit keys count
+ if (maxKeys > 0 && len > maxKeys) {
+ len = maxKeys;
+ }
+
+ for (var i = 0; i < len; ++i) {
+ var x = qs[i].replace(regexp, '%20'),
+ idx = x.indexOf(eq),
+ kstr, vstr, k, v;
+
+ if (idx >= 0) {
+ kstr = x.substr(0, idx);
+ vstr = x.substr(idx + 1);
+ } else {
+ kstr = x;
+ vstr = '';
+ }
+
+ k = decodeURIComponent(kstr);
+ v = decodeURIComponent(vstr);
+
+ if (!hasOwnProperty(obj, k)) {
+ obj[k] = v;
+ } else if (Array.isArray(obj[k])) {
+ obj[k].push(v);
+ } else {
+ obj[k] = [obj[k], v];
+ }
+ }
+
+ return obj;
+};
diff --git a/encode.js b/encode.js
new file mode 100644
index 0000000..4f2b561
--- /dev/null
+++ b/encode.js
@@ -0,0 +1,64 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+'use strict';
+
+var stringifyPrimitive = function(v) {
+ switch (typeof v) {
+ case 'string':
+ return v;
+
+ case 'boolean':
+ return v ? 'true' : 'false';
+
+ case 'number':
+ return isFinite(v) ? v : '';
+
+ default:
+ return '';
+ }
+};
+
+module.exports = function(obj, sep, eq, name) {
+ sep = sep || '&';
+ eq = eq || '=';
+ if (obj === null) {
+ obj = undefined;
+ }
+
+ if (typeof obj === 'object') {
+ return Object.keys(obj).map(function(k) {
+ var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
+ if (Array.isArray(obj[k])) {
+ return obj[k].map(function(v) {
+ return ks + encodeURIComponent(stringifyPrimitive(v));
+ }).join(sep);
+ } else {
+ return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
+ }
+ }).join(sep);
+
+ }
+
+ if (!name) return '';
+ return encodeURIComponent(stringifyPrimitive(name)) + eq +
+ encodeURIComponent(stringifyPrimitive(obj));
+};
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..99826ea
--- /dev/null
+++ b/index.js
@@ -0,0 +1,4 @@
+'use strict';
+
+exports.decode = exports.parse = require('./decode');
+exports.encode = exports.stringify = require('./encode');
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..bdbc970
--- /dev/null
+++ b/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "querystring",
+ "id": "querystring",
+ "version": "0.2.0",
+ "description": "Node's querystring module for all engines.",
+ "keywords": [ "commonjs", "query", "querystring" ],
+ "author": "Irakli Gozalishvili <rfobic@gmail.com>",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/Gozala/querystring.git",
+ "web": "https://github.com/Gozala/querystring"
+ },
+ "bugs": {
+ "url": "http://github.com/Gozala/querystring/issues/"
+ },
+ "devDependencies": {
+ "test": "~0.x.0",
+ "phantomify": "~0.x.0",
+ "retape": "~0.x.0",
+ "tape": "~0.1.5"
+ },
+ "engines": {
+ "node": ">=0.4.x"
+ },
+ "scripts": {
+ "test": "npm run test-node && npm run test-browser && npm run test-tap",
+ "test-browser": "node ./node_modules/phantomify/bin/cmd.js ./test/common-index.js",
+ "test-node": "node ./test/common-index.js",
+ "test-tap": "node ./test/tap-index.js"
+ },
+ "testling": {
+ "files": "test/tap-index.js",
+ "browsers": {
+ "iexplore": [
+ 9,
+ 10
+ ],
+ "chrome": [
+ 16,
+ 20,
+ 25,
+ "canary"
+ ],
+ "firefox": [
+ 10,
+ 15,
+ 16,
+ 17,
+ 18,
+ "nightly"
+ ],
+ "safari": [
+ 5,
+ 6
+ ],
+ "opera": [
+ 12
+ ]
+ }
+ },
+ "licenses": [{
+ "type" : "MIT",
+ "url" : "https://github.com/Gozala/enchain/License.md"
+ }]
+}
diff --git a/test/common-index.js b/test/common-index.js
new file mode 100644
index 0000000..f356f98
--- /dev/null
+++ b/test/common-index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+require("test").run(require("./index")) \ No newline at end of file
diff --git a/test/index.js b/test/index.js
new file mode 100644
index 0000000..62eb2ac
--- /dev/null
+++ b/test/index.js
@@ -0,0 +1,210 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+"use strict";
+
+// test using assert
+var qs = require('../');
+
+// folding block, commented to pass gjslint
+// {{{
+// [ wonkyQS, canonicalQS, obj ]
+var qsTestCases = [
+ ['foo=918854443121279438895193',
+ 'foo=918854443121279438895193',
+ {'foo': '918854443121279438895193'}],
+ ['foo=bar', 'foo=bar', {'foo': 'bar'}],
+ ['foo=bar&foo=quux', 'foo=bar&foo=quux', {'foo': ['bar', 'quux']}],
+ ['foo=1&bar=2', 'foo=1&bar=2', {'foo': '1', 'bar': '2'}],
+ ['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)?' }],
+ ['foo%3Dbaz=bar', 'foo%3Dbaz=bar', {'foo=baz': 'bar'}],
+ ['foo=baz=bar', 'foo=baz%3Dbar', {'foo': 'baz=bar'}],
+ ['str=foo&arr=1&arr=2&arr=3&somenull=&undef=',
+ 'str=foo&arr=1&arr=2&arr=3&somenull=&undef=',
+ { 'str': 'foo',
+ 'arr': ['1', '2', '3'],
+ 'somenull': '',
+ 'undef': ''}],
+ [' foo = bar ', '%20foo%20=%20bar%20', {' foo ': ' bar '}],
+ // disable test that fails ['foo=%zx', 'foo=%25zx', {'foo': '%zx'}],
+ ['foo=%EF%BF%BD', 'foo=%EF%BF%BD', {'foo': '\ufffd' }],
+ // See: https://github.com/joyent/node/issues/1707
+ ['hasOwnProperty=x&toString=foo&valueOf=bar&__defineGetter__=baz',
+ 'hasOwnProperty=x&toString=foo&valueOf=bar&__defineGetter__=baz',
+ { hasOwnProperty: 'x',
+ toString: 'foo',
+ valueOf: 'bar',
+ __defineGetter__: 'baz' }],
+ // See: https://github.com/joyent/node/issues/3058
+ ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }]
+];
+
+// [ wonkyQS, canonicalQS, obj ]
+var qsColonTestCases = [
+ ['foo:bar', 'foo:bar', {'foo': 'bar'}],
+ ['foo:bar;foo:quux', 'foo:bar;foo:quux', {'foo': ['bar', 'quux']}],
+ ['foo:1&bar:2;baz:quux',
+ 'foo:1%26bar%3A2;baz:quux',
+ {'foo': '1&bar:2', 'baz': 'quux'}],
+ ['foo%3Abaz:bar', 'foo%3Abaz:bar', {'foo:baz': 'bar'}],
+ ['foo:baz:bar', 'foo:baz%3Abar', {'foo': 'baz:bar'}]
+];
+
+// [wonkyObj, qs, canonicalObj]
+var extendedFunction = function() {};
+extendedFunction.prototype = {a: 'b'};
+var qsWeirdObjects = [
+ [{regexp: /./g}, 'regexp=', {'regexp': ''}],
+ [{regexp: new RegExp('.', 'g')}, 'regexp=', {'regexp': ''}],
+ [{fn: function() {}}, 'fn=', {'fn': ''}],
+ [{fn: new Function('')}, 'fn=', {'fn': ''}],
+ [{math: Math}, 'math=', {'math': ''}],
+ [{e: extendedFunction}, 'e=', {'e': ''}],
+ [{d: new Date()}, 'd=', {'d': ''}],
+ [{d: Date}, 'd=', {'d': ''}],
+ [{f: new Boolean(false), t: new Boolean(true)}, 'f=&t=', {'f': '', 't': ''}],
+ [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}],
+ [{n: null}, 'n=', {'n': ''}],
+ [{nan: NaN}, 'nan=', {'nan': ''}],
+ [{inf: Infinity}, 'inf=', {'inf': ''}]
+];
+// }}}
+
+var qsNoMungeTestCases = [
+ ['', {}],
+ ['foo=bar&foo=baz', {'foo': ['bar', 'baz']}],
+ ['blah=burp', {'blah': 'burp'}],
+ ['gragh=1&gragh=3&goo=2', {'gragh': ['1', '3'], 'goo': '2'}],
+ ['frappucino=muffin&goat%5B%5D=scone&pond=moose',
+ {'frappucino': 'muffin', 'goat[]': 'scone', 'pond': 'moose'}],
+ ['trololol=yes&lololo=no', {'trololol': 'yes', 'lololo': 'no'}]
+];
+
+exports['test basic'] = function(assert) {
+ assert.strictEqual('918854443121279438895193',
+ qs.parse('id=918854443121279438895193').id,
+ 'prase id=918854443121279438895193');
+};
+
+exports['test that the canonical qs is parsed properly'] = function(assert) {
+ qsTestCases.forEach(function(testCase) {
+ assert.deepEqual(testCase[2], qs.parse(testCase[0]),
+ 'parse ' + testCase[0]);
+ });
+};
+
+
+exports['test that the colon test cases can do the same'] = function(assert) {
+ qsColonTestCases.forEach(function(testCase) {
+ assert.deepEqual(testCase[2], qs.parse(testCase[0], ';', ':'),
+ 'parse ' + testCase[0] + ' -> ; :');
+ });
+};
+
+exports['test the weird objects, that they get parsed properly'] = function(assert) {
+ qsWeirdObjects.forEach(function(testCase) {
+ assert.deepEqual(testCase[2], qs.parse(testCase[1]),
+ 'parse ' + testCase[1]);
+ });
+};
+
+exports['test non munge test cases'] = function(assert) {
+ qsNoMungeTestCases.forEach(function(testCase) {
+ assert.deepEqual(testCase[0], qs.stringify(testCase[1], '&', '=', false),
+ 'stringify ' + JSON.stringify(testCase[1]) + ' -> & =');
+ });
+};
+
+exports['test the nested qs-in-qs case'] = function(assert) {
+ var f = qs.parse('a=b&q=x%3Dy%26y%3Dz');
+ f.q = qs.parse(f.q);
+ assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } },
+ 'parse a=b&q=x%3Dy%26y%3Dz');
+};
+
+exports['test nested in colon'] = function(assert) {
+ var f = qs.parse('a:b;q:x%3Ay%3By%3Az', ';', ':');
+ f.q = qs.parse(f.q, ';', ':');
+ assert.deepEqual(f, { a: 'b', q: { x: 'y', y: 'z' } },
+ 'parse a:b;q:x%3Ay%3By%3Az -> ; :');
+};
+
+exports['test stringifying'] = function(assert) {
+ qsTestCases.forEach(function(testCase) {
+ assert.equal(testCase[1], qs.stringify(testCase[2]),
+ 'stringify ' + JSON.stringify(testCase[2]));
+ });
+
+ qsColonTestCases.forEach(function(testCase) {
+ assert.equal(testCase[1], qs.stringify(testCase[2], ';', ':'),
+ 'stringify ' + JSON.stringify(testCase[2]) + ' -> ; :');
+ });
+
+ qsWeirdObjects.forEach(function(testCase) {
+ assert.equal(testCase[1], qs.stringify(testCase[0]),
+ 'stringify ' + JSON.stringify(testCase[0]));
+ });
+};
+
+exports['test stringifying nested'] = function(assert) {
+ var f = qs.stringify({
+ a: 'b',
+ q: qs.stringify({
+ x: 'y',
+ y: 'z'
+ })
+ });
+ assert.equal(f, 'a=b&q=x%3Dy%26y%3Dz',
+ JSON.stringify({
+ a: 'b',
+ 'qs.stringify -> q': {
+ x: 'y',
+ y: 'z'
+ }
+ }));
+
+ var threw = false;
+ try { qs.parse(undefined); } catch(error) { threw = true; }
+ assert.ok(!threw, "does not throws on undefined");
+};
+
+exports['test nested in colon'] = function(assert) {
+ var f = qs.stringify({
+ a: 'b',
+ q: qs.stringify({
+ x: 'y',
+ y: 'z'
+ }, ';', ':')
+ }, ';', ':');
+ assert.equal(f, 'a:b;q:x%3Ay%3By%3Az',
+ 'stringify ' + JSON.stringify({
+ a: 'b',
+ 'qs.stringify -> q': {
+ x: 'y',
+ y: 'z'
+ }
+ }) + ' -> ; : ');
+
+
+ assert.deepEqual({}, qs.parse(), 'parse undefined');
+};
diff --git a/test/tap-index.js b/test/tap-index.js
new file mode 100644
index 0000000..70679b3
--- /dev/null
+++ b/test/tap-index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+require("retape")(require("./index")) \ No newline at end of file