FIX: EventEmitter#removeListener logic

In the case of one defined listener, the function should only remove it
if it is the same as the passed listener.
pull/22966/head
Jonas Pfenniger 2010-05-14 13:12:41 +02:00 committed by Ryan Dahl
parent 4274e6b7d0
commit fea6f829bf
2 changed files with 40 additions and 1 deletions

View File

@ -90,7 +90,7 @@ process.EventEmitter.prototype.removeListener = function (type, listener) {
var i = list.indexOf(listener);
if (i < 0) return this;
list.splice(i, 1);
} else {
} else if (this._events[type] === listener) {
this._events[type] = null;
}

View File

@ -0,0 +1,39 @@
require("../common");
var events = require('events');
count = 0;
function listener1 () {
puts('listener1');
count++;
}
function listener2 () {
puts('listener2');
count++;
}
function listener3 () {
puts('listener3');
count++;
}
e1 = new events.EventEmitter();
e1.addListener("hello", listener1);
e1.removeListener("hello", listener1);
assert.deepEqual([], e1.listeners('hello'));
e2 = new events.EventEmitter();
e2.addListener("hello", listener1);
e2.removeListener("hello", listener2);
assert.deepEqual([listener1], e2.listeners('hello'));
e3 = new events.EventEmitter();
e3.addListener("hello", listener1);
e3.addListener("hello", listener2);
e3.removeListener("hello", listener1);
assert.deepEqual([listener2], e3.listeners('hello'));