Files
FreeCADWasmDev/tools/run_web_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

2 lines
1.6 KiB
JavaScript

import assert from"node:assert/strict";import path from"node:path";import{Worker}from"node:worker_threads";import{pathToFileURL}from"node:url";const fp=path.resolve(process.argv[2]),build=path.resolve(process.argv[3]),f=await import(pathToFileURL(fp)),ep=path.join(path.dirname(fp),"facade-envelope.js"),e=await import(pathToFileURL(ep)),w=new Worker(new URL("./web-facade-smoke-worker.mjs",import.meta.url),{workerData:{facadePath:fp,envelopePath:ep,build}}),p=new Map,events=[];w.on("message",m=>{events.push(m.kind==="ready"?"ready":`${m.kind}:${m.requestId}`);if(m.requestId&&p.has(m.requestId)){p.get(m.requestId)(m);p.delete(m.requestId)}});const wait=id=>new Promise(r=>p.set(id,r)),ready=await new Promise(r=>w.once("message",r)),send=r=>{const q=wait(r.requestId);w.postMessage(r);return q};assert.equal(ready.kind,"ready");const success=await send(f.createWebRequest("web-act-e-success")),bad=await send(f.createWebRequest("web-act-e-error",{...f.WEB_FIXTURE,sourceEntry:"src/Mod/Web/App/Missing.cpp"})),duplicate=await send(f.createWebRequest("web-act-e-success")),cancel=f.createWebRequest("web-act-e-cancel"),cancelledP=send(cancel);w.postMessage(e.createCancel("web-act-e-cancel-message",cancel.requestId));const cancelled=await cancelledP,after=await send(f.createWebRequest("web-act-e-after"));await w.terminate();assert.equal(success.kind,"result");assert.equal(success.result.apiCount,3);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}));