import { QuickJSWorker } from "../dist"; describe("Timer compatibility", () => { let worker: QuickJSWorker; beforeEach(() => { worker = new QuickJSWorker(); }); afterEach(async () => { if (worker && !worker.isClosed()) await worker.close(); }); it("supports setTimeout inside eval-returned promises", async () => { await expect(worker.eval(` new Promise((resolve) => { setTimeout(() => resolve(42), 10); }) `)).resolves.toBe(42); }, 20_000); it("passes trailing arguments to setTimeout callbacks", async () => { await expect(worker.eval(` new Promise((resolve) => { setTimeout((a, b) => resolve(a + b), 10, 20, 22); }) `)).resolves.toBe(42); }, 20_000); it("supports clearTimeout", async () => { await expect(worker.eval(` new Promise((resolve) => { let fired = false; const id = setTimeout(() => { fired = true; }, 5); clearTimeout(id); setTimeout(() => resolve(fired), 20); }) `)).resolves.toBe(false); }, 20_000); it("supports setInterval and clearInterval", async () => { await expect(worker.eval(` new Promise((resolve) => { let count = 0; const id = setInterval(() => { count += 1; if (count === 3) { clearInterval(id); resolve(count); } }, 5); }) `)).resolves.toBe(3); }, 20_000); });