Files
FreeCADWasmDev/tools/jtreader-business-cases.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

31 lines
2.6 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { pathToFileURL, fileURLToPath } from "node:url";
import { loadWasmProbe } from "./wasm-probe-runtime.mjs";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const out = fs.mkdtempSync(path.join(os.tmpdir(), "freecad-jtreader-business-"));
const capabilityId = "JtReader:jtreader.createRecompute";
try {
const tsc = path.join(root, "web/node_modules/.bin/tsc");
const files = ["web/src/facade-envelope.ts", "web/src/jtreader-facade.ts", "web/src/jtreader-persistence-facade.ts"].map(f => path.join(root, f));
await import("node:child_process").then(({execFileSync}) => execFileSync(tsc, ["--target","ES2022","--module","ESNext","--moduleResolution","Bundler","--strict","--skipLibCheck","--outDir",out,...files], {cwd: root}));
const facade = await import(pathToFileURL(path.join(out, "jtreader-facade.js")));
const persistence = await import(pathToFileURL(path.join(out, "jtreader-persistence-facade.js")));
const { FacadeSerialQueue } = await import(pathToFileURL(path.join(out, "facade-envelope.js")));
const { kernel } = await loadWasmProbe(path.join(root,"freecad-source/build-web/configure/bin"), "FreeCADWebJtReaderRuntimeProbe");
const response = await facade.dispatchJtReaderRequest(new FacadeSerialQueue(), facade.createJtReaderRequest("business"), kernel);
assert.equal(response.kind, "result", JSON.stringify(response));
const r = response.result;
assert.equal(r.object.type, "App::InventorObject"); assert.equal(r.recompute.hasError, 0); assert.equal(r.resourcesReleased, true);
const saveResponse = await persistence.dispatchJtReaderPersistence(new FacadeSerialQueue(), persistence.createJtReaderPersistenceRequest("save-reopen"), kernel);
assert.equal(saveResponse.kind, "result", JSON.stringify(saveResponse));
const p = saveResponse.result;
assert.equal(p.roundTrip, true); assert.equal(p.objectCount, 1); assert.ok(p.size > 0);
fs.writeSync(1, JSON.stringify({schema:"freecad-web-business-cases/v1",results:[
{capabilityId,status:"passed",cases:[{capabilityId,input:facade.JTREADER_FIXTURE,actual:r,assertions:[{name:"Inventor object creates, recomputes, and releases resources",passed:true}]}]},
{capabilityId:"JtReader:jtreader.saveReopen",status:"passed",cases:[{capabilityId:"JtReader:jtreader.saveReopen",input:persistence.JTREADER_PERSISTENCE_FIXTURE,actual:p,assertions:[{name:"FCStd save and reopen preserves Inventor object",passed:true}]}]}
]})+"\n");
} finally { fs.rmSync(out,{recursive:true,force:true}); process.exit(0); }