node/test/parallel/test-whatwg-url-searchparams.js
Timothy Gu d77a7588cf url: spec-compliant URLSearchParams serializer
PR-URL: https://github.com/nodejs/node/pull/11626
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com>
2017-03-14 13:14:20 -07:00

80 lines
2.1 KiB
JavaScript

'use strict';
require('../common');
const assert = require('assert');
const URL = require('url').URL;
// 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';
const values = ['a', 1, true, undefined, null, '\uD83D', '\uDE00',
'\uD83D\uDE00', '\uDE00\uD83D', {}];
const normalizedValues = ['a', '1', 'true', 'undefined', 'null', '\uFFFD',
'\uFFFD', '\uD83D\uDE00', '\uFFFD\uFFFD',
'[object Object]'];
const m = new URL('http://example.org');
const sp = m.searchParams;
assert(sp);
assert.strictEqual(sp.toString(), '');
assert.strictEqual(m.search, '');
assert(!sp.has('a'));
values.forEach((i) => sp.set('a', i));
assert(sp.has('a'));
assert.strictEqual(sp.get('a'), '[object Object]');
sp.delete('a');
assert(!sp.has('a'));
m.search = '';
assert.strictEqual(sp.toString(), '');
values.forEach((i) => sp.append('a', i));
assert(sp.has('a'));
assert.strictEqual(sp.getAll('a').length, values.length);
assert.strictEqual(sp.get('a'), 'a');
assert.strictEqual(sp.toString(), serialized);
assert.strictEqual(m.search, `?${serialized}`);
assert.strictEqual(sp[Symbol.iterator], sp.entries);
let key, val;
let n = 0;
for ([key, val] of sp) {
assert.strictEqual(key, 'a', n);
assert.strictEqual(val, normalizedValues[n], n);
n++;
}
n = 0;
for (key of sp.keys()) {
assert.strictEqual(key, 'a', n);
n++;
}
n = 0;
for (val of sp.values()) {
assert.strictEqual(val, normalizedValues[n], n);
n++;
}
n = 0;
sp.forEach(function(val, key, obj) {
assert.strictEqual(this, undefined, n);
assert.strictEqual(key, 'a', n);
assert.strictEqual(val, normalizedValues[n], n);
assert.strictEqual(obj, sp, n);
n++;
});
sp.forEach(function() {
assert.strictEqual(this, m);
}, m);
assert.throws(() => sp.forEach(),
/^TypeError: "callback" argument must be a function$/);
assert.throws(() => sp.forEach(1),
/^TypeError: "callback" argument must be a function$/);
m.search = '?a=a&b=b';
assert.strictEqual(sp.toString(), 'a=a&b=b');