import assert from "node:assert/strict"; import path from "node:path"; import { Worker } from "node:worker_threads"; import { pathToFileURL } from "node:url"; const facadePath = path.resolve(process.argv[2]); const build = path.resolve(process.argv[3]); const facade = await import(pathToFileURL(facadePath)); const envelope = await import(pathToFileURL(path.join(path.dirname(facadePath), "facade-envelope.js"))); const worker = new Worker(new URL("./techdraw-native-facade-smoke-worker.mjs", import.meta.url), { workerData: { facadePath, envelopePath: path.join(path.dirname(facadePath), "facade-envelope.js"), build } }); const pending = new Map(); const events = []; worker.on("message", (message) => { events.push(message.kind === "ready" ? "ready" : `${message.kind}:${message.requestId}`); if (message.requestId && pending.has(message.requestId)) { pending.get(message.requestId)(message); pending.delete(message.requestId); } }); const ready = await new Promise((resolve) => worker.once("message", resolve)); assert.equal(ready.kind, "ready"); const send = (request) => { const promise = new Promise((resolve) => pending.set(request.requestId, resolve)); worker.postMessage(request); return promise; }; const success = await send(facade.createTechDrawNativeRequest("td-native-act-e-success")); const bad = await send(facade.createTechDrawNativeRequest("td-native-act-e-error", { ...facade.TECHDRAW_NATIVE_FIXTURE, sourceEntry: "src/Mod/TechDraw/App/Missing.cpp" })); const duplicate = await send(facade.createTechDrawNativeRequest("td-native-act-e-success")); const cancelRequest = facade.createTechDrawNativeRequest("td-native-act-e-cancel"); const cancelledPromise = send(cancelRequest); worker.postMessage(envelope.createCancel("td-native-cancel-message", cancelRequest.requestId)); const cancelled = await cancelledPromise; const after = await send(facade.createTechDrawNativeRequest("td-native-act-e-after")); await worker.terminate(); assert.equal(success.kind, "result"); assert.equal(success.result.svgBytes, 301); assert.equal(success.result.dxfBytes, 324); assert.equal(bad.error.code, "revision_mismatch"); assert.equal(duplicate.error.code, "duplicate_request"); assert.equal(cancelled.error.code, "cancelled"); assert.deepEqual(after.result, success.result); console.log(JSON.stringify({ result: "pass", events, responses: 5, svgBytes: success.result.svgBytes, dxfBytes: success.result.dxfBytes, apiCount: success.result.apiCount, registeredTypes: success.result.registeredTypes, resourcesReleased: success.result.resourcesReleased }));