url: check forEach callback is a function
The Web IDL spec mandates such a check. Also make error messages consistent with rest of Node.js and add additional tests for forEach(). PR-URL: https://github.com/nodejs/node/pull/10905 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
parent
8ab561b243
commit
ed0086fb46
@ -672,8 +672,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 2) {
|
if (arguments.length < 2) {
|
||||||
throw new TypeError(
|
throw new TypeError('"name" and "value" arguments must be specified');
|
||||||
'Both `name` and `value` arguments need to be specified');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
name = String(name);
|
name = String(name);
|
||||||
@ -687,7 +686,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 1) {
|
if (arguments.length < 1) {
|
||||||
throw new TypeError('The `name` argument needs to be specified');
|
throw new TypeError('"name" argument must be specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[searchParams];
|
const list = this[searchParams];
|
||||||
@ -708,8 +707,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 2) {
|
if (arguments.length < 2) {
|
||||||
throw new TypeError(
|
throw new TypeError('"name" and "value" arguments must be specified');
|
||||||
'Both `name` and `value` arguments need to be specified');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[searchParams];
|
const list = this[searchParams];
|
||||||
@ -749,7 +747,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 1) {
|
if (arguments.length < 1) {
|
||||||
throw new TypeError('The `name` argument needs to be specified');
|
throw new TypeError('"name" argument must be specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[searchParams];
|
const list = this[searchParams];
|
||||||
@ -767,7 +765,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 1) {
|
if (arguments.length < 1) {
|
||||||
throw new TypeError('The `name` argument needs to be specified');
|
throw new TypeError('"name" argument must be specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[searchParams];
|
const list = this[searchParams];
|
||||||
@ -786,7 +784,7 @@ class URLSearchParams {
|
|||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 1) {
|
if (arguments.length < 1) {
|
||||||
throw new TypeError('The `name` argument needs to be specified');
|
throw new TypeError('"name" argument must be specified');
|
||||||
}
|
}
|
||||||
|
|
||||||
const list = this[searchParams];
|
const list = this[searchParams];
|
||||||
@ -814,8 +812,8 @@ class URLSearchParams {
|
|||||||
if (!this || !(this instanceof URLSearchParams)) {
|
if (!this || !(this instanceof URLSearchParams)) {
|
||||||
throw new TypeError('Value of `this` is not a URLSearchParams');
|
throw new TypeError('Value of `this` is not a URLSearchParams');
|
||||||
}
|
}
|
||||||
if (arguments.length < 1) {
|
if (typeof callback !== 'function') {
|
||||||
throw new TypeError('The `callback` argument needs to be specified');
|
throw new TypeError('"callback" argument must be a function');
|
||||||
}
|
}
|
||||||
|
|
||||||
let list = this[searchParams];
|
let list = this[searchParams];
|
||||||
|
@ -44,6 +44,20 @@ n = 0;
|
|||||||
for (val of sp.values()) {
|
for (val of sp.values()) {
|
||||||
assert.strictEqual(val, String(values[n++]));
|
assert.strictEqual(val, String(values[n++]));
|
||||||
}
|
}
|
||||||
|
n = 0;
|
||||||
|
sp.forEach(function(val, key, obj) {
|
||||||
|
assert.strictEqual(this, undefined);
|
||||||
|
assert.strictEqual(key, 'a');
|
||||||
|
assert.strictEqual(val, String(values[n++]));
|
||||||
|
assert.strictEqual(obj, sp);
|
||||||
|
});
|
||||||
|
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';
|
m.search = '?a=a&b=b';
|
||||||
assert.strictEqual(sp.toString(), 'a=a&b=b');
|
assert.strictEqual(sp.toString(), 'a=a&b=b');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user