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

54 lines
2.4 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 sourceEntry = "src/Mod/Import/App/ImportOCAF2.cpp";
const sourceBytes = fs.readFileSync(path.join(root, "freecad-source", sourceEntry));
const fixturePath = path.join(root, "web/public/samples/freecad-sample.step");
const sha256 = (value) => crypto.createHash("sha256").update(value).digest("hex");
const fixture = {
schema: "freecad-web-import/create-recompute/v1",
module: "Import",
action: "create/recompute",
documentName: "ImportCreateDocument",
fixturePath: "/fixtures/freecad-sample.step",
fixtureSha256: sha256(fs.readFileSync(fixturePath)),
};
const report = {
schema: "freecad-web-p6-import-action-contract/v1",
taskId: "FW-P6-IMP-ACT-01",
module: "Import",
action: "create/recompute",
result: "pass_contract",
source: {
entry: sourceEntry,
sha256: sha256(sourceBytes),
anchors: [
{ line: 281, symbol: "ImportOCAF2::createObject", role: "create document objects from native shapes" },
{ line: 506, symbol: "ImportOCAF2::loadShapes", role: "create the observable object graph" },
{ line: 563, symbol: "DocumentObject::recomputeFeature", role: "recompute the returned root object" },
],
},
fixture,
inputSha256: sha256(JSON.stringify(fixture)),
request: { envelopeSchema: "freecad-web-facade/v1", command: "import.createRecompute", requestIdPattern: "import-create-*" },
expectedResult: {
documentName: fixture.documentName,
rootObjectType: "Part::Feature",
objectCount: 32,
partCount: 5,
solidCount: 5,
volume: 104939.95608486432,
recomputeHasError: 0,
activeAfterClose: 0,
},
expectedError: { code: "invalid_fixture", field: "fixtureSha256", statePreserved: true },
chrome: { browser: "Google Chrome only", viewport: { width: 1440, height: 900, deviceScaleFactor: 1 }, externalRequests: 0 },
persistence: "resource-replay-boundary-unless-create-action-adds-an-FCStd-artifact",
subchain: ["FW-P6-IMP-ACT-01-C", "FW-P6-IMP-ACT-01-D", "FW-P6-IMP-ACT-01-E", "FW-P6-IMP-ACT-01-F", "FW-P6-IMP-ACT-01-G"],
status: "pending_until_subchain_complete",
};
fs.writeFileSync(path.join(root, "docs/p6/import-action-01-create-recompute.json"), `${JSON.stringify(report, null, 2)}\n`);
console.log(JSON.stringify({ result: report.result, inputSha256: report.inputSha256, subchain: report.subchain.length }));