mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-12 18:52:50 +00:00
100 lines
3.3 KiB
CoffeeScript
100 lines
3.3 KiB
CoffeeScript
{expect, calls} = require 'racer/test/util'
|
|
EventDispatcher = require '../lib/EventDispatcher'
|
|
|
|
describe 'EventDispatcher', ->
|
|
|
|
# Names must be a valid object key
|
|
name1 = 'test event'
|
|
name2 = 89
|
|
|
|
# Listeners can be anything that is representable in plain JSON
|
|
listener1 = [1, 2, 'qu"a"il', "'", {arr: ['x', 'y']}]
|
|
listener2 = 0
|
|
listener3 = 'stuff'
|
|
listener4 = true
|
|
|
|
# The second and third parameters sent to trigger are simply passed through
|
|
# to the callback function. They can be anything.
|
|
value1 = 'test value'
|
|
options1 = {option: 4}
|
|
|
|
it 'should work without callbacks', ->
|
|
dispatcher = new EventDispatcher
|
|
dispatcher.bind name1, listener1
|
|
dispatcher.trigger name1, value1, options1
|
|
|
|
it 'calls onTrigger', calls 2, (done) ->
|
|
dispatcher = new EventDispatcher
|
|
onTrigger: (name, listener, value, options) ->
|
|
expect(listener).to.eql listener1
|
|
expect(value).to.equal value1
|
|
expect(options).to.equal options1
|
|
done()
|
|
dispatcher.bind name1, listener1
|
|
dispatcher.trigger name1, value1, options1
|
|
dispatcher.trigger name1, value1, options1
|
|
|
|
it 'calls onTrigger without listener', calls 2, (done) ->
|
|
dispatcher = new EventDispatcher
|
|
onTrigger: (name, listener, value, options) ->
|
|
expect(listener).to.equal undefined
|
|
expect(value).to.equal value1
|
|
expect(options).to.equal options1
|
|
done()
|
|
dispatcher.bind name1
|
|
dispatcher.trigger name1, value1, options1
|
|
dispatcher.trigger name1, value1, options1
|
|
|
|
it 'calls onTrigger for multiple listeners', calls 1, (done) ->
|
|
counts = {all: 0}
|
|
beforeExit = ->
|
|
expect(counts[listener2]).to.equal 1
|
|
expect(counts[listener3]).to.equal 3
|
|
expect(counts[listener4]).to.equal 1
|
|
done()
|
|
|
|
dispatcher = new EventDispatcher
|
|
onTrigger: (name, listener, value, options) ->
|
|
counts[listener] = (counts[listener] || 0) + 1
|
|
expect(value).to.equal value1
|
|
expect(options).to.equal options1
|
|
beforeExit() if ++counts.all == 5
|
|
|
|
dispatcher.bind name1, listener2
|
|
dispatcher.bind name1, listener3
|
|
dispatcher.bind name1, listener4
|
|
dispatcher.bind name2, listener3
|
|
dispatcher.trigger name1, value1, options1
|
|
dispatcher.trigger name2, value1, options1
|
|
dispatcher.trigger name2, value1, options1
|
|
|
|
it 'test EventDispatcher remove listener after failed trigger', calls 1, (done) ->
|
|
dispatcher = new EventDispatcher
|
|
onTrigger: ->
|
|
done()
|
|
return false
|
|
dispatcher.bind name1
|
|
dispatcher.trigger name1
|
|
dispatcher.trigger name1
|
|
|
|
it 'test EventDispatcher do not trigger twice after double bind', calls 1, (done) ->
|
|
dispatcher = new EventDispatcher onTrigger: done
|
|
dispatcher.bind name1, listener1
|
|
dispatcher.bind name1, listener1
|
|
dispatcher.trigger name1
|
|
|
|
it 'test EventDispatcher bind callback', calls 3, (done) ->
|
|
dispatcher = new EventDispatcher
|
|
onTrigger: (name, listener, value, options) ->
|
|
expect(listener).to.eql listener1
|
|
expect(value).to.equal value1
|
|
expect(options).to.equal options1
|
|
done()
|
|
onBind: (name, listener) ->
|
|
expect(name).to.equal name1
|
|
expect(listener).to.eql listener1
|
|
done()
|
|
dispatcher.bind name1, listener1
|
|
dispatcher.trigger name1, value1, options1
|
|
dispatcher.trigger name1, value1, options1
|