summaryrefslogtreecommitdiff
path: root/test/parallel/test-whatwg-url-custom-searchparams-constructor.js
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-08-22 03:27:56 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2018-08-25 08:57:23 +0800
commit6dd694c1257ded6d8a9f3b48e8c9027c3986a285 (patch)
tree4c37b2936495c352676be7caaff33c9cb89c7ab8 /test/parallel/test-whatwg-url-custom-searchparams-constructor.js
parent16cffb0d4890bf4b4ff8ad0bbd7731105fabe845 (diff)
downloadandroid-node-v8-6dd694c1257ded6d8a9f3b48e8c9027c3986a285.tar.gz
android-node-v8-6dd694c1257ded6d8a9f3b48e8c9027c3986a285.tar.bz2
android-node-v8-6dd694c1257ded6d8a9f3b48e8c9027c3986a285.zip
test: move custom WHATWG URL tests into separate files
To enable automatic update of WPT, move all our custom WHATWG URL tests that are not present in the upstream into files starting with `test-whatwg-url-custom-`, so it's easier to identify test cases that can be upstreamed and test cases that should be rolled into our repo (possibly with automation). PR-URL: https://github.com/nodejs/node/pull/22442 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com>
Diffstat (limited to 'test/parallel/test-whatwg-url-custom-searchparams-constructor.js')
-rw-r--r--test/parallel/test-whatwg-url-custom-searchparams-constructor.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/parallel/test-whatwg-url-custom-searchparams-constructor.js b/test/parallel/test-whatwg-url-custom-searchparams-constructor.js
new file mode 100644
index 0000000000..fd7cc51127
--- /dev/null
+++ b/test/parallel/test-whatwg-url-custom-searchparams-constructor.js
@@ -0,0 +1,69 @@
+'use strict';
+
+// Tests below are not from WPT.
+
+const common = require('../common');
+const assert = require('assert');
+const URLSearchParams = require('url').URLSearchParams;
+
+function makeIterableFunc(array) {
+ return Object.assign(() => {}, {
+ [Symbol.iterator]() {
+ return array[Symbol.iterator]();
+ }
+ });
+}
+
+{
+ const iterableError = common.expectsError({
+ code: 'ERR_ARG_NOT_ITERABLE',
+ type: TypeError,
+ message: 'Query pairs must be iterable'
+ });
+ const tupleError = common.expectsError({
+ code: 'ERR_INVALID_TUPLE',
+ type: TypeError,
+ message: 'Each query pair must be an iterable [name, value] tuple'
+ }, 6);
+
+ let params;
+ params = new URLSearchParams(undefined);
+ assert.strictEqual(params.toString(), '');
+ params = new URLSearchParams(null);
+ assert.strictEqual(params.toString(), '');
+ params = new URLSearchParams(
+ makeIterableFunc([['key', 'val'], ['key2', 'val2']])
+ );
+ assert.strictEqual(params.toString(), 'key=val&key2=val2');
+ params = new URLSearchParams(
+ makeIterableFunc([['key', 'val'], ['key2', 'val2']].map(makeIterableFunc))
+ );
+ assert.strictEqual(params.toString(), 'key=val&key2=val2');
+ assert.throws(() => new URLSearchParams([[1]]), tupleError);
+ assert.throws(() => new URLSearchParams([[1, 2, 3]]), tupleError);
+ assert.throws(() => new URLSearchParams({ [Symbol.iterator]: 42 }),
+ iterableError);
+ assert.throws(() => new URLSearchParams([{}]), tupleError);
+ assert.throws(() => new URLSearchParams(['a']), tupleError);
+ assert.throws(() => new URLSearchParams([null]), tupleError);
+ assert.throws(() => new URLSearchParams([{ [Symbol.iterator]: 42 }]),
+ tupleError);
+}
+
+{
+ const obj = {
+ toString() { throw new Error('toString'); },
+ valueOf() { throw new Error('valueOf'); }
+ };
+ const sym = Symbol();
+ const toStringError = /^Error: toString$/;
+ const symbolError = /^TypeError: Cannot convert a Symbol value to a string$/;
+
+ assert.throws(() => new URLSearchParams({ a: obj }), toStringError);
+ assert.throws(() => new URLSearchParams([['a', obj]]), toStringError);
+ assert.throws(() => new URLSearchParams(sym), symbolError);
+ assert.throws(() => new URLSearchParams({ [sym]: 'a' }), symbolError);
+ assert.throws(() => new URLSearchParams({ a: sym }), symbolError);
+ assert.throws(() => new URLSearchParams([[sym, 'a']]), symbolError);
+ assert.throws(() => new URLSearchParams([['a', sym]]), symbolError);
+}