14 lines
3.1 KiB
JavaScript
14 lines
3.1 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-python-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_PYTHON_SCHEMA, CAM_PYTHON_COMMAND, CAM_PYTHON_SOURCE_REVISION, CAM_PYTHON_FIXTURE, createCamPythonRequest, handleCamPython, isCamPythonRequest } = facade; const { FacadeSerialQueue, isFacadeResponse } = envelope; const queue = new FacadeSerialQueue(); const run = (request) => queue.dispatch(request, handleCamPython);
|
|
const success = await run(createCamPythonRequest("cam-action-04-python")); const repeated = await run(createCamPythonRequest("cam-action-04-python-2"));
|
|
assert.equal(CAM_PYTHON_COMMAND, "cam.inspectPythonApi"); assert.equal(CAM_PYTHON_SOURCE_REVISION, source.sourceRevision); assert.equal(isCamPythonRequest(createCamPythonRequest("schema-test")), true); assert.equal(success.kind, "result"); assert.equal(success.result.schema, CAM_PYTHON_SCHEMA); assert.equal(success.result.apiCount, 2883); assert.equal(success.result.expectedApiCount, 2883); assert.equal(success.result.kindCounts.class + success.result.kindCounts.function + success.result.kindCounts.method, 2883); 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 report = { schema: "freecad-web-p6-cam-action-04-kernel/v1", task_id: "FW-P6-CAM-ACT-04-C", module: "CAM", action: "python-api", status: "pass", source_revision: source.sourceRevision, fixture: { ...CAM_PYTHON_FIXTURE, input_sha256: crypto.createHash("sha256").update(JSON.stringify(CAM_PYTHON_FIXTURE)).digest("hex") }, result: { success, repeated, result_sha256: crypto.createHash("sha256").update(JSON.stringify(success.result)).digest("hex") }, 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-04 --declaration false --noEmit false src/facade-envelope.ts src/cam-python-facade.ts", "node tools/run_p6_cam_action04_kernel_smoke.mjs /tmp/freecad-p6-cam-action-04/cam-python-facade.js"], boundaries: ["Python API result is a deterministic read-only inventory summary, not arbitrary Python execution."] };
|
|
fs.writeFileSync(path.join(docsRoot, "p6/cam-action-04-kernel.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(docsRoot, "freecad-p6-cam-action-04-c-kernel.log"), `result=pass\napiCount=2883\nactiveHandles=0\n`); console.log(JSON.stringify({ result: report.status, apiCount: success.result.apiCount }));
|