From 16357f2d728c3ef8d42e3da97b77a57be4979f0a Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Mon, 22 May 2017 11:38:17 -0700 Subject: [PATCH] test: refactor event-emitter-check-listener-leaks * add block-scoping * use common.mustCall() on callbacks that should not execute PR-URL: https://github.com/nodejs/node/pull/13164 Reviewed-By: James M Snell Reviewed-By: Refael Ackermann Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig --- ...test-event-emitter-check-listener-leaks.js | 120 +++++++++--------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/test/parallel/test-event-emitter-check-listener-leaks.js b/test/parallel/test-event-emitter-check-listener-leaks.js index f8a8923579..e24c07506c 100644 --- a/test/parallel/test-event-emitter-check-listener-leaks.js +++ b/test/parallel/test-event-emitter-check-listener-leaks.js @@ -25,73 +25,79 @@ const common = require('../common'); const assert = require('assert'); const events = require('events'); -let e = new events.EventEmitter(); - // default -for (let i = 0; i < 10; i++) { - e.on('default', common.noop); -} -assert.ok(!e._events['default'].hasOwnProperty('warned')); -e.on('default', common.noop); -assert.ok(e._events['default'].warned); +{ + const e = new events.EventEmitter(); -// symbol -const symbol = Symbol('symbol'); -e.setMaxListeners(1); -e.on(symbol, common.noop); -assert.ok(!e._events[symbol].hasOwnProperty('warned')); -e.on(symbol, common.noop); -assert.ok(e._events[symbol].hasOwnProperty('warned')); + for (let i = 0; i < 10; i++) { + e.on('default', common.mustNotCall()); + } + assert.ok(!e._events['default'].hasOwnProperty('warned')); + e.on('default', common.mustNotCall()); + assert.ok(e._events['default'].warned); -// specific -e.setMaxListeners(5); -for (let i = 0; i < 5; i++) { - e.on('specific', common.noop); -} -assert.ok(!e._events['specific'].hasOwnProperty('warned')); -e.on('specific', common.noop); -assert.ok(e._events['specific'].warned); + // symbol + const symbol = Symbol('symbol'); + e.setMaxListeners(1); + e.on(symbol, common.mustNotCall()); + assert.ok(!e._events[symbol].hasOwnProperty('warned')); + e.on(symbol, common.mustNotCall()); + assert.ok(e._events[symbol].hasOwnProperty('warned')); + + // specific + e.setMaxListeners(5); + for (let i = 0; i < 5; i++) { + e.on('specific', common.mustNotCall()); + } + assert.ok(!e._events['specific'].hasOwnProperty('warned')); + e.on('specific', common.mustNotCall()); + assert.ok(e._events['specific'].warned); -// only one -e.setMaxListeners(1); -e.on('only one', common.noop); -assert.ok(!e._events['only one'].hasOwnProperty('warned')); -e.on('only one', common.noop); -assert.ok(e._events['only one'].hasOwnProperty('warned')); + // only one + e.setMaxListeners(1); + e.on('only one', common.mustNotCall()); + assert.ok(!e._events['only one'].hasOwnProperty('warned')); + e.on('only one', common.mustNotCall()); + assert.ok(e._events['only one'].hasOwnProperty('warned')); -// unlimited -e.setMaxListeners(0); -for (let i = 0; i < 1000; i++) { - e.on('unlimited', common.noop); + // unlimited + e.setMaxListeners(0); + for (let i = 0; i < 1000; i++) { + e.on('unlimited', common.mustNotCall()); + } + assert.ok(!e._events['unlimited'].hasOwnProperty('warned')); } -assert.ok(!e._events['unlimited'].hasOwnProperty('warned')); // process-wide -events.EventEmitter.defaultMaxListeners = 42; -e = new events.EventEmitter(); +{ + events.EventEmitter.defaultMaxListeners = 42; + const e = new events.EventEmitter(); -for (let i = 0; i < 42; ++i) { - e.on('fortytwo', common.noop); -} -assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); -e.on('fortytwo', common.noop); -assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); -delete e._events['fortytwo'].warned; + for (let i = 0; i < 42; ++i) { + e.on('fortytwo', common.mustNotCall()); + } + assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); + e.on('fortytwo', common.mustNotCall()); + assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); + delete e._events['fortytwo'].warned; -events.EventEmitter.defaultMaxListeners = 44; -e.on('fortytwo', common.noop); -assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); -e.on('fortytwo', common.noop); -assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); + events.EventEmitter.defaultMaxListeners = 44; + e.on('fortytwo', common.mustNotCall()); + assert.ok(!e._events['fortytwo'].hasOwnProperty('warned')); + e.on('fortytwo', common.mustNotCall()); + assert.ok(e._events['fortytwo'].hasOwnProperty('warned')); +} // but _maxListeners still has precedence over defaultMaxListeners -events.EventEmitter.defaultMaxListeners = 42; -e = new events.EventEmitter(); -e.setMaxListeners(1); -e.on('uno', common.noop); -assert.ok(!e._events['uno'].hasOwnProperty('warned')); -e.on('uno', common.noop); -assert.ok(e._events['uno'].hasOwnProperty('warned')); +{ + events.EventEmitter.defaultMaxListeners = 42; + const e = new events.EventEmitter(); + e.setMaxListeners(1); + e.on('uno', common.mustNotCall()); + assert.ok(!e._events['uno'].hasOwnProperty('warned')); + e.on('uno', common.mustNotCall()); + assert.ok(e._events['uno'].hasOwnProperty('warned')); -// chainable -assert.strictEqual(e, e.setMaxListeners(1)); + // chainable + assert.strictEqual(e, e.setMaxListeners(1)); +}