0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

fix(runtime/testing): false positive for timers when an error is thrown (#9553)

This commit is contained in:
Casper Beyer 2021-02-22 00:21:25 +08:00 committed by GitHub
parent b47f9cee8c
commit eefd522f04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 5 deletions

View file

@ -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,

View file

@ -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])

View file

@ -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 () {
});

View file

@ -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.