/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

  1. // Mock setTimeout, clearTimeout
  2. // Contributed by Pivotal Computer Systems, www.pivotalsf.com
  3. var Clock = {
  4. timeoutsMade: 0,
  5. scheduledFunctions: {},
  6. nowMillis: 0,
  7. reset: function() {
  8. this.scheduledFunctions = {};
  9. this.nowMillis = 0;
  10. this.timeoutsMade = 0;
  11. },
  12. tick: function(millis) {
  13. var oldMillis = this.nowMillis;
  14. var newMillis = oldMillis + millis;
  15. this.runFunctionsWithinRange(oldMillis, newMillis);
  16. this.nowMillis = newMillis;
  17. },
  18. runFunctionsWithinRange: function(oldMillis, nowMillis) {
  19. var scheduledFunc;
  20. var funcsToRun = [];
  21. for (var timeoutKey in this.scheduledFunctions) {
  22. scheduledFunc = this.scheduledFunctions[timeoutKey];
  23. if (scheduledFunc != undefined &&
  24. scheduledFunc.runAtMillis >= oldMillis &&
  25. scheduledFunc.runAtMillis <= nowMillis) {
  26. funcsToRun.push(scheduledFunc);
  27. this.scheduledFunctions[timeoutKey] = undefined;
  28. }
  29. }
  30. if (funcsToRun.length > 0) {
  31. funcsToRun.sort(function(a, b) {
  32. return a.runAtMillis - b.runAtMillis;
  33. });
  34. for (var i = 0; i < funcsToRun.length; ++i) {
  35. try {
  36. this.nowMillis = funcsToRun[i].runAtMillis;
  37. funcsToRun[i].funcToCall();
  38. if (funcsToRun[i].recurring) {
  39. Clock.scheduleFunction(funcsToRun[i].timeoutKey,
  40. funcsToRun[i].funcToCall,
  41. funcsToRun[i].millis,
  42. true);
  43. }
  44. } catch(e) {
  45. }
  46. }
  47. this.runFunctionsWithinRange(oldMillis, nowMillis);
  48. }
  49. },
  50. scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
  51. Clock.scheduledFunctions[timeoutKey] = {
  52. runAtMillis: Clock.nowMillis + millis,
  53. funcToCall: funcToCall,
  54. recurring: recurring,
  55. timeoutKey: timeoutKey,
  56. millis: millis
  57. };
  58. }
  59. };
  60. function setTimeout(funcToCall, millis) {
  61. Clock.timeoutsMade = Clock.timeoutsMade + 1;
  62. Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, false);
  63. return Clock.timeoutsMade;
  64. }
  65. function setInterval(funcToCall, millis) {
  66. Clock.timeoutsMade = Clock.timeoutsMade + 1;
  67. Clock.scheduleFunction(Clock.timeoutsMade, funcToCall, millis, true);
  68. return Clock.timeoutsMade;
  69. }
  70. function clearTimeout(timeoutKey) {
  71. Clock.scheduledFunctions[timeoutKey] = undefined;
  72. }
  73. function clearInterval(timeoutKey) {
  74. Clock.scheduledFunctions[timeoutKey] = undefined;
  75. }