PageRenderTime 18ms CodeModel.GetById 9ms app.highlight 6ms RepoModel.GetById 2ms app.codeStats 0ms

/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
 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}