import assert from"node:assert/strict";import fs from"node:fs";import path from"node:path";import{Worker}from"node:worker_threads";import{pathToFileURL}from"node:url";const root=path.resolve(path.dirname(new URL(import.meta.url).pathname),".."),facadePath=path.resolve(process.argv[2]),build=path.resolve(process.argv[3]),f=await import(pathToFileURL(facadePath)),ep=path.join(path.dirname(facadePath),"facade-envelope.js"),e=await import(pathToFileURL(ep)),w=new Worker(new URL("./surface-python-facade-smoke-worker.mjs",import.meta.url),{workerData:{facadePath,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));assert.equal(ready.kind,"ready");const send=r=>{const q=wait(r.requestId);w.postMessage(r);return q};const success=await send(f.createSurfacePyRequest("sur-act03-e-success")),bad=await send(f.createSurfacePyRequest("sur-act03-e-error",{...f.SURFACE_PY_FIXTURE,sourceEntry:"src/Mod/Surface/App/Missing.cpp"})),dup=await send(f.createSurfacePyRequest("sur-act03-e-success")),cancel=f.createSurfacePyRequest("sur-act03-e-cancel"),cancelledP=send(cancel);w.postMessage(e.createCancel("sur-act03-cancel-msg",cancel.requestId));const cancelled=await cancelledP,after=await send(f.createSurfacePyRequest("sur-act03-e-after"));await w.terminate();assert.equal(success.kind,"result");assert.equal(success.result.apiCount,7);assert.equal(bad.error.code,"revision_mismatch");assert.equal(dup.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}));