it('provides a way to register a listener that is invoked once', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); emitter.once('type1', callback); emitter.emit('type1', 'data'); emitter.emit('type1', 'data'); expect(callback.mock.calls.length).toBe(1); expect(callback.mock.calls[0][0]).toBe('data'); });
'the midst of an emitting cycle', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); emitter.addListener('type1', callback); callback.mockImplementation(function(data) { emitter.removeCurrentListener(); }); emitter.emit('type1', 'data'); emitter.emit('type1', 'data'); expect(callback.mock.calls.length).toBe(1); expect(callback.mock.calls[0][0]).toBe('data'); });
it('does not notify events of different types', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); emitter.addListener('type1', callback); emitter.emit('type2'); expect(callback.mock.calls.length).toBe(0); });
'registered for', function () { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); emitter.addListener('type1', callback); emitter.emit('type1', 'data'); expect(callback.mock.calls[0][0]).toBe('data'); });
it('does not notify the listener of events after it is removed', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); var subscription = emitter.addListener('type1', callback); subscription.remove(); emitter.emit('type1'); expect(callback.mock.calls.length).toBe(0); });
it('does not notify of events after all listeners are removed', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); emitter.addListener('type1', callback); emitter.removeAllListeners(); emitter.emit('type1'); expect(callback.mock.calls.length).toBe(0); });
'been removed', function() { var emitter = new BaseEventEmitter(); var callback = jest.genMockFunction(); var subscription = emitter.addListener('type1', function() {}); emitter.addListener('type1', callback); subscription.remove(); emitter.emit('type1', 'data'); expect(callback.mock.calls[0][0]).toBe('data'); });
'emitted, even if more were added', function() { var emitter = new BaseEventEmitter(); var callback1 = jest.genMockFunction(); var callback2 = jest.genMockFunction(); callback1.mockImplementation(function() { emitter.addListener('type1', callback2); }); emitter.addListener('type1', callback1); emitter.emit('type1'); expect(callback1.mock.calls.length).toBe(1); expect(callback2.mock.calls.length).toBe(0); });
it('allows for the passing of the context when handling events', function() { var emitter = new BaseEventEmitter(); var calledContext; var callback = jest.genMockFunction(); callback.mockImplementation(function() { calledContext = this; }); var context = {}; emitter.addListener('type1', callback, context); emitter.emit('type1', 'data'); expect(calledContext).toBe(context); expect(callback.mock.calls[0][0]).toBe('data'); });
'emitted but later removed during the event loop', function() { var emitter = new BaseEventEmitter(); var callback1 = jest.genMockFunction(); var callback2 = jest.genMockFunction(); callback1.mockImplementation(function() { subscription.remove(); }); emitter.addListener('type1', callback1); var subscription = emitter.addListener('type1', callback2); emitter.emit('type1'); expect(callback1.mock.calls.length).toBe(1); expect(callback2.mock.calls.length).toBe(0); });