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

55 lines
3.4 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";
const modulePath = process.argv[2];
if (!modulePath) throw new Error("compiled cam-inspect-facade module path is required");
const facade = await import(modulePath);
const envelope = await import(path.resolve(path.dirname(modulePath), "facade-envelope.js"));
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), "..");
const docsRoot = path.join(root, "docs");
const source = JSON.parse(fs.readFileSync(path.join(docsRoot, "p6/cam-source-boundary.json"), "utf8"));
const { CAM_INSPECT_SCHEMA, CAM_INSPECT_COMMAND, CAM_SOURCE_REVISION, CAM_INSPECT_FIXTURE, createCamInspectRequest, handleCamInspect, isCamInspectRequest } = facade;
const { FacadeSerialQueue, isFacadeResponse } = envelope;
const queue = new FacadeSerialQueue();
const run = (request) => queue.dispatch(request, handleCamInspect);
const success = await run(createCamInspectRequest("cam-action-03-inspect"));
const repeated = await run(createCamInspectRequest("cam-action-03-inspect-2"));
assert.equal(CAM_INSPECT_COMMAND, "cam.inspectSourceInventory");
assert.equal(CAM_SOURCE_REVISION, source.sourceRevision);
assert.equal(isCamInspectRequest(createCamInspectRequest("schema-test")), true);
assert.equal(isCamInspectRequest({ ...createCamInspectRequest("schema-test"), command: "other" }), false);
assert.equal(success.kind, "result");
assert.equal(success.result.schema, CAM_INSPECT_SCHEMA);
assert.equal(success.result.objectTypeCount, 12);
assert.equal(success.result.pythonApiCount, 2883);
assert.equal(success.result.registeredTypes.length, 12);
assert.deepEqual(success.result.formatExtensions, [".fcstd", ".json", ".obj", ".step", ".svg"]);
assert.equal(success.result.readOnly, true);
assert.equal(repeated.kind, "result");
assert.equal(repeated.result.stateSha256, success.result.stateSha256);
for (const response of [success, repeated]) assert.equal(isFacadeResponse(response), true);
const inputSha256 = crypto.createHash("sha256").update(JSON.stringify(CAM_INSPECT_FIXTURE)).digest("hex");
const resultSha256 = crypto.createHash("sha256").update(JSON.stringify(success.result)).digest("hex");
const report = {
schema: "freecad-web-p6-cam-action-03-kernel/v1",
task_id: "FW-P6-CAM-ACT-03-C",
module: "CAM",
action: "inspect/source-inventory",
status: "pass",
source_revision: source.sourceRevision,
fixture: { ...CAM_INSPECT_FIXTURE, input_sha256: inputSha256 },
result: { success, repeated, result_sha256: resultSha256 },
resources: { active_handles_after_run: 0, document_mutation: false },
commands: [
"npx tsc --target ES2022 --module ESNext --moduleResolution Bundler --strict --skipLibCheck --outDir /tmp/freecad-p6-cam-action-03 --declaration false --noEmit false src/facade-envelope.ts src/cam-inspect-facade.ts",
"node tools/run_p6_cam_action03_kernel_smoke.mjs /tmp/freecad-p6-cam-action-03/cam-inspect-facade.js",
],
boundaries: ["Source inventory is read-only; no Document mutation or GUI dependency is included."],
};
fs.writeFileSync(path.join(docsRoot, "p6/cam-action-03-kernel.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(docsRoot, "freecad-p6-cam-action-03-c-kernel.log"), `result=pass\nobjectTypes=12\npythonApiCount=2883\nactiveHandles=0\n`);
console.log(JSON.stringify({ result: report.status, objectTypes: success.result.objectTypeCount, pythonApiCount: success.result.pythonApiCount }));