/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/doc/example-jsunit/jsunit/app/jsUnitMockTimeout.js
JavaScript | 81 lines | 73 code | 6 blank | 2 comment | 6 complexity | 517d038631e068174f7fde40a45d37cd MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
1// Mock setTimeout, clearTimeout 2// Contributed by Pivotal Computer Systems, www.pivotalsf.com 3 4var Clock = { 5 timeoutsMade: 0, 6 scheduledFunctions: {}, 7 nowMillis: 0, 8 reset: function() { 9 this.scheduledFunctions = {}; 10 this.nowMillis = 0; 11 this.timeoutsMade = 0; 12 }, 13 tick: function(millis) { 14 var oldMillis = this.nowMillis; 15 var newMillis = oldMillis + millis; 16 this.runFunctionsWithinRange(oldMillis, newMillis); 17 this.nowMillis = newMillis; 18 }, 19 runFunctionsWithinRange: function(oldMillis, nowMillis) { 20 var scheduledFunc; 21 var funcsToRun = []; 22 for (var timeoutKey in this.scheduledFunctions) { 23 scheduledFunc = this.scheduledFunctions[timeoutKey]; 24 if (scheduledFunc != undefined && 25 scheduledFunc.runAtMillis >= oldMillis && 26 scheduledFunc.runAtMillis <= nowMillis) { 27 funcsToRun.push(scheduledFunc); 28 this.scheduledFunctions[timeoutKey] = undefined; 29 } 30 } 31 32 if (funcsToRun.length > 0) { 33 funcsToRun.sort(function(a, b) { 34 return a.runAtMillis - b.runAtMillis; 35 }); 36 for (var i = 0; i < funcsToRun.length; ++i) { 37 try { 38 this.nowMillis = funcsToRun[i].runAtMillis; 39 funcsToRun[i].funcToCall(); 40 if (funcsToRun[i].recurring) { 41 Clock.scheduleFunction(funcsToRun[i].timeoutKey, 42 funcsToRun[i].funcToCall, 43 funcsToRun[i].millis, 44 true); 45 } 46 } catch(e) { 47 } 48 } 49 this.runFunctionsWithinRange(oldMillis, nowMillis); 50 } 51 }, 52 scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) { 53 Clock.scheduledFunctions[timeoutKey] = { 54 runAtMillis: Clock.nowMillis + millis, 55 funcToCall: funcToCall, 56 recurring: recurring, 57 timeoutKey: timeoutKey, 58 millis: millis 59 }; 60 } 61}; 62 63function setTimeout(funcToCall, millis) { 64 Clock.timeoutsMade = Clock.timeoutsMade + 1; 65 Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, false); 66 return Clock.timeoutsMade; 67} 68 69function setInterval(funcToCall, millis) { 70 Clock.timeoutsMade = Clock.timeoutsMade + 1; 71 Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, true); 72 return Clock.timeoutsMade; 73} 74 75function clearTimeout(timeoutKey) { 76 Clock.scheduledFunctions[timeoutKey] = undefined; 77} 78 79function clearInterval(timeoutKey) { 80 Clock.scheduledFunctions[timeoutKey] = undefined; 81}