mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 23:34:47 -05:00
fix: async ops sanitizer false positives in timers (#4602)
This commit is contained in:
parent
efb022a50c
commit
3f489ae1ae
2 changed files with 10 additions and 6 deletions
|
@ -14,6 +14,12 @@ const GREEN_OK = green("ok");
|
||||||
const YELLOW_IGNORED = yellow("ignored");
|
const YELLOW_IGNORED = yellow("ignored");
|
||||||
const disabledConsole = new Console((): void => {});
|
const disabledConsole = new Console((): void => {});
|
||||||
|
|
||||||
|
function delay(n: number): Promise<void> {
|
||||||
|
return new Promise((resolve: () => void, _) => {
|
||||||
|
setTimeout(resolve, n);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function formatDuration(time = 0): string {
|
function formatDuration(time = 0): string {
|
||||||
const timeStr = `(${time}ms)`;
|
const timeStr = `(${time}ms)`;
|
||||||
return gray(italic(timeStr));
|
return gray(italic(timeStr));
|
||||||
|
@ -28,6 +34,10 @@ function assertOps(fn: () => void | Promise<void>): () => void | Promise<void> {
|
||||||
return async function asyncOpSanitizer(): Promise<void> {
|
return async function asyncOpSanitizer(): Promise<void> {
|
||||||
const pre = metrics();
|
const pre = metrics();
|
||||||
await fn();
|
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);
|
||||||
const post = metrics();
|
const post = metrics();
|
||||||
// We're checking diff because one might spawn HTTP server in the background
|
// We're checking diff because one might spawn HTTP server in the background
|
||||||
// that will be a pending async op before test starts.
|
// that will be a pending async op before test starts.
|
||||||
|
|
|
@ -130,9 +130,6 @@ unitTest(
|
||||||
assertEquals(c, 3);
|
assertEquals(c, 3);
|
||||||
|
|
||||||
clearInterval(t);
|
clearInterval(t);
|
||||||
// Defer for a moment to allow async op from `setInterval` to resolve;
|
|
||||||
// for more explanation see `FIXME` in `cli/js/timers.ts::setGlobalTimeout`
|
|
||||||
await defer(20);
|
|
||||||
await resolvable;
|
await resolvable;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -153,9 +150,6 @@ unitTest(
|
||||||
sig.dispose();
|
sig.dispose();
|
||||||
|
|
||||||
clearInterval(t);
|
clearInterval(t);
|
||||||
// Defer for a moment to allow async op from `setInterval` to resolve;
|
|
||||||
// for more explanation see `FIXME` in `cli/js/timers.ts::setGlobalTimeout`
|
|
||||||
await defer(20);
|
|
||||||
await resolvable;
|
await resolvable;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue