File size: 1,931 Bytes
5fae594 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
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;
} |