diff options
author | Reid Burke <me@reidburke.com> | 2012-06-13 12:25:43 -0500 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-06-14 17:26:50 -0700 |
commit | c9a1b5d162d40235ac7ec5479059c66a33f5c1a1 (patch) | |
tree | cbdb4c4fd27f9e04bf4288aaf80b1650e0c5b185 | |
parent | 13400e3e5851d81d4c79f1f4ac0e7aef85b64cb9 (diff) | |
download | node-c9a1b5d162d40235ac7ec5479059c66a33f5c1a1.tar.gz |
Fix #3425: removeAllListeners should delete array
When removeAllListeners is called, the listeners array
is deleted to maintain compatibility with v0.6.
Reverts "events: don't delete the listeners array"
This reverts commit 78dc13fbf97e2e3003e6f3baacdd5ff60e8de3f7.
Conflicts:
test/simple/test-event-emitter-remove-all-listeners.js
-rw-r--r-- | lib/events.js | 11 | ||||
-rw-r--r-- | test/simple/test-event-emitter-remove-all-listeners.js | 13 |
2 files changed, 11 insertions, 13 deletions
diff --git a/lib/events.js b/lib/events.js index c4ab9d80a..fe7c04873 100644 --- a/lib/events.js +++ b/lib/events.js @@ -228,15 +228,8 @@ EventEmitter.prototype.removeAllListeners = function(type) { return this; } - var events = this._events && this._events[type]; - if (!events) return this; - - if (isArray(events)) { - events.splice(0); - } else { - this._events[type] = null; - } - + // does not use listeners(), so no side effect of creating _events[type] + if (type && this._events && this._events[type]) this._events[type] = null; return this; }; diff --git a/test/simple/test-event-emitter-remove-all-listeners.js b/test/simple/test-event-emitter-remove-all-listeners.js index 6e27f3eb7..38cfb79c6 100644 --- a/test/simple/test-event-emitter-remove-all-listeners.js +++ b/test/simple/test-event-emitter-remove-all-listeners.js @@ -39,10 +39,15 @@ e1.removeAllListeners('baz'); assert.deepEqual(e1.listeners('foo'), [listener]); assert.deepEqual(e1.listeners('bar'), []); assert.deepEqual(e1.listeners('baz'), []); -// identity check, the array should not change -assert.equal(e1.listeners('foo'), fooListeners); -assert.equal(e1.listeners('bar'), barListeners); -assert.equal(e1.listeners('baz'), bazListeners); +// after calling removeAllListeners, +// the old listeners array should stay unchanged +assert.deepEqual(fooListeners, [listener]); +assert.deepEqual(barListeners, [listener]); +assert.deepEqual(bazListeners, [listener, listener]); +// after calling removeAllListeners, +// new listeners arrays are different from the old +assert.notEqual(e1.listeners('bar'), barListeners); +assert.notEqual(e1.listeners('baz'), bazListeners); var e2 = new events.EventEmitter(); e2.on('foo', listener); |