157 lines
3.5 KiB
TypeScript
157 lines
3.5 KiB
TypeScript
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);
|
|
})
|
|
})
|