aboutsummaryrefslogtreecommitdiff
path: root/node_modules/ultron/test.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-03 01:33:53 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-03 01:33:53 +0100
commitd1291f67551c58168af43698a359cb5ddfd266b0 (patch)
tree55a13ed29fe1915e3f42f1b1b7038dafa2e975a7 /node_modules/ultron/test.js
parentd0a0695fb5d34996850723f7d4b1b59c3df909c2 (diff)
node_modules
Diffstat (limited to 'node_modules/ultron/test.js')
-rw-r--r--node_modules/ultron/test.js327
1 files changed, 327 insertions, 0 deletions
diff --git a/node_modules/ultron/test.js b/node_modules/ultron/test.js
new file mode 100644
index 000000000..1fd4f1bb5
--- /dev/null
+++ b/node_modules/ultron/test.js
@@ -0,0 +1,327 @@
+/* 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();
+ });
+ });
+});