117 lines
3.1 KiB
TypeScript
117 lines
3.1 KiB
TypeScript
module TK.Specs {
|
|
testing("Timer", test => {
|
|
let clock = test.clock();
|
|
|
|
test.case("schedules and cancels future calls", check => {
|
|
let timer = new Timer();
|
|
|
|
let called: any[] = [];
|
|
let callback = (item: any) => called.push(item);
|
|
|
|
let s1 = timer.schedule(50, () => callback(1));
|
|
let s2 = timer.schedule(150, () => callback(2));
|
|
let s3 = timer.schedule(250, () => callback(3));
|
|
|
|
check.equals(called, []);
|
|
clock.forward(100);
|
|
check.equals(called, [1]);
|
|
timer.cancel(s1);
|
|
check.equals(called, [1]);
|
|
clock.forward(100);
|
|
check.equals(called, [1, 2]);
|
|
timer.cancel(s3);
|
|
clock.forward(100);
|
|
check.equals(called, [1, 2]);
|
|
clock.forward(1000);
|
|
check.equals(called, [1, 2]);
|
|
});
|
|
|
|
test.case("may cancel all scheduled", check => {
|
|
let timer = new Timer();
|
|
|
|
let called: any[] = [];
|
|
let callback = (item: any) => called.push(item);
|
|
|
|
timer.schedule(150, () => callback(1));
|
|
timer.schedule(50, () => callback(2));
|
|
timer.schedule(500, () => callback(3));
|
|
|
|
check.equals(called, []);
|
|
|
|
clock.forward(100);
|
|
|
|
check.equals(called, [2]);
|
|
|
|
clock.forward(100);
|
|
|
|
check.equals(called, [2, 1]);
|
|
|
|
timer.cancelAll();
|
|
|
|
clock.forward(1000);
|
|
|
|
check.equals(called, [2, 1]);
|
|
|
|
timer.schedule(50, () => callback(4));
|
|
timer.schedule(150, () => callback(5));
|
|
|
|
clock.forward(100);
|
|
|
|
check.equals(called, [2, 1, 4]);
|
|
|
|
timer.cancelAll(true);
|
|
|
|
clock.forward(100);
|
|
|
|
check.equals(called, [2, 1, 4]);
|
|
|
|
timer.schedule(50, () => callback(6));
|
|
|
|
clock.forward(100);
|
|
|
|
check.equals(called, [2, 1, 4]);
|
|
});
|
|
|
|
test.case("may switch to synchronous mode", check => {
|
|
let timer = new Timer(true);
|
|
let called: any[] = [];
|
|
let callback = (item: any) => called.push(item);
|
|
|
|
timer.schedule(50, () => callback(1));
|
|
check.equals(called, [1]);
|
|
});
|
|
|
|
test.acase("sleeps asynchronously", async check => {
|
|
let timer = new Timer();
|
|
let x = 1;
|
|
|
|
let promise = timer.sleep(500).then(() => {
|
|
x++;
|
|
});
|
|
check.equals(x, 1);
|
|
|
|
clock.forward(300);
|
|
check.equals(x, 1);
|
|
|
|
clock.forward(300);
|
|
check.equals(x, 1);
|
|
|
|
await promise;
|
|
check.equals(x, 2);
|
|
});
|
|
|
|
test.case("gives current time in milliseconds", check => {
|
|
check.equals(Timer.nowMs(), 0);
|
|
|
|
clock.forward(5);
|
|
|
|
check.equals(Timer.nowMs(), 5);
|
|
let t = Timer.nowMs();
|
|
|
|
clock.forward(10);
|
|
|
|
check.equals(Timer.nowMs(), 15);
|
|
check.equals(Timer.fromMs(t), 10);
|
|
});
|
|
});
|
|
} |