123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- /* istanbul ignore next */
- describe('Ultron', function () {
- 'use strict';
- var EventEmitter = require('eventemitter3')
- , EE = require('events').EventEmitter
- , assume = require('assume')
- , Ultron = require('./')
- , ultron
- , ee;
- beforeEach(function () {
- ee = new EventEmitter();
- ultron = new Ultron(ee);
- });
- afterEach(function () {
- ultron.destroy();
- ee.removeAllListeners();
- });
- it('is exposed as a function', function () {
- assume(Ultron).is.a('function');
- });
- it('can be initialized without the new keyword', function () {
- assume(Ultron(ee)).is.instanceOf(Ultron);
- });
- it('assigns a unique id to every instance', function () {
- for (var i = 0; i < 100; i++) {
- assume(ultron.id).does.not.equal((new Ultron()).id);
- }
- });
- it('allows removal through the event emitter', function () {
- function foo() {}
- function bar() {}
- ultron.on('foo', foo);
- ultron.once('foo', bar);
- assume(foo.__ultron).equals(ultron.id);
- assume(bar.__ultron).equals(ultron.id);
- assume(ee.listeners('foo').length).equals(2);
- ee.removeListener('foo', foo);
- assume(ee.listeners('foo').length).equals(1);
- ee.removeListener('foo', bar);
- assume(ee.listeners('foo').length).equals(0);
- });
- describe('#on', function () {
- it('assigns a listener', function () {
- assume(ee.listeners('foo').length).equals(0);
- function foo() {}
- ultron.on('foo', foo);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('foo')[0]).equals(foo);
- });
- it('tags the assigned function', function () {
- assume(ee.listeners('foo').length).equals(0);
- ultron.on('foo', function () {});
- assume(ee.listeners('foo')[0].__ultron).equals(ultron.id);
- });
- it('also passes in the context', function (next) {
- var context = 1313;
- ultron.on('foo', function (a, b, c) {
- assume(a).equals('a');
- assume(b).equals('b');
- assume(c).equals('c');
- assume(this).equals(context);
- next();
- }, context);
- ee.emit('foo', 'a', 'b', 'c');
- });
- it('works with regular eventemitters as well', function (next) {
- var ee = new EE()
- , ultron = new Ultron(ee);
- ultron.on('foo', function (a, b, c) {
- assume(a).equals('a');
- assume(b).equals('b');
- assume(c).equals('c');
- next();
- });
- ee.emit('foo', 'a', 'b', 'c');
- });
- });
- describe('#once', function () {
- it('assigns a listener', function () {
- assume(ee.listeners('foo').length).equals(0);
- function foo() {}
- ultron.once('foo', foo);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('foo')[0]).equals(foo);
- });
- it('tags the assigned function', function () {
- assume(ee.listeners('foo').length).equals(0);
- ultron.once('foo', function () {});
- assume(ee.listeners('foo')[0].__ultron).equals(ultron.id);
- });
- it('also passes in the context', function (next) {
- var context = 1313;
- ultron.once('foo', function (a, b, c) {
- assume(a).equals('a');
- assume(b).equals('b');
- assume(c).equals('c');
- assume(this).equals(context);
- next();
- }, context);
- ee.emit('foo', 'a', 'b', 'c');
- ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute
- });
- it('works with regular eventemitters as well', function (next) {
- var ee = new EE()
- , ultron = new Ultron(ee);
- ultron.once('foo', function (a, b, c) {
- assume(a).equals('a');
- assume(b).equals('b');
- assume(c).equals('c');
- next();
- });
- ee.emit('foo', 'a', 'b', 'c');
- ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute
- });
- });
- describe('#remove', function () {
- it('removes only our assigned `on` listeners', function () {
- function foo() {}
- function bar() {}
- ee.on('foo', foo);
- ultron.on('foo', bar);
- assume(ee.listeners('foo').length).equals(2);
- ultron.remove('foo');
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('foo')[0]).equals(foo);
- });
- it('removes our private __ultron references', function () {
- function once() {}
- function on() {}
- assume('__ultron' in once).is.false();
- assume('__ultron' in on).is.false();
- ultron.on('foo', on);
- ultron.once('bar', once);
- assume('__ultron' in once).is.true();
- assume('__ultron' in on).is.true();
- ultron.remove('foo, bar');
- assume('__ultron' in once).is.false();
- assume('__ultron' in on).is.false();
- ultron.destroy();
- ee = new EE();
- ultron = new Ultron(ee);
- assume('__ultron' in once).is.false();
- assume('__ultron' in on).is.false();
- ultron.on('foo', on);
- ultron.once('bar', once);
- assume('__ultron' in once).is.true();
- assume('__ultron' in on).is.true();
- ultron.remove('foo, bar');
- assume('__ultron' in once).is.false();
- assume('__ultron' in on).is.false();
- });
- it('removes only our assigned `once` listeners', function () {
- function foo() {}
- function bar() {}
- ee.once('foo', foo);
- ultron.once('foo', bar);
- assume(ee.listeners('foo').length).equals(2);
- ultron.remove('foo');
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('foo')[0]).equals(foo);
- });
- it('removes only our assigned `once` listeners from regular EE', function () {
- var ee = new EE()
- , ultron = new Ultron(ee);
- function foo() {}
- function bar() {}
- ee.once('foo', foo);
- ultron.once('foo', bar);
- assume(ee.listeners('foo').length).equals(2);
- ultron.remove('foo');
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('foo')[0].listener).equals(foo);
- });
- it('removes all assigned events if called without args', function () {
- function foo() {}
- function bar() {}
- ultron.on('foo', foo);
- ultron.on('bar', bar);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('bar').length).equals(1);
- ultron.remove();
- assume(ee.listeners('foo').length).equals(0);
- assume(ee.listeners('bar').length).equals(0);
- });
- it('removes multiple listeners based on args', function () {
- function foo() {}
- function bar() {}
- function baz() {}
- ultron.on('foo', foo);
- ultron.on('bar', bar);
- ultron.on('baz', baz);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('bar').length).equals(1);
- assume(ee.listeners('baz').length).equals(1);
- ultron.remove('foo', 'bar');
- assume(ee.listeners('foo').length).equals(0);
- assume(ee.listeners('bar').length).equals(0);
- assume(ee.listeners('baz').length).equals(1);
- });
- it('removes multiple listeners if first arg is seperated string', function () {
- function foo() {}
- function bar() {}
- function baz() {}
- ultron.on('foo', foo);
- ultron.on('bar', bar);
- ultron.on('baz', baz);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('bar').length).equals(1);
- assume(ee.listeners('baz').length).equals(1);
- ultron.remove('foo, bar');
- assume(ee.listeners('foo').length).equals(0);
- assume(ee.listeners('bar').length).equals(0);
- assume(ee.listeners('baz').length).equals(1);
- });
- });
- describe('#destroy', function () {
- it('removes all listeners', function () {
- function foo() {}
- function bar() {}
- function baz() {}
- ultron.on('foo', foo);
- ultron.on('bar', bar);
- ultron.on('baz', baz);
- assume(ee.listeners('foo').length).equals(1);
- assume(ee.listeners('bar').length).equals(1);
- assume(ee.listeners('baz').length).equals(1);
- ultron.destroy();
- assume(ee.listeners('foo').length).equals(0);
- assume(ee.listeners('bar').length).equals(0);
- assume(ee.listeners('baz').length).equals(0);
- });
- it('removes the .ee reference', function () {
- assume(ultron.ee).equals(ee);
- ultron.destroy();
- assume(ultron.ee).equals(null);
- });
- it('returns booleans for state indication', function () {
- assume(ultron.destroy()).is.true();
- assume(ultron.destroy()).is.false();
- assume(ultron.destroy()).is.false();
- assume(ultron.destroy()).is.false();
- });
- });
- });
|