| '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); |
| } |