arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/ultron/test.js
server/node_modules/ultron/test.jsRaw
  1/* istanbul ignore next */
  2describe('Ultron', function () {
  3  'use strict';
  4
  5  var EventEmitter = require('eventemitter3')
  6    , EE = require('events').EventEmitter
  7    , assume = require('assume')
  8    , Ultron = require('./')
  9    , ultron
 10    , ee;
 11
 12  beforeEach(function () {
 13    ee = new EventEmitter();
 14    ultron = new Ultron(ee);
 15  });
 16
 17  afterEach(function () {
 18    ultron.destroy();
 19    ee.removeAllListeners();
 20  });
 21
 22  it('is exposed as a function', function () {
 23    assume(Ultron).is.a('function');
 24  });
 25
 26  it('can be initialized without the new keyword', function () {
 27    assume(Ultron(ee)).is.instanceOf(Ultron);
 28  });
 29
 30  it('assigns a unique id to every instance', function () {
 31    for (var i = 0; i < 100; i++) {
 32      assume(ultron.id).does.not.equal((new Ultron()).id);
 33    }
 34  });
 35
 36  it('allows removal through the event emitter', function () {
 37    function foo() {}
 38    function bar() {}
 39
 40    ultron.on('foo', foo);
 41    ultron.once('foo', bar);
 42
 43    assume(foo.__ultron).equals(ultron.id);
 44    assume(bar.__ultron).equals(ultron.id);
 45    assume(ee.listeners('foo').length).equals(2);
 46
 47    ee.removeListener('foo', foo);
 48    assume(ee.listeners('foo').length).equals(1);
 49
 50    ee.removeListener('foo', bar);
 51    assume(ee.listeners('foo').length).equals(0);
 52  });
 53
 54  describe('#on', function () {
 55    it('assigns a listener', function () {
 56      assume(ee.listeners('foo').length).equals(0);
 57
 58      function foo() {}
 59
 60      ultron.on('foo', foo);
 61      assume(ee.listeners('foo').length).equals(1);
 62      assume(ee.listeners('foo')[0]).equals(foo);
 63    });
 64
 65    it('tags the assigned function', function () {
 66      assume(ee.listeners('foo').length).equals(0);
 67
 68      ultron.on('foo', function () {});
 69      assume(ee.listeners('foo')[0].__ultron).equals(ultron.id);
 70    });
 71
 72    it('also passes in the context', function (next) {
 73      var context = 1313;
 74
 75      ultron.on('foo', function (a, b, c) {
 76        assume(a).equals('a');
 77        assume(b).equals('b');
 78        assume(c).equals('c');
 79
 80        assume(this).equals(context);
 81
 82        next();
 83      }, context);
 84
 85      ee.emit('foo', 'a', 'b', 'c');
 86    });
 87
 88    it('works with regular eventemitters as well', function (next) {
 89      var ee = new EE()
 90        , ultron = new Ultron(ee);
 91
 92      ultron.on('foo', function (a, b, c) {
 93        assume(a).equals('a');
 94        assume(b).equals('b');
 95        assume(c).equals('c');
 96
 97        next();
 98      });
 99
100      ee.emit('foo', 'a', 'b', 'c');
101    });
102  });
103
104  describe('#once', function () {
105    it('assigns a listener', function () {
106      assume(ee.listeners('foo').length).equals(0);
107
108      function foo() {}
109      ultron.once('foo', foo);
110      assume(ee.listeners('foo').length).equals(1);
111      assume(ee.listeners('foo')[0]).equals(foo);
112    });
113
114    it('tags the assigned function', function () {
115      assume(ee.listeners('foo').length).equals(0);
116
117      ultron.once('foo', function () {});
118      assume(ee.listeners('foo')[0].__ultron).equals(ultron.id);
119    });
120
121    it('also passes in the context', function (next) {
122      var context = 1313;
123
124      ultron.once('foo', function (a, b, c) {
125        assume(a).equals('a');
126        assume(b).equals('b');
127        assume(c).equals('c');
128
129        assume(this).equals(context);
130
131        next();
132      }, context);
133
134      ee.emit('foo', 'a', 'b', 'c');
135      ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute
136    });
137
138    it('works with regular eventemitters as well', function (next) {
139      var ee = new EE()
140        , ultron = new Ultron(ee);
141
142      ultron.once('foo', function (a, b, c) {
143        assume(a).equals('a');
144        assume(b).equals('b');
145        assume(c).equals('c');
146
147        next();
148      });
149
150      ee.emit('foo', 'a', 'b', 'c');
151      ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute
152    });
153  });
154
155  describe('#remove', function () {
156    it('removes only our assigned `on` listeners', function () {
157      function foo() {}
158      function bar() {}
159
160      ee.on('foo', foo);
161      ultron.on('foo', bar);
162      assume(ee.listeners('foo').length).equals(2);
163
164      ultron.remove('foo');
165      assume(ee.listeners('foo').length).equals(1);
166      assume(ee.listeners('foo')[0]).equals(foo);
167    });
168
169    it('removes our private __ultron references', function () {
170      function once() {}
171      function on() {}
172
173      assume('__ultron' in once).is.false();
174      assume('__ultron' in on).is.false();
175
176      ultron.on('foo', on);
177      ultron.once('bar', once);
178
179      assume('__ultron' in once).is.true();
180      assume('__ultron' in on).is.true();
181
182      ultron.remove('foo, bar');
183
184      assume('__ultron' in once).is.false();
185      assume('__ultron' in on).is.false();
186
187      ultron.destroy();
188
189      ee = new EE();
190      ultron = new Ultron(ee);
191
192      assume('__ultron' in once).is.false();
193      assume('__ultron' in on).is.false();
194
195      ultron.on('foo', on);
196      ultron.once('bar', once);
197
198      assume('__ultron' in once).is.true();
199      assume('__ultron' in on).is.true();
200
201      ultron.remove('foo, bar');
202
203      assume('__ultron' in once).is.false();
204      assume('__ultron' in on).is.false();
205    });
206
207    it('removes only our assigned `once` listeners', function () {
208      function foo() {}
209      function bar() {}
210
211      ee.once('foo', foo);
212      ultron.once('foo', bar);
213      assume(ee.listeners('foo').length).equals(2);
214
215      ultron.remove('foo');
216      assume(ee.listeners('foo').length).equals(1);
217      assume(ee.listeners('foo')[0]).equals(foo);
218    });
219
220    it('removes only our assigned `once` listeners from regular EE', function () {
221      var ee = new EE()
222        , ultron = new Ultron(ee);
223
224      function foo() {}
225      function bar() {}
226
227      ee.once('foo', foo);
228      ultron.once('foo', bar);
229      assume(ee.listeners('foo').length).equals(2);
230
231      ultron.remove('foo');
232      assume(ee.listeners('foo').length).equals(1);
233      assume(ee.listeners('foo')[0].listener).equals(foo);
234    });
235
236    it('removes all assigned events if called without args', function () {
237      function foo() {}
238      function bar() {}
239
240      ultron.on('foo', foo);
241      ultron.on('bar', bar);
242
243      assume(ee.listeners('foo').length).equals(1);
244      assume(ee.listeners('bar').length).equals(1);
245
246      ultron.remove();
247
248      assume(ee.listeners('foo').length).equals(0);
249      assume(ee.listeners('bar').length).equals(0);
250    });
251
252    it('removes multiple listeners based on args', function () {
253      function foo() {}
254      function bar() {}
255      function baz() {}
256
257      ultron.on('foo', foo);
258      ultron.on('bar', bar);
259      ultron.on('baz', baz);
260
261      assume(ee.listeners('foo').length).equals(1);
262      assume(ee.listeners('bar').length).equals(1);
263      assume(ee.listeners('baz').length).equals(1);
264
265      ultron.remove('foo', 'bar');
266
267      assume(ee.listeners('foo').length).equals(0);
268      assume(ee.listeners('bar').length).equals(0);
269      assume(ee.listeners('baz').length).equals(1);
270    });
271
272    it('removes multiple listeners if first arg is seperated string', function () {
273      function foo() {}
274      function bar() {}
275      function baz() {}
276
277      ultron.on('foo', foo);
278      ultron.on('bar', bar);
279      ultron.on('baz', baz);
280
281      assume(ee.listeners('foo').length).equals(1);
282      assume(ee.listeners('bar').length).equals(1);
283      assume(ee.listeners('baz').length).equals(1);
284
285      ultron.remove('foo, bar');
286
287      assume(ee.listeners('foo').length).equals(0);
288      assume(ee.listeners('bar').length).equals(0);
289      assume(ee.listeners('baz').length).equals(1);
290    });
291  });
292
293  describe('#destroy', function () {
294    it('removes all listeners', function () {
295      function foo() {}
296      function bar() {}
297      function baz() {}
298
299      ultron.on('foo', foo);
300      ultron.on('bar', bar);
301      ultron.on('baz', baz);
302
303      assume(ee.listeners('foo').length).equals(1);
304      assume(ee.listeners('bar').length).equals(1);
305      assume(ee.listeners('baz').length).equals(1);
306
307      ultron.destroy();
308
309      assume(ee.listeners('foo').length).equals(0);
310      assume(ee.listeners('bar').length).equals(0);
311      assume(ee.listeners('baz').length).equals(0);
312    });
313
314    it('removes the .ee reference', function () {
315      assume(ultron.ee).equals(ee);
316      ultron.destroy();
317      assume(ultron.ee).equals(null);
318    });
319
320    it('returns booleans for state indication', function () {
321      assume(ultron.destroy()).is.true();
322      assume(ultron.destroy()).is.false();
323      assume(ultron.destroy()).is.false();
324      assume(ultron.destroy()).is.false();
325    });
326  });
327});