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