summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/integration_tests.rs6
-rw-r--r--cli/tests/test_finally_cleartimeout.out23
-rw-r--r--cli/tests/test_finally_cleartimeout.ts11
-rw-r--r--runtime/js/40_testing.js13
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.