3 lines
2.5 KiB
JavaScript
3 lines
2.5 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict";import fs from "node:fs";import path from "node:path";import{createRequire}from"node:module";import{pathToFileURL}from"node:url";const root=path.resolve(path.dirname(new URL(import.meta.url).pathname),"..");const fp=process.argv[2];const f=await import(pathToFileURL(path.resolve(fp)));const e=await import(pathToFileURL(path.join(path.dirname(path.resolve(fp)),"facade-envelope.js")));const build=path.resolve(process.argv[3]??path.join(root,"freecad-source/build-web/configure/bin"));globalThis.__dirname=`${build}${path.sep}`;globalThis.require=createRequire(import.meta.url);const l=await import(pathToFileURL(path.join(build,"FreeCADWebSketcherProbe.js")));const k=await l.default({wasmBinary:fs.readFileSync(path.join(build,"FreeCADWebSketcherProbe.wasm"))});const q=new e.FacadeSerialQueue();let active=0,maxActive=0;async function d(r,source=k){return q.dispatch(r,async(p,sig)=>{active++;maxActive=Math.max(maxActive,active);try{return await f.handleSketcher(p,sig,source)}finally{active--}})}const success=await d(f.createSketcherRequest("skt-e-success"));const err=await d(f.createSketcherRequest("skt-e-error",{...f.SKETCHER_FIXTURE,end:[5,0]}));const dup=await d(f.createSketcherRequest("skt-e-success"));const delayed=new Promise(r=>setTimeout(()=>r(k),0));const cr=f.createSketcherRequest("skt-e-cancel");const cp=d(cr,delayed);const ca=q.cancel(e.createCancel("skt-e-cancel-msg",cr.requestId,"sketcher-doc"));const cancelled=await cp;const after=await d(f.createSketcherRequest("skt-e-after"));assert.equal(success.kind,"result");assert.equal(success.result.geometryCount,1);assert.equal(err.error.code,"invalid_fixture");assert.equal(dup.error.code,"duplicate_request");assert.equal(ca,true);assert.equal(cancelled.error.code,"cancelled");assert.deepEqual(after.result,success.result);assert.equal(maxActive,1);const report={schema:"freecad-web-p6-sketcher-facade/v1",taskId:"FW-P6-SKT-E",module:"Sketcher",result:"pass",responses:{success,err,dup,cancelled,after},sequencing:{maxActive,requestCount:5,cancelAccepted:ca},schemaChecks:{noNativePointers:!JSON.stringify({success,err,dup,cancelled,after}).match(/pointer|native|handle/i)}};fs.writeFileSync(path.join(root,"docs/p6/sketcher-facade.json"),`${JSON.stringify(report,null,2)}\n`);fs.writeFileSync(path.join(root,"docs/freecad-p6-sketcher-e-facade.log"),`${JSON.stringify({result:"pass",maxActive,requests:5,cancelAccepted:ca})}\n`);console.log(JSON.stringify({result:"pass",maxActive,requests:5,cancelAccepted:ca}));
|