diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2018-09-16 13:35:16 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-09-16 13:35:16 -0700 |
commit | b0958073ba426db9636a98900a153af857e129c1 (patch) | |
tree | 0365012736578e8dd6ab7931a6ca542d88f5fb25 /js/timers_test.ts | |
parent | 00404865395696fa38e544621ad67a9c2da2f455 (diff) |
Remove remove_timer asserts (#760)
* Remove remove_timer asserts
* Add clearTimeout invalid id no-panic test
* Move timer test to its file AND some lint side-effects
Diffstat (limited to 'js/timers_test.ts')
-rw-r--r-- | js/timers_test.ts | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/js/timers_test.ts b/js/timers_test.ts new file mode 100644 index 000000000..af172e976 --- /dev/null +++ b/js/timers_test.ts @@ -0,0 +1,97 @@ +import { test, assertEqual } from "./test_util.ts"; + +function deferred() { + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { + promise, + resolve, + reject + }; +} + +function waitForMs(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +test(async function timeoutSuccess() { + const { promise, resolve } = deferred(); + let count = 0; + setTimeout(() => { + count++; + resolve(); + }, 500); + await promise; + // count should increment + assertEqual(count, 1); +}); + +test(async function timeoutCancelSuccess() { + let count = 0; + const id = setTimeout(() => { + count++; + }, 500); + // Cancelled, count should not increment + clearTimeout(id); + // Wait a bit longer than 500ms + await waitForMs(600); + assertEqual(count, 0); +}); + +test(async function timeoutCancelInvalidSilentFail() { + // Expect no panic + const { promise, resolve } = deferred(); + let count = 0; + const id = setTimeout(() => { + count++; + // Should have no effect + clearTimeout(id); + resolve(); + }, 500); + await promise; + assertEqual(count, 1); + + // Should silently fail (no panic) + clearTimeout(2147483647); +}); + +test(async function intervalSuccess() { + const { promise, resolve } = deferred(); + let count = 0; + const id = setInterval(() => { + count++; + if (count === 2) { + // TODO: clearInterval(id) here alone seems not working + // causing unit_tests.ts to block forever + // Requires further investigation... + clearInterval(id); + resolve(); + } + }, 200); + await promise; + // Clear interval + clearInterval(id); + // count should increment twice + assertEqual(count, 2); +}); + +test(async function intervalCancelSuccess() { + let count = 0; + const id = setInterval(() => { + count++; + }, 500); + // Cancelled, count should not increment + clearInterval(id); + // Wait a bit longer than 500ms + await waitForMs(600); + assertEqual(count, 0); +}); + +test(async function intervalCancelInvalidSilentFail() { + // Should silently fail (no panic) + clearInterval(2147483647); +}); |