mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 16:19:12 -05:00
9a10668694
Although not easy to replicate in the wild, the `deno test` op sanitizer can fail when there are intervals that started before a test runs, since the op sanitizer can end up running in the time between the timer op for an interval's run resolves and the op for the next run starts. This change fixes that by adding a new macrotask callback that will run after the timer macrotask queue has drained. This ensures that there is a timer op if there are any timers which are unresolved by the time the op sanitizer runs.
22 lines
497 B
TypeScript
22 lines
497 B
TypeScript
let intervalHandle: number;
|
|
let firstIntervalPromise: Promise<void>;
|
|
|
|
addEventListener("load", () => {
|
|
firstIntervalPromise = new Promise((resolve) => {
|
|
let firstIntervalCalled = false;
|
|
intervalHandle = setInterval(() => {
|
|
if (!firstIntervalCalled) {
|
|
resolve();
|
|
firstIntervalCalled = true;
|
|
}
|
|
}, 5);
|
|
});
|
|
});
|
|
|
|
addEventListener("unload", () => {
|
|
clearInterval(intervalHandle);
|
|
});
|
|
|
|
Deno.test("wait", async function () {
|
|
await firstIntervalPromise;
|
|
});
|