'use strict'; const common = require('../common'); const assert = require('assert'); const url = require('url'); const URL = url.URL; const URLSearchParams = url.URLSearchParams; let a, b, i; // ForEach Check const params = new URLSearchParams('a=1&b=2&c=3'); const keys = []; const values = []; params.forEach((value, key) => { keys.push(key); values.push(value); }); assert.deepStrictEqual(keys, ['a', 'b', 'c']); assert.deepStrictEqual(values, ['1', '2', '3']); // For-of Check a = new URL('http://a.b/c?a=1&b=2&c=3&d=4'); b = a.searchParams; const c = []; for (i of b) { a.search = 'x=1&y=2&z=3'; c.push(i); } assert.deepStrictEqual(c[0], ['a', '1']); assert.deepStrictEqual(c[1], ['y', '2']); assert.deepStrictEqual(c[2], ['z', '3']); // empty a = new URL('http://a.b/c'); b = a.searchParams; for (i of b) { common.fail('should not be reached'); } assert.throws(() => { params.forEach.call(undefined); }, /^TypeError: Value of `this` is not a URLSearchParams$/);