mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 23:48:05 +03:00
56 lines
1.8 KiB
CoffeeScript
56 lines
1.8 KiB
CoffeeScript
Subscriber = require 'subscriber'
|
|
EventEmitter = require 'event-emitter'
|
|
_ = require 'underscore'
|
|
{$$} = require 'space-pen'
|
|
|
|
describe "Subscriber", ->
|
|
[emitter1, emitter2, emitter3, event1Handler, event2Handler, event3Handler, subscriber] = []
|
|
|
|
class TestEventEmitter
|
|
_.extend TestEventEmitter.prototype, EventEmitter
|
|
|
|
class TestSubscriber
|
|
_.extend TestSubscriber.prototype, Subscriber
|
|
|
|
beforeEach ->
|
|
emitter1 = new TestEventEmitter
|
|
emitter2 = new TestEventEmitter
|
|
emitter3 = $$ ->
|
|
@div =>
|
|
@a()
|
|
@span()
|
|
subscriber = new TestSubscriber
|
|
event1Handler = jasmine.createSpy("event1Handler")
|
|
event2Handler = jasmine.createSpy("event2Handler")
|
|
event3Handler = jasmine.createSpy("event3Handler")
|
|
subscriber.subscribe emitter1, 'event1', event1Handler
|
|
subscriber.subscribe emitter2, 'event2', event2Handler
|
|
subscriber.subscribe emitter3, 'event3', 'a', event3Handler
|
|
|
|
it "subscribes to events on the specified object", ->
|
|
emitter1.trigger 'event1', 'foo'
|
|
expect(event1Handler).toHaveBeenCalledWith('foo')
|
|
|
|
emitter2.trigger 'event2', 'bar'
|
|
expect(event2Handler).toHaveBeenCalledWith('bar')
|
|
|
|
emitter3.find('span').trigger 'event3'
|
|
expect(event3Handler).not.toHaveBeenCalledWith()
|
|
|
|
emitter3.find('a').trigger 'event3'
|
|
expect(event3Handler).toHaveBeenCalled()
|
|
|
|
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')
|