var Emitter = require('../index.js'); 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.ok(false, '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.ok(false, '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.ok(false, '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.ok(false, '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(); });