| 'use strict'; |
| var common = require('../common'); |
| var assert = require('assert'); |
| var events = require('events'); |
| |
| var callbacks_called = []; |
| |
| var e = new events.EventEmitter(); |
| |
| function callback1() { |
| callbacks_called.push('callback1'); |
| e.on('foo', callback2); |
| e.on('foo', callback3); |
| e.removeListener('foo', callback1); |
| } |
| |
| function callback2() { |
| callbacks_called.push('callback2'); |
| e.removeListener('foo', callback2); |
| } |
| |
| function callback3() { |
| callbacks_called.push('callback3'); |
| e.removeListener('foo', callback3); |
| } |
| |
| e.on('foo', callback1); |
| assert.equal(1, e.listeners('foo').length); |
| |
| e.emit('foo'); |
| assert.equal(2, e.listeners('foo').length); |
| assert.deepEqual(['callback1'], callbacks_called); |
| |
| e.emit('foo'); |
| assert.equal(0, e.listeners('foo').length); |
| assert.deepEqual(['callback1', 'callback2', 'callback3'], callbacks_called); |
| |
| e.emit('foo'); |
| assert.equal(0, e.listeners('foo').length); |
| assert.deepEqual(['callback1', 'callback2', 'callback3'], callbacks_called); |
| |
| e.on('foo', callback1); |
| e.on('foo', callback2); |
| assert.equal(2, e.listeners('foo').length); |
| e.removeAllListeners('foo'); |
| assert.equal(0, e.listeners('foo').length); |
| |
| // Verify that removing callbacks while in emit allows emits to propagate to |
| // all listeners |
| callbacks_called = []; |
| |
| e.on('foo', callback2); |
| e.on('foo', callback3); |
| assert.equal(2, e.listeners('foo').length); |
| e.emit('foo'); |
| assert.deepEqual(['callback2', 'callback3'], callbacks_called); |
| assert.equal(0, e.listeners('foo').length); |