Skip to content

Commit 33aec48

Browse files
committed
Fix incorrect event emitter usage in removeEventListener
1 parent cb532e7 commit 33aec48

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

lib/eventsource.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -280,24 +280,33 @@ Object.defineProperty(EventSource, 'CLOSED', { enumerable: true, value: 2});
280280
/**
281281
* Emulates the W3C Browser based WebSocket interface using addEventListener.
282282
*
283-
* @param {String} method Listen for an event
283+
* @param {String} type A string representing the event type to listen out for
284284
* @param {Function} listener callback
285285
* @see https://developer.mozilla.org/en/DOM/element.addEventListener
286286
* @see http://dev.w3.org/html5/websockets/#the-websocket-interface
287287
* @api public
288288
*/
289-
EventSource.prototype.addEventListener = function addEventListener(method, listener) {
289+
EventSource.prototype.addEventListener = function addEventListener(type, listener) {
290290
if (typeof listener === 'function') {
291291
// store a reference so we can return the original function again
292292
listener._listener = listener;
293-
this.on(method, listener);
293+
this.on(type, listener);
294294
}
295295
};
296296

297-
EventSource.prototype.removeEventListener = function removeEventListener(method, listener) {
297+
/**
298+
* Emulates the W3C Browser based WebSocket interface using removeEventListener.
299+
*
300+
* @param {String} type A string representing the event type to remove
301+
* @param {Function} listener callback
302+
* @see https://developer.mozilla.org/en/DOM/element.removeEventListener
303+
* @see http://dev.w3.org/html5/websockets/#the-websocket-interface
304+
* @api public
305+
*/
306+
EventSource.prototype.removeEventListener = function removeEventListener(type, listener) {
298307
if (typeof listener === 'function') {
299308
listener._listener = undefined;
300-
this.off(method, listener);
309+
this.removeListener(type, listener);
301310
}
302311
};
303312

test/eventsource_test.js

+24
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,30 @@ describe('Parser', function () {
232232
});
233233
});
234234

235+
it('allows removal of event listeners', function (done) {
236+
createServer(function (err, server) {
237+
if (err) return done(err);
238+
239+
server.on('request', writeEvents(["event: greeting\ndata: Hello\n\n", "event: greeting\ndata: World\n\n"]));
240+
var es = new EventSource(server.url);
241+
var numCalled = 0;
242+
243+
function onGreeting(m) {
244+
numCalled++;
245+
assert.equal("Hello", m.data);
246+
es.removeEventListener('greeting', onGreeting, false);
247+
process.nextTick(scheduleDisconnect);
248+
}
249+
250+
function scheduleDisconnect() {
251+
assert.equal(1, numCalled);
252+
server.close(done);
253+
}
254+
255+
es.addEventListener('greeting', onGreeting, false);
256+
});
257+
});
258+
235259
it('ignores comments', function (done) {
236260
createServer(function (err, server) {
237261
if (err) return done(err);

0 commit comments

Comments
 (0)