diff options
-rw-r--r-- | cli/tests/integration_tests.rs | 6 | ||||
-rw-r--r-- | cli/tests/test_finally_cleartimeout.out | 23 | ||||
-rw-r--r-- | cli/tests/test_finally_cleartimeout.ts | 11 | ||||
-rw-r--r-- | runtime/js/40_testing.js | 13 |
4 files changed, 48 insertions, 5 deletions
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index cd90315b3..bb65f24fa 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -2402,6 +2402,12 @@ mod integration { output: "deno_test.out", }); + itest!(deno_test_finally_cleartimeout { + args: "test test_finally_cleartimeout.ts", + exit_code: 1, + output: "test_finally_cleartimeout.out", + }); + itest!(deno_test_unresolved_promise { args: "test test_unresolved_promise.js", exit_code: 1, diff --git a/cli/tests/test_finally_cleartimeout.out b/cli/tests/test_finally_cleartimeout.out new file mode 100644 index 000000000..c8f412bf0 --- /dev/null +++ b/cli/tests/test_finally_cleartimeout.out @@ -0,0 +1,23 @@ +Check [WILDCARD]/$deno$test.ts +running 2 tests +test error ... FAILED ([WILDCARD]) +test success ... ok ([WILDCARD]) + +failures: + +error +Error: fail + at [WILDCARD]/test_finally_cleartimeout.ts:4:11 + at asyncOpSanitizer (deno:runtime/js/40_testing.js:38:15) + at Object.resourceSanitizer [as fn] (deno:runtime/js/40_testing.js:74:13) + at TestRunner.[Symbol.asyncIterator] (deno:runtime/js/40_testing.js:249:24) + at AsyncGenerator.next (<anonymous>) + at Object.runTests (deno:runtime/js/40_testing.js:326:22) + at async [WILDCARD]/$deno$test.ts:3:1 + +failures: + + error + +test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD]) + diff --git a/cli/tests/test_finally_cleartimeout.ts b/cli/tests/test_finally_cleartimeout.ts new file mode 100644 index 000000000..dcc0a4d64 --- /dev/null +++ b/cli/tests/test_finally_cleartimeout.ts @@ -0,0 +1,11 @@ +Deno.test("error", function () { + const timer = setTimeout(() => null, 10000); + try { + throw new Error("fail"); + } finally { + clearTimeout(timer); + } +}); + +Deno.test("success", function () { +}); diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js index 15545fc49..2258dc7b6 100644 --- a/runtime/js/40_testing.js +++ b/runtime/js/40_testing.js @@ -34,11 +34,14 @@ function assertOps(fn) { return async function asyncOpSanitizer() { const pre = metrics(); - await fn(); - // Defer until next event loop turn - that way timeouts and intervals - // cleared can actually be removed from resource table, otherwise - // false positives may occur (https://github.com/denoland/deno/issues/4591) - await delay(0); + try { + await fn(); + } finally { + // Defer until next event loop turn - that way timeouts and intervals + // cleared can actually be removed from resource table, otherwise + // false positives may occur (https://github.com/denoland/deno/issues/4591) + await delay(0); + } const post = metrics(); // We're checking diff because one might spawn HTTP server in the background // that will be a pending async op before test starts. |