1
0
Fork 0
spacetac/src/common/Toggle.spec.ts

158 lines
4.5 KiB
TypeScript

module TK.Specs {
testing("Toggle", test => {
let on_calls = 0;
let off_calls = 0;
let clock = test.clock();
test.setup(function () {
on_calls = 0;
off_calls = 0;
});
function newToggle(): Toggle {
return new Toggle(() => on_calls++, () => off_calls++);
}
function checkstate(on: number, off: number) {
test.check.same(on_calls, on);
test.check.same(off_calls, off);
on_calls = 0;
off_calls = 0;
}
test.case("toggles on and off", check => {
let toggle = newToggle();
let client = toggle.manipulate("test");
checkstate(0, 0);
let result = client(true);
check.equals(result, true);
checkstate(1, 0);
result = client(true);
check.equals(result, true);
checkstate(0, 0);
clock.forward(10000000);
checkstate(0, 0);
result = client(false);
check.equals(result, false);
checkstate(0, 1);
result = client(false);
check.equals(result, false);
checkstate(0, 0);
clock.forward(10000000);
checkstate(0, 0);
result = client(true);
check.equals(result, true);
checkstate(1, 0);
let client2 = toggle.manipulate("test2");
result = client2(true);
check.equals(result, true);
checkstate(0, 0);
result = client(false);
check.equals(result, true);
checkstate(0, 0);
result = client2(false);
check.equals(result, false);
checkstate(0, 1);
})
test.case("switches between on and off", check => {
let toggle = newToggle();
let client = toggle.manipulate("test");
checkstate(0, 0);
let result = client();
check.equals(result, true);
checkstate(1, 0);
result = client();
check.equals(result, false);
checkstate(0, 1);
result = client();
check.equals(result, true);
checkstate(1, 0);
let client2 = toggle.manipulate("test2");
checkstate(0, 0);
result = client2();
check.equals(result, true);
checkstate(0, 0);
result = client();
check.equals(result, true);
checkstate(0, 0);
result = client2();
check.equals(result, false);
checkstate(0, 1);
})
test.case("toggles on for a given time", check => {
let toggle = newToggle();
let client = toggle.manipulate("test");
checkstate(0, 0);
let result = client(100);
check.equals(result, true);
checkstate(1, 0);
check.equals(toggle.isOn(), true);
checkstate(0, 0);
clock.forward(60);
check.equals(toggle.isOn(), true);
checkstate(0, 0);
clock.forward(60);
check.equals(toggle.isOn(), false);
checkstate(0, 1);
result = client(100);
check.equals(result, true);
checkstate(1, 0);
result = client(200);
check.equals(result, true);
checkstate(0, 0);
clock.forward(150);
check.equals(toggle.isOn(), true);
checkstate(0, 0);
clock.forward(150);
check.equals(toggle.isOn(), false);
checkstate(0, 1);
let client2 = toggle.manipulate("test2");
result = client(100);
check.equals(result, true);
checkstate(1, 0);
result = client2(200);
check.equals(result, true);
checkstate(0, 0);
clock.forward(150);
check.equals(toggle.isOn(), true);
checkstate(0, 0);
clock.forward(150);
check.equals(toggle.isOn(), false);
checkstate(0, 1);
result = client(100);
check.equals(result, true);
checkstate(1, 0);
result = client(true);
check.equals(result, true);
checkstate(0, 0);
check.equals(toggle.isOn(), true);
clock.forward(2000);
check.equals(toggle.isOn(), true);
checkstate(0, 0);
})
})
}