| 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; |
| 3 | import { workerListeners } from "./app-memory-workers.mjs"; |
| 4 | |
| 5 | test("Worker inspection releases all remote references, including on failure", async () => { |
| 6 | for (const fail of [false, true]) { |
| 7 | const calls = []; |
| 8 | const cdp = { async send(method) { |
| 9 | calls.push(method); |
| 10 | if (method === "Runtime.evaluate") return { result: { objectId: "prototype" } }; |
| 11 | if (method === "Runtime.queryObjects") return { objects: { objectId: "workers" } }; |
| 12 | if (method === "Runtime.getProperties") return { result: [{ name: "0", value: { objectId: "worker" } }, { name: "length", value: { value: 1 } }] }; |
| 13 | if (method === "DOMDebugger.getEventListeners") { |
| 14 | if (fail) throw new Error("inspection failed"); |
| 15 | return { listeners: [{ type: "message" }, { type: "error" }, { type: "error" }] }; |
| 16 | } |
| 17 | } }; |
| 18 | if (fail) await assert.rejects(workerListeners(cdp), /inspection failed/); |
| 19 | else assert.deepEqual(await workerListeners(cdp), [["error", "error", "message"]]); |
| 20 | assert.equal(calls.at(-1), "Runtime.releaseObjectGroup"); |
| 21 | } |
| 22 | }); |
| 23 |