Skip to content

Commit

Permalink
fix(runtime/testing): false positive for timers when an error is thro…
Browse files Browse the repository at this point in the history
  • Loading branch information
caspervonb authored Feb 21, 2021
1 parent b47f9ce commit eefd522
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 5 deletions.
6 changes: 6 additions & 0 deletions cli/tests/integration_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
23 changes: 23 additions & 0 deletions cli/tests/test_finally_cleartimeout.out
Original file line number Diff line number Diff line change
@@ -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])

11 changes: 11 additions & 0 deletions cli/tests/test_finally_cleartimeout.ts
Original file line number Diff line number Diff line change
@@ -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 () {
});
13 changes: 8 additions & 5 deletions runtime/js/40_testing.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit eefd522

Please sign in to comment.