/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/doc/example-jsunit/jsunit/app/jsUnitMockTimeout.js
http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs · JavaScript · 81 lines · 73 code · 6 blank · 2 comment · 6 complexity · 517d038631e068174f7fde40a45d37cd MD5 · raw file
- // Mock setTimeout, clearTimeout
- // Contributed by Pivotal Computer Systems, www.pivotalsf.com
-
- var Clock = {
- timeoutsMade: 0,
- scheduledFunctions: {},
- nowMillis: 0,
- reset: function() {
- this.scheduledFunctions = {};
- this.nowMillis = 0;
- this.timeoutsMade = 0;
- },
- tick: function(millis) {
- var oldMillis = this.nowMillis;
- var newMillis = oldMillis + millis;
- this.runFunctionsWithinRange(oldMillis, newMillis);
- this.nowMillis = newMillis;
- },
- runFunctionsWithinRange: function(oldMillis, nowMillis) {
- var scheduledFunc;
- var funcsToRun = [];
- for (var timeoutKey in this.scheduledFunctions) {
- scheduledFunc = this.scheduledFunctions[timeoutKey];
- if (scheduledFunc != undefined &&
- scheduledFunc.runAtMillis >= oldMillis &&
- scheduledFunc.runAtMillis <= nowMillis) {
- funcsToRun.push(scheduledFunc);
- this.scheduledFunctions[timeoutKey] = undefined;
- }
- }
-
- if (funcsToRun.length > 0) {
- funcsToRun.sort(function(a, b) {
- return a.runAtMillis - b.runAtMillis;
- });
- for (var i = 0; i < funcsToRun.length; ++i) {
- try {
- this.nowMillis = funcsToRun[i].runAtMillis;
- funcsToRun[i].funcToCall();
- if (funcsToRun[i].recurring) {
- Clock.scheduleFunction(funcsToRun[i].timeoutKey,
- funcsToRun[i].funcToCall,
- funcsToRun[i].millis,
- true);
- }
- } catch(e) {
- }
- }
- this.runFunctionsWithinRange(oldMillis, nowMillis);
- }
- },
- scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
- Clock.scheduledFunctions[timeoutKey] = {
- runAtMillis: Clock.nowMillis + millis,
- funcToCall: funcToCall,
- recurring: recurring,
- timeoutKey: timeoutKey,
- millis: millis
- };
- }
- };
-
- function setTimeout(funcToCall, millis) {
- Clock.timeoutsMade = Clock.timeoutsMade + 1;
- Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, false);
- return Clock.timeoutsMade;
- }
-
- function setInterval(funcToCall, millis) {
- Clock.timeoutsMade = Clock.timeoutsMade + 1;
- Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, true);
- return Clock.timeoutsMade;
- }
-
- function clearTimeout(timeoutKey) {
- Clock.scheduledFunctions[timeoutKey] = undefined;
- }
-
- function clearInterval(timeoutKey) {
- Clock.scheduledFunctions[timeoutKey] = undefined;
- }