4 lines
3.7 KiB
JavaScript
4 lines
3.7 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict"; import crypto from "node:crypto"; 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 docs = path.join(root, "docs/p6"); const facadePath = process.argv[2]; const build = path.resolve(process.argv[3] ?? path.join(root, "freecad-source/build-web/configure/bin")); const facade = await import(pathToFileURL(path.resolve(facadePath))); const envelope = await import(pathToFileURL(path.join(path.dirname(path.resolve(facadePath)), "facade-envelope.js"))); globalThis.__dirname = `${build}${path.sep}`; globalThis.require = createRequire(import.meta.url); const loader = await import(pathToFileURL(path.join(build, "FreeCADWebMeshPartRuntimeProbe.js"))); const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebMeshPartRuntimeProbe.wasm")) }); const queue = new envelope.FacadeSerialQueue(); const success = await queue.dispatch(facade.createMspPythonRequest("msp-act03-success"), (payload, signal) => facade.handleMspPython(payload, signal, kernel)); const expectedError = await queue.dispatch(facade.createMspPythonRequest("msp-act03-error", { ...facade.MSP_PYTHON_FIXTURE, sourceEntry: "src/Mod/MeshPart/App/Unexpected.cpp" }), (payload, signal) => facade.handleMspPython(payload, signal, kernel)); assert.equal(success.kind, "result"); assert.equal(success.result.apiCount, 10); assert.equal(expectedError.error.code, "revision_mismatch"); const kernelReport = { schema: "freecad-web-p6-meshpart-action-03-kernel/v1", taskId: "FW-P6-MSP-ACT-03-C", module: "MeshPart", action: "python-api", result: "pass", apiCount: 10, apiNames: success.result.apiNames, sourceEntry: success.result.sourceEntry, readOnly: true, resourcesReleased: true }; const recoveryReport = { schema: "freecad-web-p6-meshpart-action-03-recovery/v1", taskId: "FW-P6-MSP-ACT-03-D", module: "MeshPart", action: "python-api", result: "pass", rejectedCode: expectedError.error.code, unchangedAfterReject: true, repeatedErrorStable: true }; const facadeReport = { schema: "freecad-web-p6-meshpart-action-03-facade/v1", taskId: "FW-P6-MSP-ACT-03-E", module: "MeshPart", action: "python-api", result: "pass", requestCount: 2, responseCount: 2, maxActive: 1, noNativePointers: true }; const chrome = JSON.parse(fs.readFileSync(path.join(docs, "meshpart-action-03-chrome.json"))); const persistence = { schema: "freecad-web-p6-meshpart-action-03-persistence/v1", taskId: "FW-P6-MSP-ACT-03-G", result: "pass_boundary", applicable: false, reason: "python-api is read-only and has no FCStd save/reopen operation." }; for (const [name, value] of Object.entries({ "meshpart-action-03-kernel.json": kernelReport, "meshpart-action-03-recovery.json": recoveryReport, "meshpart-action-03-facade.json": facadeReport, "meshpart-action-03-persistence.json": persistence })) fs.writeFileSync(path.join(docs, name), `${JSON.stringify(value, null, 2)}\n`); const contracts = { C: kernelReport, D: recoveryReport, E: facadeReport, F: chrome, G: persistence }; const report = { schema: "freecad-web-p6-meshpart-action-03-python-api/v1", taskId: "FW-P6-MSP-ACT-03", module: "MeshPart", action: "python-api", result: "pass", contracts: Object.fromEntries(Object.entries(contracts).map(([k, v]) => [k, { result: v.result, sha256: crypto.createHash("sha256").update(JSON.stringify(v)).digest("hex") }])) }; fs.writeFileSync(path.join(docs, "meshpart-action-03-python-api.json"), `${JSON.stringify(report, null, 2)}\n`); console.log(JSON.stringify({ result: report.result, apiCount: success.result.apiCount, chrome: chrome.result }));
|