51 lines
2.7 KiB
JavaScript
51 lines
2.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";
|
|
|
|
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), "..");
|
|
const read = (name) => JSON.parse(fs.readFileSync(path.join(root, "docs/p6", name), "utf8"));
|
|
const kernel = read("inspection-action-03-kernel.json");
|
|
const recovery = read("inspection-action-03-recovery.json");
|
|
const facade = read("inspection-action-03-facade.json");
|
|
const chrome = read("inspection-action-03-chrome.json");
|
|
assert.equal(kernel.result, "pass");
|
|
assert.equal(recovery.result, "pass");
|
|
assert.equal(facade.result, "pass");
|
|
assert.equal(chrome.result, "pass");
|
|
const state = {
|
|
action: "python-api",
|
|
sourceRevision: kernel.sourceRevision,
|
|
sourceEntry: kernel.fixture.entry,
|
|
apiCount: kernel.resultSummary.apiCount,
|
|
readOnly: true,
|
|
documentMutation: false,
|
|
saveRequested: false,
|
|
errorRecoveryStateUnchanged: recovery.recovery.unchangedAfterReject,
|
|
externalRequests: chrome.network.externalRequestCount,
|
|
};
|
|
const firstHash = crypto.createHash("sha256").update(JSON.stringify(state)).digest("hex");
|
|
const secondHash = crypto.createHash("sha256").update(JSON.stringify({ ...state })).digest("hex");
|
|
assert.equal(firstHash, secondHash);
|
|
assert.equal(state.documentMutation, false);
|
|
assert.equal(state.saveRequested, false);
|
|
const report = {
|
|
schema: "freecad-web-p6-inspection-action-03-persistence/v1",
|
|
taskId: "FW-P6-INS-ACT-03-G",
|
|
module: "Inspection",
|
|
action: "python-api",
|
|
result: "pass",
|
|
applicable: false,
|
|
reason: "Inspection python-api is a read-only registered-type summary and has no Document or FCStd save/reopen operation",
|
|
sourceRevision: kernel.sourceRevision,
|
|
replay: { firstHash, secondHash, equal: firstHash === secondHash, runs: 2 },
|
|
state,
|
|
boundaries: ["No FCStd round-trip is claimed for this read-only action.", "InspectionGui, arbitrary Python execution, and network transfer are excluded."],
|
|
commands: ["node tools/run_p6_inspection_action03_persistence.mjs"],
|
|
artifacts: { kernel: "docs/p6/inspection-action-03-kernel.json", facade: "docs/p6/inspection-action-03-facade.json", chrome: "docs/p6/inspection-action-03-chrome.json", workerLog: "docs/freecad-p6-inspection-action-03-g-persistence.log" },
|
|
};
|
|
fs.writeFileSync(path.join(root, "docs/p6/inspection-action-03-persistence.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs/freecad-p6-inspection-action-03-g-persistence.log"), `${JSON.stringify({ result: report.result, applicable: report.applicable, replayEqual: report.replay.equal, documentMutation: state.documentMutation })}\n`);
|
|
console.log(JSON.stringify({ result: report.result, applicable: report.applicable, replayEqual: report.replay.equal }));
|