mirror of
https://github.com/chatopera/cosin.git
synced 2025-06-25 02:47:10 +08:00
82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
// find *Spec.js files in the src directory next to the corresponding source file
|
|
|
|
var test = window.test = {};
|
|
|
|
test.cb = (function( jasmine ) {
|
|
var callbacks = [];
|
|
|
|
return {
|
|
use: function() {
|
|
callbacks = [];
|
|
},
|
|
createSpy: function( name, arg, data, context ) {
|
|
return jasmine.createSpy( name ).and.callFake( function() {
|
|
callbacks.push( { cb: arguments[ arg || 0 ], data: data, context: context } );
|
|
});
|
|
},
|
|
execOne: function() {
|
|
var exec = callbacks.shift();
|
|
exec.cb.apply( exec.context, exec.data );
|
|
},
|
|
execAll: function() {
|
|
while( callbacks.length ) {
|
|
this.execOne();
|
|
}
|
|
}
|
|
};
|
|
})( this.jasmine );
|
|
|
|
|
|
test.clock = ( function() {
|
|
var id = 0, timers, saved;
|
|
var names = [ "setTimeout", "setInterval", "clearTimeout", "clearInterval" ];
|
|
var byNext = function( a, b ) { return a.next - b.next; };
|
|
var mocks = {
|
|
setTimeout: function( fn, t ) {
|
|
timers.push( { id: id, fn: fn, next: t, t: t, type: "t" } );
|
|
return id++;
|
|
},
|
|
clearTimeout: function( id ) {
|
|
timers = timers.filter( function( timer ) { return timer.id !== id; } );
|
|
},
|
|
setInterval: function( fn, t ) {
|
|
timers.push( { id: id, fn: fn, next: t, t: t, type: "i" } );
|
|
return id++;
|
|
},
|
|
clearInterval: function( id ) {
|
|
timers = timers.filter( function( timer ) { return timer.id !== id; } );
|
|
}
|
|
};
|
|
|
|
return {
|
|
steal: function() {
|
|
timers = [];
|
|
saved = {};
|
|
names.forEach( function( n ) {
|
|
saved[n] = window[n];
|
|
window[n] = mocks[n];
|
|
});
|
|
},
|
|
restore: function() {
|
|
names.forEach( function( n ) {
|
|
window[n] = saved[n];
|
|
});
|
|
timers = null;
|
|
saved = null;
|
|
},
|
|
tick: function() {
|
|
if( timers.length ) {
|
|
timers.sort( byNext );
|
|
var t0 = timers[0];
|
|
if( t0.type === "t" ) {
|
|
timers.shift();
|
|
} else {
|
|
t0.next += t0.t;
|
|
}
|
|
t0.fn();
|
|
}
|
|
}
|
|
};
|
|
|
|
})();
|