diff --git a/test/parallel/test-whatwg-url-domainto.js b/test/parallel/test-whatwg-url-custom-domainto.js similarity index 94% rename from test/parallel/test-whatwg-url-domainto.js rename to test/parallel/test-whatwg-url-custom-domainto.js index fae9f800c79ae8..556a3ff8410b73 100644 --- a/test/parallel/test-whatwg-url-domainto.js +++ b/test/parallel/test-whatwg-url-custom-domainto.js @@ -1,4 +1,7 @@ 'use strict'; + +// Tests below are not from WPT. + const common = require('../common'); if (!common.hasIntl) @@ -7,9 +10,8 @@ if (!common.hasIntl) const assert = require('assert'); const { domainToASCII, domainToUnicode } = require('url'); -// Tests below are not from WPT. -const tests = require('../fixtures/url-idna.js'); -const wptToASCIITests = require('../fixtures/url-toascii.js'); +const tests = require('../fixtures/url-idna'); +const wptToASCIITests = require('../fixtures/url-toascii'); { const expectedError = common.expectsError( diff --git a/test/parallel/test-whatwg-url-global.js b/test/parallel/test-whatwg-url-custom-global.js similarity index 93% rename from test/parallel/test-whatwg-url-global.js rename to test/parallel/test-whatwg-url-custom-global.js index b4e85a49ad6343..c79723f0490e07 100644 --- a/test/parallel/test-whatwg-url-global.js +++ b/test/parallel/test-whatwg-url-custom-global.js @@ -1,5 +1,7 @@ 'use strict'; +// Tests below are not from WPT. + require('../common'); const assert = require('assert'); const { URL, URLSearchParams } = require('url'); diff --git a/test/parallel/test-whatwg-url-inspect.js b/test/parallel/test-whatwg-url-custom-inspect.js similarity index 99% rename from test/parallel/test-whatwg-url-inspect.js rename to test/parallel/test-whatwg-url-custom-inspect.js index 1265428d4ca811..1083866d86f505 100644 --- a/test/parallel/test-whatwg-url-inspect.js +++ b/test/parallel/test-whatwg-url-custom-inspect.js @@ -1,5 +1,7 @@ 'use strict'; +// Tests below are not from WPT. + const common = require('../common'); if (!common.hasIntl) { // A handful of the tests fail when ICU is not included. @@ -10,7 +12,6 @@ const util = require('util'); const URL = require('url').URL; const assert = require('assert'); -// Tests below are not from WPT. const url = new URL('https://username:password@host.name:8080/path/name/?que=ry#hash'); assert.strictEqual( diff --git a/test/parallel/test-whatwg-url-parsing.js b/test/parallel/test-whatwg-url-custom-parsing.js similarity index 99% rename from test/parallel/test-whatwg-url-parsing.js rename to test/parallel/test-whatwg-url-custom-parsing.js index fd8570eb720831..252e35c8d3552c 100644 --- a/test/parallel/test-whatwg-url-parsing.js +++ b/test/parallel/test-whatwg-url-custom-parsing.js @@ -1,5 +1,7 @@ 'use strict'; +// Tests below are not from WPT. + const common = require('../common'); if (!common.hasIntl) { // A handful of the tests fail when ICU is not included. @@ -10,7 +12,6 @@ const URL = require('url').URL; const assert = require('assert'); const fixtures = require('../common/fixtures'); -// Tests below are not from WPT. const tests = require(fixtures.path('url-tests')); const originalFailures = tests.filter((test) => test.failure); diff --git a/test/parallel/test-whatwg-url-properties.js b/test/parallel/test-whatwg-url-custom-properties.js similarity index 99% rename from test/parallel/test-whatwg-url-properties.js rename to test/parallel/test-whatwg-url-custom-properties.js index 230315a70efdfc..4a35215bc4ac96 100644 --- a/test/parallel/test-whatwg-url-properties.js +++ b/test/parallel/test-whatwg-url-custom-properties.js @@ -1,12 +1,13 @@ // Flags: --expose-internals 'use strict'; +// Tests below are not from WPT. + require('../common'); const URL = require('url').URL; const assert = require('assert'); const urlToOptions = require('internal/url').urlToOptions; -// Tests below are not from WPT. const url = new URL('http://user:pass@foo.bar.com:21/aaa/zzz?l=24#test'); const oldParams = url.searchParams; // for test of [SameObject] diff --git a/test/parallel/test-whatwg-url-custom-searchparams-append.js b/test/parallel/test-whatwg-url-custom-searchparams-append.js new file mode 100644 index 00000000000000..e5d3f203588c60 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-append.js @@ -0,0 +1,37 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.append.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.append('a'); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" and "value" arguments must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.set(obj, 'b'), /^Error: toString$/); + assert.throws(() => params.set('a', obj), /^Error: toString$/); + assert.throws(() => params.set(sym, 'b'), + /^TypeError: Cannot convert a Symbol value to a string$/); + assert.throws(() => params.set('a', sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} 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 00000000000000..fd7cc511279033 --- /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); +} diff --git a/test/parallel/test-whatwg-url-custom-searchparams-delete.js b/test/parallel/test-whatwg-url-custom-searchparams-delete.js new file mode 100644 index 00000000000000..a22345cc6eef82 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-delete.js @@ -0,0 +1,46 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const { URL, URLSearchParams } = require('url'); + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.delete.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.delete(); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" argument must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.delete(obj), /^Error: toString$/); + assert.throws(() => params.delete(sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} + +// https://github.com/nodejs/node/issues/10480 +// Emptying searchParams should correctly update url's query +{ + const url = new URL('http://domain?var=1&var=2&var=3'); + for (const param of url.searchParams.keys()) { + url.searchParams.delete(param); + } + assert.strictEqual(url.searchParams.toString(), ''); + assert.strictEqual(url.search, ''); + assert.strictEqual(url.href, 'http://domain/'); +} diff --git a/test/parallel/test-whatwg-url-searchparams-entries.js b/test/parallel/test-whatwg-url-custom-searchparams-entries.js similarity index 100% rename from test/parallel/test-whatwg-url-searchparams-entries.js rename to test/parallel/test-whatwg-url-custom-searchparams-entries.js diff --git a/test/parallel/test-whatwg-url-custom-searchparams-foreach.js b/test/parallel/test-whatwg-url-custom-searchparams-foreach.js new file mode 100644 index 00000000000000..3e729d2bcd4cdd --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-foreach.js @@ -0,0 +1,17 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const { URLSearchParams } = require('url'); + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.forEach.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); +} diff --git a/test/parallel/test-whatwg-url-custom-searchparams-get.js b/test/parallel/test-whatwg-url-custom-searchparams-get.js new file mode 100644 index 00000000000000..b99a5fae97d927 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-get.js @@ -0,0 +1,34 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.get.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.get(); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" argument must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.get(obj), /^Error: toString$/); + assert.throws(() => params.get(sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} diff --git a/test/parallel/test-whatwg-url-custom-searchparams-getall.js b/test/parallel/test-whatwg-url-custom-searchparams-getall.js new file mode 100644 index 00000000000000..7f3c7b7610cfd7 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-getall.js @@ -0,0 +1,34 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.getAll.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.getAll(); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" argument must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.getAll(obj), /^Error: toString$/); + assert.throws(() => params.getAll(sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} diff --git a/test/parallel/test-whatwg-url-custom-searchparams-has.js b/test/parallel/test-whatwg-url-custom-searchparams-has.js new file mode 100644 index 00000000000000..2697f199bcc98b --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-has.js @@ -0,0 +1,34 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.has.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.has(); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" argument must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.has(obj), /^Error: toString$/); + assert.throws(() => params.has(sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} diff --git a/test/parallel/test-whatwg-url-searchparams-inspect.js b/test/parallel/test-whatwg-url-custom-searchparams-inspect.js similarity index 99% rename from test/parallel/test-whatwg-url-searchparams-inspect.js rename to test/parallel/test-whatwg-url-custom-searchparams-inspect.js index f2493cc6cff176..6cc22caea62436 100644 --- a/test/parallel/test-whatwg-url-searchparams-inspect.js +++ b/test/parallel/test-whatwg-url-custom-searchparams-inspect.js @@ -1,11 +1,12 @@ 'use strict'; +// Tests below are not from WPT. + require('../common'); const assert = require('assert'); const util = require('util'); const URLSearchParams = require('url').URLSearchParams; -// Tests below are not from WPT. const sp = new URLSearchParams('?a=a&b=b&b=c'); assert.strictEqual(util.inspect(sp), "URLSearchParams { 'a' => 'a', 'b' => 'b', 'b' => 'c' }"); diff --git a/test/parallel/test-whatwg-url-searchparams-keys.js b/test/parallel/test-whatwg-url-custom-searchparams-keys.js similarity index 99% rename from test/parallel/test-whatwg-url-searchparams-keys.js rename to test/parallel/test-whatwg-url-custom-searchparams-keys.js index e4428eb3e98f6b..00800cc79cbf7e 100644 --- a/test/parallel/test-whatwg-url-searchparams-keys.js +++ b/test/parallel/test-whatwg-url-custom-searchparams-keys.js @@ -1,10 +1,11 @@ 'use strict'; +// Tests below are not from WPT. + const common = require('../common'); const assert = require('assert'); const URLSearchParams = require('url').URLSearchParams; -// Tests below are not from WPT. const params = new URLSearchParams('a=b&c=d'); const keys = params.keys(); diff --git a/test/parallel/test-whatwg-url-custom-searchparams-set.js b/test/parallel/test-whatwg-url-custom-searchparams-set.js new file mode 100644 index 00000000000000..ccd3353ecd0e8e --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-set.js @@ -0,0 +1,37 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const assert = require('assert'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.set.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); + common.expectsError(() => { + params.set('a'); + }, { + code: 'ERR_MISSING_ARGS', + type: TypeError, + message: 'The "name" and "value" arguments must be specified' + }); + + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + assert.throws(() => params.append(obj, 'b'), /^Error: toString$/); + assert.throws(() => params.append('a', obj), /^Error: toString$/); + assert.throws(() => params.append(sym, 'b'), + /^TypeError: Cannot convert a Symbol value to a string$/); + assert.throws(() => params.append('a', sym), + /^TypeError: Cannot convert a Symbol value to a string$/); +} diff --git a/test/parallel/test-whatwg-url-custom-searchparams-sort.js b/test/parallel/test-whatwg-url-custom-searchparams-sort.js new file mode 100644 index 00000000000000..f8884a7e7092a3 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-sort.js @@ -0,0 +1,47 @@ +'use strict'; + +// Tests below are not from WPT. + +require('../common'); +const { URL, URLSearchParams } = require('url'); +const { test, assert_array_equals } = require('../common/wpt'); + +// Test bottom-up iterative stable merge sort +const tests = [{ input: '', output: [] }]; +const pairs = []; +for (let i = 10; i < 100; i++) { + pairs.push([`a${i}`, 'b']); + tests[0].output.push([`a${i}`, 'b']); +} +tests[0].input = pairs.sort(() => Math.random() > 0.5) + .map((pair) => pair.join('=')).join('&'); + +tests.push( + { + 'input': 'z=a&=b&c=d', + 'output': [['', 'b'], ['c', 'd'], ['z', 'a']] + } +); + +tests.forEach((val) => { + test(() => { + const params = new URLSearchParams(val.input); + let i = 0; + params.sort(); + for (const param of params) { + assert_array_equals(param, val.output[i]); + i++; + } + }, `Parse and sort: ${val.input}`); + + test(() => { + const url = new URL(`?${val.input}`, 'https://example/'); + url.searchParams.sort(); + const params = new URLSearchParams(url.search); + let i = 0; + for (const param of params) { + assert_array_equals(param, val.output[i]); + i++; + } + }, `URL parse and sort: ${val.input}`); +}); diff --git a/test/parallel/test-whatwg-url-custom-searchparams-stringifier.js b/test/parallel/test-whatwg-url-custom-searchparams-stringifier.js new file mode 100644 index 00000000000000..d2929ae557a079 --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-searchparams-stringifier.js @@ -0,0 +1,17 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +const URLSearchParams = require('url').URLSearchParams; + +{ + const params = new URLSearchParams(); + common.expectsError(() => { + params.toString.call(undefined); + }, { + code: 'ERR_INVALID_THIS', + type: TypeError, + message: 'Value of "this" must be of type URLSearchParams' + }); +} diff --git a/test/parallel/test-whatwg-url-searchparams-values.js b/test/parallel/test-whatwg-url-custom-searchparams-values.js similarity index 99% rename from test/parallel/test-whatwg-url-searchparams-values.js rename to test/parallel/test-whatwg-url-custom-searchparams-values.js index e44b7f5e11267d..e10a9dc04fe0df 100644 --- a/test/parallel/test-whatwg-url-searchparams-values.js +++ b/test/parallel/test-whatwg-url-custom-searchparams-values.js @@ -1,10 +1,11 @@ 'use strict'; +// Tests below are not from WPT. + const common = require('../common'); const assert = require('assert'); const URLSearchParams = require('url').URLSearchParams; -// Tests below are not from WPT. const params = new URLSearchParams('a=b&c=d'); const values = params.values(); diff --git a/test/parallel/test-whatwg-url-searchparams.js b/test/parallel/test-whatwg-url-custom-searchparams.js similarity index 99% rename from test/parallel/test-whatwg-url-searchparams.js rename to test/parallel/test-whatwg-url-custom-searchparams.js index 0b72c08d0b887f..f88c3b4a836b39 100644 --- a/test/parallel/test-whatwg-url-searchparams.js +++ b/test/parallel/test-whatwg-url-custom-searchparams.js @@ -1,11 +1,12 @@ 'use strict'; +// Tests below are not from WPT. + const common = require('../common'); const assert = require('assert'); const { URL, URLSearchParams } = require('url'); const fixtures = require('../common/fixtures'); -// Tests below are not from WPT. const serialized = 'a=a&a=1&a=true&a=undefined&a=null&a=%EF%BF%BD' + '&a=%EF%BF%BD&a=%F0%9F%98%80&a=%EF%BF%BD%EF%BF%BD' + '&a=%5Bobject+Object%5D'; diff --git a/test/parallel/test-whatwg-url-custom-setters.js b/test/parallel/test-whatwg-url-custom-setters.js new file mode 100644 index 00000000000000..99b4361831fd3b --- /dev/null +++ b/test/parallel/test-whatwg-url-custom-setters.js @@ -0,0 +1,60 @@ +'use strict'; + +// Tests below are not from WPT. + +const common = require('../common'); +if (!common.hasIntl) { + // A handful of the tests fail when ICU is not included. + common.skip('missing Intl'); +} + +const assert = require('assert'); +const URL = require('url').URL; +const { test, assert_equals } = require('../common/wpt'); +const fixtures = require('../common/fixtures'); + +const additionalTestCases = + require(fixtures.path('url-setter-tests-additional.js')); + +{ + for (const attributeToBeSet in additionalTestCases) { + if (attributeToBeSet === 'comment') { + continue; + } + const testCases = additionalTestCases[attributeToBeSet]; + for (const testCase of testCases) { + let name = `Setting <${testCase.href}>.${attributeToBeSet}` + + ` = "${testCase.new_value}"`; + if ('comment' in testCase) { + name += ` ${testCase.comment}`; + } + test(function() { + const url = new URL(testCase.href); + url[attributeToBeSet] = testCase.new_value; + for (const attribute in testCase.expected) { + assert_equals(url[attribute], testCase.expected[attribute]); + } + }, `URL: ${name}`); + } + } +} + +{ + const url = new URL('http://example.com/'); + const obj = { + toString() { throw new Error('toString'); }, + valueOf() { throw new Error('valueOf'); } + }; + const sym = Symbol(); + const props = Object.getOwnPropertyDescriptors(Object.getPrototypeOf(url)); + for (const [name, { set }] of Object.entries(props)) { + if (set) { + assert.throws(() => url[name] = obj, + /^Error: toString$/, + `url.${name} = { toString() { throw ... } }`); + assert.throws(() => url[name] = sym, + /^TypeError: Cannot convert a Symbol value to a string$/, + `url.${name} = ${String(sym)}`); + } + } +} diff --git a/test/parallel/test-whatwg-url-tostringtag.js b/test/parallel/test-whatwg-url-custom-tostringtag.js similarity index 99% rename from test/parallel/test-whatwg-url-tostringtag.js rename to test/parallel/test-whatwg-url-custom-tostringtag.js index c352503fa09a66..784a3ebc7728e5 100644 --- a/test/parallel/test-whatwg-url-tostringtag.js +++ b/test/parallel/test-whatwg-url-custom-tostringtag.js @@ -1,10 +1,11 @@ 'use strict'; +// Tests below are not from WPT. + require('../common'); const assert = require('assert'); const URL = require('url').URL; -// Tests below are not from WPT. const toString = Object.prototype.toString; const url = new URL('http://example.org'); diff --git a/test/parallel/test-whatwg-url-searchparams-append.js b/test/parallel/test-whatwg-url-searchparams-append.js index 03e7205fb2cb51..342cbd53357986 100644 --- a/test/parallel/test-whatwg-url-searchparams-append.js +++ b/test/parallel/test-whatwg-url-searchparams-append.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals, assert_true } = require('../common/wpt'); @@ -48,34 +47,3 @@ test(function() { assert_equals(params.get('first'), '1', 'Search params object has name "first" with value "1"'); }, 'Append multiple'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.append.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.append('a'); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" and "value" arguments must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.set(obj, 'b'), /^Error: toString$/); - assert.throws(() => params.set('a', obj), /^Error: toString$/); - assert.throws(() => params.set(sym, 'b'), - /^TypeError: Cannot convert a Symbol value to a string$/); - assert.throws(() => params.set('a', sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} diff --git a/test/parallel/test-whatwg-url-searchparams-constructor.js b/test/parallel/test-whatwg-url-searchparams-constructor.js index b6e720cc7fb04c..882072ba445fcb 100644 --- a/test/parallel/test-whatwg-url-searchparams-constructor.js +++ b/test/parallel/test-whatwg-url-searchparams-constructor.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals, assert_true, @@ -190,66 +189,3 @@ test(() => { assert_equals(params2.get("a"), "b") }, "Custom [Symbol.iterator]") /* eslint-enable */ - -// Tests below are not from WPT. -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); -} diff --git a/test/parallel/test-whatwg-url-searchparams-delete.js b/test/parallel/test-whatwg-url-searchparams-delete.js index 042ecb5d889beb..cdf3332efc7807 100644 --- a/test/parallel/test-whatwg-url-searchparams-delete.js +++ b/test/parallel/test-whatwg-url-searchparams-delete.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const { URL, URLSearchParams } = require('url'); const { test, assert_equals, assert_true, assert_false } = require('../common/wpt'); @@ -58,43 +57,3 @@ test(function() { assert_equals(url.search, '', 'url.search does not have ?'); }, 'Removing non-existent param removes ? from URL'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.delete.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.delete(); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" argument must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.delete(obj), /^Error: toString$/); - assert.throws(() => params.delete(sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} - -// https://github.com/nodejs/node/issues/10480 -// Emptying searchParams should correctly update url's query -{ - const url = new URL('http://domain?var=1&var=2&var=3'); - for (const param of url.searchParams.keys()) { - url.searchParams.delete(param); - } - assert.strictEqual(url.searchParams.toString(), ''); - assert.strictEqual(url.search, ''); - assert.strictEqual(url.href, 'http://domain/'); -} diff --git a/test/parallel/test-whatwg-url-searchparams-foreach.js b/test/parallel/test-whatwg-url-searchparams-foreach.js index 53c35da263f5ab..833858618f8e5b 100644 --- a/test/parallel/test-whatwg-url-searchparams-foreach.js +++ b/test/parallel/test-whatwg-url-searchparams-foreach.js @@ -1,6 +1,6 @@ 'use strict'; -const common = require('../common'); +require('../common'); const { URL, URLSearchParams } = require('url'); const { test, assert_array_equals, assert_unreached } = require('../common/wpt'); @@ -45,15 +45,3 @@ test(function() { } }, "empty"); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.forEach.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); -} diff --git a/test/parallel/test-whatwg-url-searchparams-get.js b/test/parallel/test-whatwg-url-searchparams-get.js index e14bdc7e74fc8d..94e92c18e4b218 100644 --- a/test/parallel/test-whatwg-url-searchparams-get.js +++ b/test/parallel/test-whatwg-url-searchparams-get.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals, assert_true } = require('../common/wpt'); @@ -33,31 +32,3 @@ test(function() { assert_equals(params.get('fourth'), null, 'Search params object has no "fourth" name and value.'); }, 'More get() basics'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.get.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.get(); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" argument must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.get(obj), /^Error: toString$/); - assert.throws(() => params.get(sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} diff --git a/test/parallel/test-whatwg-url-searchparams-getall.js b/test/parallel/test-whatwg-url-searchparams-getall.js index a4692c22f1b21d..06827f37d95bfe 100644 --- a/test/parallel/test-whatwg-url-searchparams-getall.js +++ b/test/parallel/test-whatwg-url-searchparams-getall.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals, assert_true, assert_array_equals } = require('../common/wpt'); @@ -38,31 +37,3 @@ test(function() { assert_array_equals(matches, ['one'], 'Search params object has expected name "a" values'); }, 'getAll() multiples'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.getAll.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.getAll(); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" argument must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.getAll(obj), /^Error: toString$/); - assert.throws(() => params.getAll(sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} diff --git a/test/parallel/test-whatwg-url-searchparams-has.js b/test/parallel/test-whatwg-url-searchparams-has.js index 47c6b6f7bae98f..95e69beb4d26ec 100644 --- a/test/parallel/test-whatwg-url-searchparams-has.js +++ b/test/parallel/test-whatwg-url-searchparams-has.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_false, assert_true } = require('../common/wpt'); @@ -36,31 +35,3 @@ test(function() { assert_false(params.has('first'), 'Search params object has no name "first"'); }, 'has() following delete()'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.has.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.has(); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" argument must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.has(obj), /^Error: toString$/); - assert.throws(() => params.has(sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} diff --git a/test/parallel/test-whatwg-url-searchparams-set.js b/test/parallel/test-whatwg-url-searchparams-set.js index 1bca12e31bcc28..0d43678427c23f 100644 --- a/test/parallel/test-whatwg-url-searchparams-set.js +++ b/test/parallel/test-whatwg-url-searchparams-set.js @@ -1,7 +1,6 @@ 'use strict'; -const common = require('../common'); -const assert = require('assert'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals, assert_true } = require('../common/wpt'); @@ -34,34 +33,3 @@ test(function() { assert_equals(params.get('a'), '4', 'Search params object has name "a" with value "4"'); }, 'URLSearchParams.set'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.set.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); - common.expectsError(() => { - params.set('a'); - }, { - code: 'ERR_MISSING_ARGS', - type: TypeError, - message: 'The "name" and "value" arguments must be specified' - }); - - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - assert.throws(() => params.append(obj, 'b'), /^Error: toString$/); - assert.throws(() => params.append('a', obj), /^Error: toString$/); - assert.throws(() => params.append(sym, 'b'), - /^TypeError: Cannot convert a Symbol value to a string$/); - assert.throws(() => params.append('a', sym), - /^TypeError: Cannot convert a Symbol value to a string$/); -} diff --git a/test/parallel/test-whatwg-url-searchparams-sort.js b/test/parallel/test-whatwg-url-searchparams-sort.js index 1122f08dcc0434..65dd23a6daba57 100644 --- a/test/parallel/test-whatwg-url-searchparams-sort.js +++ b/test/parallel/test-whatwg-url-searchparams-sort.js @@ -61,45 +61,3 @@ test(function() { assert_equals(url.search, "") }, "Sorting non-existent params removes ? from URL") /* eslint-enable */ - -// Tests below are not from WPT. - -// Test bottom-up iterative stable merge sort -const tests = [{ input: '', output: [] }]; -const pairs = []; -for (let i = 10; i < 100; i++) { - pairs.push([`a${i}`, 'b']); - tests[0].output.push([`a${i}`, 'b']); -} -tests[0].input = pairs.sort(() => Math.random() > 0.5) - .map((pair) => pair.join('=')).join('&'); - -tests.push( - { - 'input': 'z=a&=b&c=d', - 'output': [['', 'b'], ['c', 'd'], ['z', 'a']] - } -); - -tests.forEach((val) => { - test(() => { - const params = new URLSearchParams(val.input); - let i = 0; - params.sort(); - for (const param of params) { - assert_array_equals(param, val.output[i]); - i++; - } - }, `Parse and sort: ${val.input}`); - - test(() => { - const url = new URL(`?${val.input}`, 'https://example/'); - url.searchParams.sort(); - const params = new URLSearchParams(url.search); - let i = 0; - for (const param of params) { - assert_array_equals(param, val.output[i]); - i++; - } - }, `URL parse and sort: ${val.input}`); -}); diff --git a/test/parallel/test-whatwg-url-searchparams-stringifier.js b/test/parallel/test-whatwg-url-searchparams-stringifier.js index e3bfbdcf1982d8..e2b6faaabe85fc 100644 --- a/test/parallel/test-whatwg-url-searchparams-stringifier.js +++ b/test/parallel/test-whatwg-url-searchparams-stringifier.js @@ -1,6 +1,6 @@ 'use strict'; -const common = require('../common'); +require('../common'); const URLSearchParams = require('url').URLSearchParams; const { test, assert_equals } = require('../common/wpt'); @@ -121,15 +121,3 @@ test(function() { assert_equals(params.toString(), 'a=&a=b'); }, 'URLSearchParams.toString'); /* eslint-enable */ - -// Tests below are not from WPT. -{ - const params = new URLSearchParams(); - common.expectsError(() => { - params.toString.call(undefined); - }, { - code: 'ERR_INVALID_THIS', - type: TypeError, - message: 'Value of "this" must be of type URLSearchParams' - }); -} diff --git a/test/parallel/test-whatwg-url-setters.js b/test/parallel/test-whatwg-url-setters.js index 7655e4a2578bb1..a04b6c93eccf3d 100644 --- a/test/parallel/test-whatwg-url-setters.js +++ b/test/parallel/test-whatwg-url-setters.js @@ -6,14 +6,10 @@ if (!common.hasIntl) { common.skip('missing Intl'); } -const assert = require('assert'); const URL = require('url').URL; const { test, assert_equals } = require('../common/wpt'); const fixtures = require('../common/fixtures'); -const additionalTestCases = - require(fixtures.path('url-setter-tests-additional.js')); - const request = { response: require(fixtures.path('url-setter-tests')) }; @@ -80,48 +76,3 @@ function runURLSettersTests(all_test_cases) { startURLSettersTests() /* eslint-enable */ - -// Tests below are not from WPT. - -{ - for (const attributeToBeSet in additionalTestCases) { - if (attributeToBeSet === 'comment') { - continue; - } - const testCases = additionalTestCases[attributeToBeSet]; - for (const testCase of testCases) { - let name = `Setting <${testCase.href}>.${attributeToBeSet}` + - ` = "${testCase.new_value}"`; - if ('comment' in testCase) { - name += ` ${testCase.comment}`; - } - test(function() { - const url = new URL(testCase.href); - url[attributeToBeSet] = testCase.new_value; - for (const attribute in testCase.expected) { - assert_equals(url[attribute], testCase.expected[attribute]); - } - }, `URL: ${name}`); - } - } -} - -{ - const url = new URL('http://example.com/'); - const obj = { - toString() { throw new Error('toString'); }, - valueOf() { throw new Error('valueOf'); } - }; - const sym = Symbol(); - const props = Object.getOwnPropertyDescriptors(Object.getPrototypeOf(url)); - for (const [name, { set }] of Object.entries(props)) { - if (set) { - assert.throws(() => url[name] = obj, - /^Error: toString$/, - `url.${name} = { toString() { throw ... } }`); - assert.throws(() => url[name] = sym, - /^TypeError: Cannot convert a Symbol value to a string$/, - `url.${name} = ${String(sym)}`); - } - } -}