import { QuickJSWorker } from "../dist"; describe("Global API compatibility", () => { let worker: QuickJSWorker; beforeEach(() => { worker = new QuickJSWorker(); }); afterEach(async () => { if (worker && !worker.isClosed()) await worker.close(); }); it("supports mirrored handle-style operations on runtime-created globals", async () => { await worker.eval(` globalThis.cfg = { nested: { answer: 41 }, mathTools: { add(a, b) { return a + b; } } }; globalThis.now = new Date(); `); await expect(worker.global.has("cfg.nested.answer")).resolves.toBe(true); await expect(worker.global.getType("cfg.nested.answer")).resolves.toMatchObject({ type: "number", callable: false }); await expect( worker.global.define("cfg.nested.answerDefined", { value: 77, configurable: true, enumerable: true, writable: true, }), ).resolves.toBe(true); await expect(worker.global.get("cfg.nested.answer")).resolves.toBe(41); await expect(worker.global.getOwnPropertyDescriptor("cfg.nested.answerDefined")).resolves.toMatchObject({ value: 77, configurable: true, enumerable: true, writable: true, }); await expect(worker.global.keys("cfg.nested")).resolves.toEqual(["answer", "answerDefined"]); await expect(worker.global.entries("cfg.nested")).resolves.toEqual([ ["answer", 41], ["answerDefined", 77], ]); await expect(worker.global.toJSON("cfg.nested")).resolves.toEqual({ answer: 41, answerDefined: 77, }); await expect(worker.global.isCallable("cfg.mathTools.add")).resolves.toBe(true); await expect(worker.global.call("cfg.mathTools.add", [20, 22])).resolves.toBe(42); await expect(worker.global.instanceOf("now", "Date")).resolves.toBe(true); const cloned = await worker.global.clone("cfg.nested"); await expect(cloned.get("answer")).resolves.toBe(41); await cloned.dispose(); await expect(worker.global.delete("cfg.nested.answer")).resolves.toBe(true); await expect(worker.global.has("cfg.nested.answer")).resolves.toBe(false); }); });