Skip to content

Commit 56f9daa

Browse files
committed
events: refactor to use validateNumber
Need to use validateNumber for checking `TypeError`
1 parent 3bef549 commit 56f9daa

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

lib/events.js

+4-12
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const {
3333
ErrorCaptureStackTrace,
3434
FunctionPrototypeBind,
3535
FunctionPrototypeCall,
36-
NumberIsNaN,
3736
NumberMAX_SAFE_INTEGER,
3837
ObjectCreate,
3938
ObjectDefineProperty,
@@ -70,7 +69,6 @@ const {
7069
codes: {
7170
ERR_INVALID_ARG_TYPE,
7271
ERR_INVALID_THIS,
73-
ERR_OUT_OF_RANGE,
7472
ERR_UNHANDLED_ERROR
7573
},
7674
genericNodeError,
@@ -82,6 +80,7 @@ const {
8280
validateBoolean,
8381
validateFunction,
8482
validateString,
83+
validateNumber,
8584
} = require('internal/validators');
8685

8786
const kCapture = Symbol('kCapture');
@@ -279,11 +278,7 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', {
279278
return defaultMaxListeners;
280279
},
281280
set: function(arg) {
282-
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
283-
throw new ERR_OUT_OF_RANGE('defaultMaxListeners',
284-
'a non-negative number',
285-
arg);
286-
}
281+
validateNumber(arg, 'defaultMaxListeners', 0);
287282
defaultMaxListeners = arg;
288283
}
289284
});
@@ -313,8 +308,7 @@ ObjectDefineProperties(EventEmitter, {
313308
*/
314309
EventEmitter.setMaxListeners =
315310
function(n = defaultMaxListeners, ...eventTargets) {
316-
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n))
317-
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
311+
validateNumber(n, 'setMaxListeners', 0);
318312
if (eventTargets.length === 0) {
319313
defaultMaxListeners = n;
320314
} else {
@@ -410,9 +404,7 @@ function emitUnhandledRejectionOrErr(ee, err, type, args) {
410404
* @returns {EventEmitter}
411405
*/
412406
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
413-
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
414-
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
415-
}
407+
validateNumber(n, 'setMaxListeners', 0);
416408
this._maxListeners = n;
417409
return this;
418410
};

test/parallel/test-event-emitter-max-listeners.js

+24-8
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,22 @@
2323
const common = require('../common');
2424
const assert = require('assert');
2525
const events = require('events');
26-
const { inspect } = require('util');
2726
const e = new events.EventEmitter();
2827

2928
e.on('maxListeners', common.mustCall());
3029

3130
// Should not corrupt the 'maxListeners' queue.
3231
e.setMaxListeners(42);
3332

34-
const throwsObjs = [NaN, -1, 'and even this'];
33+
const rangeErrorObjs = [NaN, -1];
34+
const typeErrorObj = 'and even this';
3535

36-
for (const obj of throwsObjs) {
36+
for (const obj of rangeErrorObjs) {
3737
assert.throws(
3838
() => e.setMaxListeners(obj),
3939
{
4040
code: 'ERR_OUT_OF_RANGE',
4141
name: 'RangeError',
42-
message: 'The value of "n" is out of range. ' +
43-
`It must be a non-negative number. Received ${inspect(obj)}`,
4442
}
4543
);
4644

@@ -49,22 +47,40 @@ for (const obj of throwsObjs) {
4947
{
5048
code: 'ERR_OUT_OF_RANGE',
5149
name: 'RangeError',
52-
message: 'The value of "defaultMaxListeners" is out of range. ' +
53-
`It must be a non-negative number. Received ${inspect(obj)}`,
5450
}
5551
);
5652
}
5753

54+
assert.throws(
55+
() => e.setMaxListeners(typeErrorObj),
56+
{
57+
code: 'ERR_INVALID_ARG_TYPE',
58+
name: 'TypeError',
59+
}
60+
);
61+
62+
assert.throws(
63+
() => events.defaultMaxListeners = typeErrorObj,
64+
{
65+
code: 'ERR_INVALID_ARG_TYPE',
66+
name: 'TypeError',
67+
}
68+
);
69+
5870
e.emit('maxListeners');
5971

6072
{
6173
const { EventEmitter, defaultMaxListeners } = events;
62-
for (const obj of throwsObjs) {
74+
for (const obj of rangeErrorObjs) {
6375
assert.throws(() => EventEmitter.setMaxListeners(obj), {
6476
code: 'ERR_OUT_OF_RANGE',
6577
});
6678
}
6779

80+
assert.throws(() => EventEmitter.setMaxListeners(typeErrorObj), {
81+
code: 'ERR_INVALID_ARG_TYPE',
82+
});
83+
6884
assert.throws(
6985
() => EventEmitter.setMaxListeners(defaultMaxListeners, 'INVALID_EMITTER'),
7086
{ code: 'ERR_INVALID_ARG_TYPE' }

0 commit comments

Comments
 (0)