mirror of https://github.com/nodejs/node.git
events: refactor to use `validateNumber`
Need to use validateNumber for checking `TypeError` PR-URL: https://github.com/nodejs/node/pull/45770 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com>
This commit is contained in:
parent
a08a1feb3c
commit
cc18fd9608
|
@ -33,7 +33,6 @@ const {
|
|||
ErrorCaptureStackTrace,
|
||||
FunctionPrototypeBind,
|
||||
FunctionPrototypeCall,
|
||||
NumberIsNaN,
|
||||
NumberMAX_SAFE_INTEGER,
|
||||
ObjectDefineProperty,
|
||||
ObjectDefineProperties,
|
||||
|
@ -69,7 +68,6 @@ const {
|
|||
codes: {
|
||||
ERR_INVALID_ARG_TYPE,
|
||||
ERR_INVALID_THIS,
|
||||
ERR_OUT_OF_RANGE,
|
||||
ERR_UNHANDLED_ERROR
|
||||
},
|
||||
genericNodeError,
|
||||
|
@ -80,6 +78,7 @@ const {
|
|||
validateAbortSignal,
|
||||
validateBoolean,
|
||||
validateFunction,
|
||||
validateNumber,
|
||||
validateString,
|
||||
} = require('internal/validators');
|
||||
|
||||
|
@ -278,11 +277,7 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', {
|
|||
return defaultMaxListeners;
|
||||
},
|
||||
set: function(arg) {
|
||||
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
|
||||
throw new ERR_OUT_OF_RANGE('defaultMaxListeners',
|
||||
'a non-negative number',
|
||||
arg);
|
||||
}
|
||||
validateNumber(arg, 'defaultMaxListeners', 0);
|
||||
defaultMaxListeners = arg;
|
||||
}
|
||||
});
|
||||
|
@ -312,8 +307,7 @@ ObjectDefineProperties(EventEmitter, {
|
|||
*/
|
||||
EventEmitter.setMaxListeners =
|
||||
function(n = defaultMaxListeners, ...eventTargets) {
|
||||
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n))
|
||||
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
|
||||
validateNumber(n, 'setMaxListeners', 0);
|
||||
if (eventTargets.length === 0) {
|
||||
defaultMaxListeners = n;
|
||||
} else {
|
||||
|
@ -409,9 +403,7 @@ function emitUnhandledRejectionOrErr(ee, err, type, args) {
|
|||
* @returns {EventEmitter}
|
||||
*/
|
||||
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
|
||||
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
|
||||
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
|
||||
}
|
||||
validateNumber(n, 'setMaxListeners', 0);
|
||||
this._maxListeners = n;
|
||||
return this;
|
||||
};
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const events = require('events');
|
||||
const { inspect } = require('util');
|
||||
const e = new events.EventEmitter();
|
||||
|
||||
e.on('maxListeners', common.mustCall());
|
||||
|
@ -31,16 +30,15 @@ e.on('maxListeners', common.mustCall());
|
|||
// Should not corrupt the 'maxListeners' queue.
|
||||
e.setMaxListeners(42);
|
||||
|
||||
const throwsObjs = [NaN, -1, 'and even this'];
|
||||
const rangeErrorObjs = [NaN, -1];
|
||||
const typeErrorObj = 'and even this';
|
||||
|
||||
for (const obj of throwsObjs) {
|
||||
for (const obj of rangeErrorObjs) {
|
||||
assert.throws(
|
||||
() => e.setMaxListeners(obj),
|
||||
{
|
||||
code: 'ERR_OUT_OF_RANGE',
|
||||
name: 'RangeError',
|
||||
message: 'The value of "n" is out of range. ' +
|
||||
`It must be a non-negative number. Received ${inspect(obj)}`,
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -49,22 +47,40 @@ for (const obj of throwsObjs) {
|
|||
{
|
||||
code: 'ERR_OUT_OF_RANGE',
|
||||
name: 'RangeError',
|
||||
message: 'The value of "defaultMaxListeners" is out of range. ' +
|
||||
`It must be a non-negative number. Received ${inspect(obj)}`,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
assert.throws(
|
||||
() => e.setMaxListeners(typeErrorObj),
|
||||
{
|
||||
code: 'ERR_INVALID_ARG_TYPE',
|
||||
name: 'TypeError',
|
||||
}
|
||||
);
|
||||
|
||||
assert.throws(
|
||||
() => events.defaultMaxListeners = typeErrorObj,
|
||||
{
|
||||
code: 'ERR_INVALID_ARG_TYPE',
|
||||
name: 'TypeError',
|
||||
}
|
||||
);
|
||||
|
||||
e.emit('maxListeners');
|
||||
|
||||
{
|
||||
const { EventEmitter, defaultMaxListeners } = events;
|
||||
for (const obj of throwsObjs) {
|
||||
for (const obj of rangeErrorObjs) {
|
||||
assert.throws(() => EventEmitter.setMaxListeners(obj), {
|
||||
code: 'ERR_OUT_OF_RANGE',
|
||||
});
|
||||
}
|
||||
|
||||
assert.throws(() => EventEmitter.setMaxListeners(typeErrorObj), {
|
||||
code: 'ERR_INVALID_ARG_TYPE',
|
||||
});
|
||||
|
||||
assert.throws(
|
||||
() => EventEmitter.setMaxListeners(defaultMaxListeners, 'INVALID_EMITTER'),
|
||||
{ code: 'ERR_INVALID_ARG_TYPE' }
|
||||
|
|
Loading…
Reference in New Issue