var simpleEvents= require('nodeunit').testCase;
var file = '../../lib/eventemitter2';
module.exports = simpleEvents({
setUp: function (callback) {
var EventEmitter2;
if(typeof require !== 'undefined') {
EventEmitter2 = require(file).EventEmitter2;
}
else {
EventEmitter2 = window.EventEmitter2;
}
this.emitter = new EventEmitter2;
callback();
},
tearDown: function (callback) {
callback();
},
'removeListener1. adding 1, removing 1' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
emitter.on(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should only have 1');
emitter.removeListener(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 0, 'should be 0');
test.expect(2);
test.done();
},
'removeListener2. adding 2, removing 1' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
emitter.on(type, f);
emitter.on(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 2, 'should only have 2');
emitter.removeListener(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should be 1');
test.expect(2);
test.done();
},
'removeListener3. adding 3, removing 1' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
emitter.on(type, f);
emitter.on(type, f);
emitter.on(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 3, 'should only have 3');
emitter.removeListener(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 2, 'should be 2');
test.expect(2);
test.done();
},
'removeListener4. should error if we don\'t pass in a function' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
emitter.on(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should only have 1');
test.throws(function () {emitter.removeListener(type, type)}, Error, 'should throw an Error');
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should be 1');
test.expect(3);
test.done();
},
'removeListener5. removing a different function, should not remove' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
var g = function g() {
test.ok(true, 'event was raised');
};
emitter.on(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should only have 1');
emitter.removeListener(type, g);
listeners = emitter.listeners(type);
test.equal(listeners.length, 1, 'should be 1');
test.expect(2);
test.done();
},
'removeListener6. removing all functions' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
for (var i = 0; i < 10; i++) {
emitter.on(type, f);
}
listeners = emitter.listeners(type);
test.equal(listeners.length, 10, 'should only have 10');
emitter.removeListener(type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 9, 'should be 9');
emitter.removeAllListeners(type);
listeners = emitter.listeners(type);
test.equal(listeners.length, 0, 'should be 0');
test.expect(3);
test.done();
},
'removeListener7. removing different event, should not remove' : function (test) {
var emitter = this.emitter,
type = 'remove',
listeners;
var f = function f() {
test.ok(true, 'event was raised');
};
for (var i = 0; i < 10; i++) {
emitter.on(type, f);
}
listeners = emitter.listeners(type);
test.equal(listeners.length, 10, 'should only have 10');
emitter.removeListener(type+type, f);
listeners = emitter.listeners(type);
test.equal(listeners.length, 10, 'should be 10');
emitter.removeAllListeners(type+type);
listeners = emitter.listeners(type);
test.equal(listeners.length, 10, 'should be 10');
emitter.removeAllListeners(type);
listeners = emitter.listeners(type);
test.equal(listeners.length, 0, 'should be 0');
test.expect(4);
test.done();
},
});