Files
atom/spec/stdlib/subscriber-spec.coffee
Nathan Sobo 444325893b Allow subscribers to unsubscribe on a per-object basis
This makes use of the new ES6 WeakMap feature, which allows for a hash
map that's keyed by object.
2013-04-22 11:34:03 -06:00

43 lines
1.4 KiB
CoffeeScript

Subscriber = require 'subscriber'
EventEmitter = require 'event-emitter'
_ = require 'underscore'
describe "Subscriber", ->
[emitter1, emitter2, event1Handler, event2Handler, subscriber] = []
class TestEventEmitter
_.extend TestEventEmitter.prototype, EventEmitter
class TestSubscriber
_.extend TestSubscriber.prototype, Subscriber
beforeEach ->
emitter1 = new TestEventEmitter
emitter2 = new TestEventEmitter
subscriber = new TestSubscriber
event1Handler = jasmine.createSpy("event1Handler")
event2Handler = jasmine.createSpy("event2Handler")
subscriber.subscribe emitter1, 'event1', event1Handler
subscriber.subscribe emitter2, 'event2', event2Handler
it "subscribes to events on the specified object", ->
emitter1.trigger 'event1', 'foo'
expect(event1Handler).toHaveBeenCalledWith('foo')
emitter2.trigger 'event2', 'bar'
expect(event2Handler).toHaveBeenCalledWith('bar')
it "allows an object to unsubscribe en-masse", ->
subscriber.unsubscribe()
emitter1.trigger 'event1', 'foo'
emitter2.trigger 'event2', 'bar'
expect(event1Handler).not.toHaveBeenCalled()
expect(event2Handler).not.toHaveBeenCalled()
it "allows an object to unsubscribe from a specific object", ->
subscriber.unsubscribe(emitter1)
emitter1.trigger 'event1', 'foo'
emitter2.trigger 'event2', 'bar'
expect(event1Handler).not.toHaveBeenCalled()
expect(event2Handler).toHaveBeenCalledWith('bar')