summaryrefslogtreecommitdiff
path: root/js/timers_test.ts
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2018-09-16 13:35:16 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-09-16 13:35:16 -0700
commitb0958073ba426db9636a98900a153af857e129c1 (patch)
tree0365012736578e8dd6ab7931a6ca542d88f5fb25 /js/timers_test.ts
parent00404865395696fa38e544621ad67a9c2da2f455 (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.ts97
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);
+});