| describe('pub sub', function(){ | |
| it('is able to provide a single event pubsub', function(){ | |
| var events = pubSub(); | |
| expect(events('somethingHappening').on).not.toBeUndefined(); | |
| }); | |
| it('is provides the same single when asked twice', function(){ | |
| var events = pubSub(); | |
| expect( events('somethingHappening')) | |
| .toBe( events('somethingHappening')); | |
| }); | |
| it('numeric event names are treated as equal', function(){ | |
| var events = pubSub(); | |
| expect( events(1)) | |
| .toBe( events(1)); | |
| }); | |
| it('different numeric event names are treated as equal', function(){ | |
| var events = pubSub(); | |
| expect( events(1)) | |
| .not.toBe( events(2)); | |
| }); | |
| it('is provides different singles for different event names', function(){ | |
| var events = pubSub(); | |
| expect( events('somethingHappening')) | |
| .not.toBe( events('somethingElseHappening')); | |
| }); | |
| it('doesn\'t notify a newListener listener of its own addition', function() { | |
| var events = pubSub(), | |
| listenerListener = jasmine.createSpy('listenerListener'); | |
| events('newListener').on(listenerListener); | |
| expect(listenerListener).not.toHaveBeenCalled(); | |
| }); | |
| it('notifies of new listeners when added without an id', function() { | |
| var events = pubSub(), | |
| listenerListener = jasmine.createSpy('listenerListener'); | |
| events('newListener').on(listenerListener); | |
| events('foo').on(noop); | |
| expect(listenerListener).toHaveBeenCalledWith('foo', noop, noop); | |
| }); | |
| it('should which multiple events notify of the right one', function(){ | |
| var events = pubSub(), | |
| listenerA = jasmine.createSpy('listenerA'), | |
| listenerB = jasmine.createSpy('listenerB'); | |
| events('eventA').on(listenerA); | |
| events('eventB').on(listenerB); | |
| events('eventA').emit(); | |
| expect(listenerA).toHaveBeenCalled(); | |
| expect(listenerB).not.toHaveBeenCalled(); | |
| events('eventB').emit(); | |
| expect(listenerB).toHaveBeenCalled(); | |
| }); | |
| it('does not fire removeListener if nothing is removed', function() { | |
| var events = pubSub(), | |
| removeListenerListener = jasmine.createSpy('removeListenerListener'), | |
| fooListener = jasmine.createSpy('fooListener'); | |
| events('removeListener').on(removeListenerListener); | |
| events('foo').on(fooListener); | |
| events('foo').un('wrong_item'); | |
| expect(removeListenerListener).not.toHaveBeenCalled(); | |
| }); | |
| it('fires removeListener when a listener is removed', function(){ | |
| var events = pubSub(), | |
| removeListenerListener = jasmine.createSpy('removeListenerListener'); | |
| events('removeListener').on(removeListenerListener); | |
| events('foo').on(noop); | |
| events('foo').un(noop); | |
| expect(removeListenerListener).toHaveBeenCalledWith('foo', noop, noop); | |
| }) | |
| describe('short-cut methods', function(){ | |
| it('has .emit', function(){ | |
| var events = pubSub(), | |
| callback = jasmine.createSpy('something happening callback'); | |
| events('somethingHappened').on(callback); | |
| events.emit('somethingHappened', 'it was', 'definitely something'); | |
| expect(callback).toHaveBeenCalledWith('it was', 'definitely something'); | |
| }); | |
| it('has .on', function(){ | |
| var events = pubSub(), | |
| callback = jasmine.createSpy('something happening callback'); | |
| events.on('somethingHappened', callback); | |
| events('somethingHappened').emit('it was', 'definitely something'); | |
| expect(callback).toHaveBeenCalledWith('it was', 'definitely something'); | |
| }); | |
| it('has .un', function(){ | |
| var events = pubSub(), | |
| callback = jasmine.createSpy('something happening callback'); | |
| events('somethingHappened').on(callback); | |
| events.un('somethingHappened', callback); | |
| events('somethingHappened').emit('it was', 'definitely something'); | |
| expect(callback).not.toHaveBeenCalled(); | |
| }); | |
| it('has .un that works with listener id', function(){ | |
| var events = pubSub(), | |
| callback = jasmine.createSpy('something happening callback'); | |
| events('somethingHappened').on(callback, 'id'); | |
| events.un('somethingHappened', 'id'); | |
| events('somethingHappened').emit('it was', 'definitely something'); | |
| expect(callback).not.toHaveBeenCalled(); | |
| }); | |
| }); | |
| }); |