mss-sdk
Version:
MSS SDK for JavaScript
119 lines (94 loc) • 3.87 kB
text/coffeescript
helpers = require('./helpers')
AWS = helpers.AWS
describe 'AWS.SequentialExecutor', ->
beforeEach -> = new AWS.SequentialExecutor()
describe 'addListeners', ->
it 'accepts a hash of events and functions', ->
triggers = [0, 0, 0]
listeners =
eventName:
ConstantName1: -> triggers[0] = 1
ConstantName2: -> triggers[1] = 1
otherEventName:
ConstantName3: -> triggers[2] = 1
.addListeners(listeners)
expect(triggers).to.eql([0, 0, 0])
.emit('eventName')
expect(triggers).to.eql([1, 1, 0])
.emit('otherEventName')
expect(triggers).to.eql([1, 1, 1])
it 'accepts a SequentialExecutor object', ->
triggers = [0, 0, 0]
listeners = new AWS.SequentialExecutor()
listeners.on 'eventName', -> triggers[0] = 1
listeners.on 'eventName', -> triggers[1] = 1
listeners.on 'otherEventName', -> triggers[2] = 1
.addListeners(listeners)
expect(triggers).to.eql([0, 0, 0])
.emit('eventName')
expect(triggers).to.eql([1, 1, 0])
.emit('otherEventName')
expect(triggers).to.eql([1, 1, 1])
describe 'addNamedListener', ->
it 'defines a constant with the callback', ->
spy = helpers.createSpy()
.addNamedListener('CONSTNAME', 'eventName', spy)
expect(.CONSTNAME).to.equal(spy)
# also verify that event is hooked up like normal
.emit('eventName', ['argument'])
expect(spy.calls[0].arguments).to.eql(['argument'])
it 'is chainable', ->
r = .addNamedListener('CONSTNAME', 'eventName', ->)
expect(r).to.equal()
describe 'addNamedListeners', ->
it 'is chainable', ->
r = .addNamedListeners(->)
expect(r).to.equal()
it 'provides an add function in callback to call addNamedListener', ->
spy1 = helpers.createSpy(); spy2 = helpers.createSpy()
.addNamedListeners (add) ->
add('CONST1', 'event1', spy1)
add('CONST2', 'event2', spy2)
expect(.CONST1).to.equal(spy1)
expect(.CONST2).to.equal(spy2)
.emit('event1', ['arg1'])
.emit('event2', ['arg2'])
expect(spy1.calls[0].arguments).to.eql(['arg1'])
expect(spy2.calls[0].arguments).to.eql(['arg2'])
describe 'emit', ->
it 'emits to all listeners', ->
list = []
.on 'event1', -> list.push(1)
.on 'event1', -> list.push(2)
.on 'event1', -> list.push(3)
.emit('event1')
expect(list).to.eql([1,2,3])
it 'stops emitting if error is returned', ->
list = []
.on 'event1', -> list.push(1)
.on 'event1', -> list.push(2); throw new Error('error')
.on 'event1', -> list.push(3)
expect(=> .emit 'event1').to.throw('error')
expect(list).to.eql([1,2])
it 'stops emitting if error is returned (async)', ->
list = []
.on 'event1', -> list.push(1)
.onAsync 'event1', (err, done) -> list.push(2); done('ERROR')
.on 'event1', -> list.push(3)
.emit 'event1', [null], (err) ->
expect(err).to.equal('ERROR')
expect(list).to.eql([1,2])
if AWS.util.isNode()
describe 'domain support', ->
domain = null
beforeEach -> domain = require('domain').create()
afterEach -> domain.dispose()
it 'supports domains', ->
helpers.mockHttpResponse 200, {}, 'Success!'
thrown = null
domain.on 'error', (err) -> thrown = err
domain.run ->
service = new helpers.MockService()
service.makeRequest 'operationName', ->
invalidCode
expect(thrown.name).to.equal('ReferenceError')