Files
FreeCADWasmDev/tools/run_p6_part_python_facade_smoke.mjs
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

3 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
import crypto from"node:crypto";import fs from"node:fs";import path from"node:path";import{Worker}from"node:worker_threads";import{fileURLToPath,pathToFileURL}from"node:url";const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),".."),build=path.resolve(process.argv[2]||path.join(root,"freecad-source/build-web/configure/bin")),out=path.resolve(process.argv[3]||"/tmp/freecad-p6-part-python-facade"),recv=w=>new Promise((r,j)=>{const m=x=>{w.off("error",j);r(x)};w.once("message",m);w.once("error",j)});const w=new Worker(path.join(root,"tools/part-python-facade-smoke-worker.mjs"),{workerData:{buildDirectory:build,facadePath:pathToFileURL(path.join(out,"part-python-facade.js")).href,envelopePath:pathToFileURL(path.join(out,"facade-envelope.js")).href}}),f=await import(pathToFileURL(path.join(out,"part-python-facade.js"))),e=await import(pathToFileURL(path.join(out,"facade-envelope.js"))),ready=await recv(w),ok=f.createPartPythonRequest("part-python-success-1");w.postMessage(ok);const success=await recv(w);w.postMessage(f.createPartPythonRequest("part-python-error-1",{...f.PART_PYTHON_FIXTURE,sourceEntry:"src/Mod/Part/App/Missing.cpp"}));const err=await recv(w);w.postMessage(ok);const dup=await recv(w);const cancel=f.createPartPythonRequest("part-python-cancel-1"),cp=new Promise((r,j)=>{const m=x=>{if(x.requestId===cancel.requestId){w.off("error",j);r(x)}};w.on("message",m);w.once("error",j)});w.postMessage(cancel);w.postMessage(e.createCancel("part-python-cancel-control",cancel.requestId));const cancelled=await cp;await w.terminate();const trace=[ready,success,err,dup,cancelled],result={schema:"freecad-web-part-python-facade-smoke/v1",envelopeSchema:e.FACADE_SCHEMA,ready,success,expectedError:err,duplicate:dup,cancelled,traceSha256:crypto.createHash("sha256").update(JSON.stringify(trace)).digest("hex")};if(success.kind!=="result"||success.result.apiCount<10||err.error.code!=="revision_mismatch"||dup.error.code!=="duplicate_request"||cancelled.error.code!=="cancelled")throw new Error(JSON.stringify(result));const p=process.env.P6_FACADE_OUTPUT;if(p)fs.writeFileSync(p,`${JSON.stringify(result,null,2)}\n`);console.log(JSON.stringify(result));