• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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