1
0
mirror of https://github.com/mgerb/mywebsite synced 2026-01-12 02:42:48 +00:00
Files
mywebsite/mongoui/mongoui-master/node_modules/derby/test/EventDispatcher.mocha.coffee
2015-06-25 16:28:41 -05:00

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