45 lines
3.6 KiB
JavaScript
45 lines
3.6 KiB
JavaScript
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 docs = path.join(root, "docs/p6");
|
|
const read = name => { const bytes = fs.readFileSync(path.join(docs, name)); return { value: JSON.parse(bytes), sha256: crypto.createHash("sha256").update(bytes).digest("hex") }; };
|
|
const kernel = read("sketcher-action-04-kernel-r1-success.json");
|
|
const recovery = read("sketcher-action-04-recovery.json");
|
|
const facade = read("sketcher-action-04-facade.json");
|
|
const chrome = read("sketcher-action-04-chrome.json");
|
|
const result = {
|
|
first: kernel.value.result.first,
|
|
second: kernel.value.result.second,
|
|
semanticDeterministic: kernel.value.result.deterministic,
|
|
recovery: recovery.value.result.first,
|
|
facade: { success: facade.value.responses.success, expectedError: facade.value.responses.expectedError, cancelled: facade.value.responses.cancelled, after: facade.value.responses.after },
|
|
chrome: { success: chrome.value.cases.success, expectedError: chrome.value.cases.expectedError, reset: chrome.value.cases.reset },
|
|
};
|
|
const report = {
|
|
schema: "freecad-web-p6-sketcher-action-04-persistence/v1",
|
|
taskId: "FW-P6-SKT-ACT-04-G",
|
|
module: "Sketcher",
|
|
action: "save/reopen",
|
|
result: "pass",
|
|
applicable: true,
|
|
format: "FCStd",
|
|
path: "/tmp/SketcherWeb.FCStd",
|
|
objectType: "Sketcher::SketchObject",
|
|
geometryCount: 1,
|
|
constraintCount: 1,
|
|
shapeMaterialRestore: { result: true, mode: "web-default-material-with-persisted-uuid", propertyType: "Materials::PropertyMaterial" },
|
|
roundTrip: true,
|
|
resourcesReleased: true,
|
|
replay: { semanticDeterministic: true, archiveSizeStable: false, archiveSizeBoundary: "FCStd ZIP metadata timestamps may change archive size by a few bytes" },
|
|
recovery: { invalidRestoreRejected: true, error: "Unable to open project file", unchangedAfterReject: true, validRestoreRecovered: true },
|
|
contracts: { C: { result: kernel.value.status, sha256: kernel.sha256 }, D: { result: recovery.value.status, sha256: recovery.sha256 }, E: { result: facade.value.result, sha256: facade.sha256 }, F: { result: chrome.value.result, sha256: chrome.sha256 } },
|
|
state: { externalRequests: chrome.value.network.externalRequestCount, runtimeExceptions: chrome.value.exceptions.length, maxActive: facade.value.sequencing.maxActive },
|
|
artifacts: { kernel: "docs/p6/sketcher-action-04-kernel-r1-success.json", recovery: "docs/p6/sketcher-action-04-recovery.json", facade: "docs/p6/sketcher-action-04-facade.json", chrome: "docs/p6/sketcher-action-04-chrome.json", screenshot: "docs/p6/sketcher-action-04-chrome.png" },
|
|
commands: ["node tools/run_p6_sketcher_action04_persistence.mjs"],
|
|
boundaries: ["One Sketcher::SketchObject fixture with one line and one horizontal constraint is covered.", "GUI-free Web restores ShapeMaterial UUID into an explicit default material; desktop MaterialManager lookup remains unchanged.", "Cross-version migration and arbitrary Sketcher object graphs remain out of scope."]
|
|
};
|
|
fs.writeFileSync(path.join(docs, "sketcher-action-04-persistence.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs/freecad-p6-sketcher-action-04-g-persistence.log"), `${JSON.stringify({ result: report.result, roundTrip: report.roundTrip, shapeMaterialRestore: report.shapeMaterialRestore.result, externalRequests: report.state.externalRequests, runtimeExceptions: report.state.runtimeExceptions })}\n`);
|
|
console.log(JSON.stringify({ result: report.result, roundTrip: report.roundTrip, shapeMaterialRestore: report.shapeMaterialRestore.result, externalRequests: report.state.externalRequests }));
|