1'use strict'; 2 3// Tests below are not from WPT. 4 5require('../common'); 6const assert = require('assert'); 7 8function makeIterableFunc(array) { 9 return Object.assign(() => {}, { 10 [Symbol.iterator]() { 11 return array[Symbol.iterator](); 12 } 13 }); 14} 15 16{ 17 const iterableError = { 18 code: 'ERR_ARG_NOT_ITERABLE', 19 name: 'TypeError', 20 message: 'Query pairs must be iterable' 21 }; 22 const tupleError = { 23 code: 'ERR_INVALID_TUPLE', 24 name: 'TypeError', 25 message: 'Each query pair must be an iterable [name, value] tuple' 26 }; 27 28 let params; 29 params = new URLSearchParams(undefined); 30 assert.strictEqual(params.toString(), ''); 31 params = new URLSearchParams(null); 32 assert.strictEqual(params.toString(), ''); 33 params = new URLSearchParams( 34 makeIterableFunc([['key', 'val'], ['key2', 'val2']]) 35 ); 36 assert.strictEqual(params.toString(), 'key=val&key2=val2'); 37 params = new URLSearchParams( 38 makeIterableFunc([['key', 'val'], ['key2', 'val2']].map(makeIterableFunc)) 39 ); 40 assert.strictEqual(params.toString(), 'key=val&key2=val2'); 41 assert.throws(() => new URLSearchParams([[1]]), tupleError); 42 assert.throws(() => new URLSearchParams([[1, 2, 3]]), tupleError); 43 assert.throws(() => new URLSearchParams({ [Symbol.iterator]: 42 }), 44 iterableError); 45 assert.throws(() => new URLSearchParams([{}]), tupleError); 46 assert.throws(() => new URLSearchParams(['a']), tupleError); 47 assert.throws(() => new URLSearchParams([null]), tupleError); 48 assert.throws(() => new URLSearchParams([{ [Symbol.iterator]: 42 }]), 49 tupleError); 50} 51 52{ 53 const obj = { 54 toString() { throw new Error('toString'); }, 55 valueOf() { throw new Error('valueOf'); } 56 }; 57 const sym = Symbol(); 58 const toStringError = /^Error: toString$/; 59 const symbolError = /^TypeError: Cannot convert a Symbol value to a string$/; 60 61 assert.throws(() => new URLSearchParams({ a: obj }), toStringError); 62 assert.throws(() => new URLSearchParams([['a', obj]]), toStringError); 63 assert.throws(() => new URLSearchParams(sym), symbolError); 64 assert.throws(() => new URLSearchParams({ [sym]: 'a' }), symbolError); 65 assert.throws(() => new URLSearchParams({ a: sym }), symbolError); 66 assert.throws(() => new URLSearchParams([[sym, 'a']]), symbolError); 67 assert.throws(() => new URLSearchParams([['a', sym]]), symbolError); 68} 69