|
function spiedPubSub() { |
|
|
|
var realPubSub = pubSub(); |
|
|
|
function fakedPubSub( eventName ) { |
|
|
|
var single = realPubSub(eventName); |
|
|
|
if( !single.emit.isSpy ) { |
|
spyOn( single, 'emit' ).andCallThrough(); |
|
spyOn( single, 'on' ).andCallThrough(); |
|
spyOn( single, 'un' ).andCallThrough(); |
|
} |
|
|
|
return single; |
|
} |
|
|
|
fakedPubSub.emit = realPubSub.emit; |
|
fakedPubSub.on = realPubSub.on; |
|
fakedPubSub.un = realPubSub.un; |
|
|
|
return fakedPubSub; |
|
} |
|
|
|
function fakePubSub( eventNames ) { |
|
|
|
var eventTypes = {}; |
|
var eventsEmitted = []; |
|
var eventNamesEmitted = []; |
|
var eventTypesEmitted = {}; |
|
var callCount = {}; |
|
|
|
function record(eventName){ |
|
return function() { |
|
eventsEmitted.push({ |
|
type: eventName, |
|
args: arguments |
|
}); |
|
|
|
eventNamesEmitted.push(eventName); |
|
eventTypesEmitted[eventName].push(arguments); |
|
callCount[eventName]++; |
|
} |
|
} |
|
|
|
eventNames.forEach( function( eventName ){ |
|
eventTypes[eventName] = { |
|
'emit': jasmine.createSpy(eventName + '/emit') |
|
.andCallFake(record(eventName)) |
|
, 'on': jasmine.createSpy(eventName + '/on') |
|
, 'un': jasmine.createSpy(eventName + '/un') |
|
}; |
|
|
|
eventTypesEmitted[eventName] = []; |
|
callCount[eventName] = 0; |
|
}); |
|
|
|
function bus( eventName ) { |
|
|
|
return eventTypes[eventName]; |
|
} |
|
|
|
bus.events = eventsEmitted; |
|
bus.eventNames = eventNamesEmitted; |
|
bus.eventTypesEmitted = eventTypesEmitted; |
|
bus.callCount = callCount; |
|
|
|
|
|
['emit', 'on'].forEach(function(methodName){ |
|
|
|
bus[methodName] = varArgs(function(eventName, parameters){ |
|
apply( parameters, eventTypes[eventName][methodName]); |
|
}); |
|
}) |
|
|
|
return bus; |
|
} |