UNPKG

event-emitters

Version:
72 lines 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _1 = require("."); describe('QueueingEventEmitter', function () { var createEventEmitter = function () { return new _1.QueueingEventEmitter(); }; var emitter = createEventEmitter(); beforeEach(function () { emitter = createEventEmitter(); }); it('queues messages when there are no subscribers and emits them to first subscriber', function () { var subscriber = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber); expect(subscriber.mock.calls).toEqual([['one'], ['two']]); }); it('stops queueing messages when there is a subscriber', function () { var subscriber = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber); expect(subscriber.mock.calls).toEqual([['one'], ['two']]); emitter.emit('three'); expect(subscriber.mock.calls).toEqual([['one'], ['two'], ['three']]); }); it('resumes queueing message when it loses all subscribers', function () { var subscriber1 = jest.fn(); var subscriber2 = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber1); emitter.subscribe(subscriber2); expect(subscriber1.mock.calls).toEqual([['one'], ['two']]); expect(subscriber2).toHaveBeenCalledTimes(0); emitter.emit('three'); expect(subscriber1.mock.calls).toEqual([['one'], ['two'], ['three']]); expect(subscriber2.mock.calls).toEqual([['three']]); emitter.unsubscribe(subscriber1); emitter.emit('four'); expect(subscriber1).toHaveBeenCalledTimes(3); expect(subscriber2.mock.calls).toEqual([['three'], ['four']]); emitter.unsubscribe(subscriber2); emitter.emit('five'); emitter.emit('six'); var subscriber3 = jest.fn(); emitter.subscribe(subscriber3); expect(subscriber3.mock.calls).toEqual([['five'], ['six']]); emitter.emit('seven'); expect(subscriber3.mock.calls).toEqual([['five'], ['six'], ['seven']]); }); it('re-throws the final error when the subscriber throws during queue drain', function () { var subscriber1 = jest .fn() .mockImplementationOnce(function () { throw new Error('1'); }) .mockImplementationOnce(function () { throw new Error('2'); }); emitter.emit('one'); emitter.emit('two'); emitter.emit('three'); expect(function () { emitter.subscribe(subscriber1); }).toThrow('2'); // make sure the queue is drained var subscriber2 = jest.fn(); emitter.subscribe(subscriber2); expect(subscriber2).toHaveBeenCalledTimes(0); }); }); //# sourceMappingURL=QueueingEventEmitter.spec.js.map