Check that `listeners` is actually an array before trying to manipulate it
because it won't be if no regular event listeners have been registered yet
but there are 'removeListener' event listeners.
if (typeof listeners === 'function') {
this.removeListener(type, listeners);
- } else {
+ } else if (Array.isArray(listeners)) {
// LIFO order
while (listeners.length)
this.removeListener(type, listeners[listeners.length - 1]);
console.error(e2);
assert.deepEqual([], e2.listeners('foo'));
assert.deepEqual([], e2.listeners('bar'));
+
+var e3 = new events.EventEmitter();
+e3.on('removeListener', listener);
+// check for regression where removeAllListeners throws when
+// there exists a removeListener listener, but there exists
+// no listeners for the provided event type
+assert.doesNotThrow(e3.removeAllListeners.bind(e3, 'foo'));