You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
4.7 KiB
217 lines
4.7 KiB
var Emitter = require('../index'); |
|
var emitter = require('../instance'); |
|
var test = require('tape'); |
|
|
|
test('subscribes to an event', function (t) { |
|
var emitter = new Emitter(); |
|
emitter.on('test', function () {}); |
|
|
|
t.equal(emitter.e.test.length, 1, 'subscribed to event'); |
|
t.end(); |
|
}); |
|
|
|
test('subscribes to an event with context', function (t) { |
|
var emitter = new Emitter(); |
|
var context = { |
|
contextValue: true |
|
}; |
|
|
|
emitter.on('test', function () { |
|
t.ok(this.contextValue, 'is in context'); |
|
t.end(); |
|
}, context); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('subscibes only once to an event', function (t) { |
|
var emitter = new Emitter(); |
|
|
|
emitter.once('test', function () { |
|
t.notOk(emitter.e.test, 'removed event from list'); |
|
t.end(); |
|
}); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('keeps context when subscribed only once', function (t) { |
|
var emitter = new Emitter(); |
|
var context = { |
|
contextValue: true |
|
}; |
|
|
|
emitter.once('test', function () { |
|
t.ok(this.contextValue, 'is in context'); |
|
t.notOk(emitter.e.test, 'not subscribed anymore'); |
|
t.end(); |
|
}, context); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('emits an event', function (t) { |
|
var emitter = new Emitter(); |
|
|
|
emitter.on('test', function () { |
|
t.ok(true, 'triggered event'); |
|
t.end(); |
|
}); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('passes all arguments to event listener', function (t) { |
|
var emitter = new Emitter(); |
|
|
|
emitter.on('test', function (arg1, arg2) { |
|
t.equal(arg1, 'arg1', 'passed the first argument'); |
|
t.equal(arg2, 'arg2', 'passed the second argument'); |
|
t.end(); |
|
}); |
|
|
|
emitter.emit('test', 'arg1', 'arg2'); |
|
}); |
|
|
|
test('unsubscribes from all events with name', function (t) { |
|
var emitter = new Emitter(); |
|
emitter.on('test', function () { |
|
t.fail('should not get called'); |
|
}); |
|
emitter.off('test'); |
|
emitter.emit('test') |
|
|
|
process.nextTick(function () { |
|
t.end(); |
|
}); |
|
}); |
|
|
|
test('unsubscribes single event with name and callback', function (t) { |
|
var emitter = new Emitter(); |
|
var fn = function () { |
|
t.fail('should not get called'); |
|
} |
|
|
|
emitter.on('test', fn); |
|
emitter.off('test', fn); |
|
emitter.emit('test') |
|
|
|
process.nextTick(function () { |
|
t.end(); |
|
}); |
|
}); |
|
|
|
// Test added by https://github.com/lazd |
|
// From PR: https://github.com/scottcorgan/tiny-emitter/pull/6 |
|
test('unsubscribes single event with name and callback when subscribed twice', function (t) { |
|
var emitter = new Emitter(); |
|
var fn = function () { |
|
t.fail('should not get called'); |
|
}; |
|
|
|
emitter.on('test', fn); |
|
emitter.on('test', fn); |
|
|
|
emitter.off('test', fn); |
|
emitter.emit('test'); |
|
|
|
process.nextTick(function () { |
|
t.notOk(emitter.e['test'], 'removes all events'); |
|
t.end(); |
|
}); |
|
}); |
|
|
|
test('unsubscribes single event with name and callback when subscribed twice out of order', function (t) { |
|
var emitter = new Emitter(); |
|
var calls = 0; |
|
var fn = function () { |
|
t.fail('should not get called'); |
|
}; |
|
var fn2 = function () { |
|
calls++; |
|
}; |
|
|
|
emitter.on('test', fn); |
|
emitter.on('test', fn2); |
|
emitter.on('test', fn); |
|
emitter.off('test', fn); |
|
emitter.emit('test'); |
|
|
|
process.nextTick(function () { |
|
t.equal(calls, 1, 'callback was called'); |
|
t.end(); |
|
}); |
|
}); |
|
|
|
test('removes an event inside another event', function (t) { |
|
var emitter = new Emitter(); |
|
|
|
emitter.on('test', function () { |
|
t.equal(emitter.e.test.length, 1, 'event is still in list'); |
|
|
|
emitter.off('test'); |
|
|
|
t.notOk(emitter.e.test, 0, 'event is gone from list'); |
|
t.end(); |
|
}); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('event is emitted even if unsubscribed in the event callback', function (t) { |
|
var emitter = new Emitter(); |
|
var calls = 0; |
|
var fn = function () { |
|
calls += 1; |
|
emitter.off('test', fn); |
|
}; |
|
|
|
emitter.on('test', fn); |
|
|
|
emitter.on('test', function () { |
|
calls += 1; |
|
}); |
|
|
|
emitter.on('test', function () { |
|
calls += 1; |
|
}); |
|
|
|
process.nextTick(function () { |
|
t.equal(calls, 3, 'all callbacks were called'); |
|
t.end(); |
|
}); |
|
|
|
emitter.emit('test'); |
|
}); |
|
|
|
test('calling off before any events added does nothing', function (t) { |
|
var emitter = new Emitter(); |
|
emitter.off('test', function () {}); |
|
t.end(); |
|
}); |
|
|
|
test('emitting event that has not been subscribed to yet', function (t) { |
|
var emitter = new Emitter(); |
|
|
|
emitter.emit('some-event', 'some message'); |
|
t.end(); |
|
}); |
|
|
|
test('unsubscribes single event with name and callback which was subscribed once', function (t) { |
|
var emitter = new Emitter(); |
|
var fn = function () { |
|
t.fail('event not unsubscribed'); |
|
} |
|
|
|
emitter.once('test', fn); |
|
emitter.off('test', fn); |
|
emitter.emit('test'); |
|
|
|
t.end(); |
|
}); |
|
|
|
test('exports an instance', function (t) { |
|
t.ok(emitter, 'exports an instance') |
|
t.ok(emitter instanceof Emitter, 'an instance of the Emitter class'); |
|
t.end(); |
|
});
|
|
|