55 lines
3.4 KiB
JavaScript
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 }));
|