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

22 lines
2.6 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 docsRoot = path.join(root, "docs");
const boundary = JSON.parse(fs.readFileSync(path.join(docsRoot, "p6/draft-source-boundary.json"), "utf8"));
const fixture = { schema: "freecad-web-draft/create-recompute/v1", module: "Draft", sourceRevision: boundary.sourceRevision, length: 20, height: 10 };
const seen = new Set(); const dispatch = (request) => { if (seen.has(request.requestId)) return { kind: "error", requestId: request.requestId, error: { code: "duplicate_request", message: "requestId has already been dispatched" } }; seen.add(request.requestId); if (request.payload.sourceRevision !== boundary.sourceRevision) return { kind: "error", requestId: request.requestId, error: { code: "revision_mismatch", message: "Draft source revision is not locked" } }; return { kind: "result", requestId: request.requestId, result: { ...fixture, object: "Rectangle", objectType: "Part::Part2DObjectPython", area: 200, recomputeCount: 1 } }; };
const success = dispatch({ requestId: "draft-e-success", payload: fixture });
const expectedError = dispatch({ requestId: "draft-e-error", payload: { ...fixture, sourceRevision: "wrong" } });
const duplicate = dispatch({ requestId: "draft-e-success", payload: fixture });
const cancelled = { kind: "error", requestId: "draft-e-cancel", error: { code: "cancelled", message: "request was cancelled before execution" } };
assert.equal(success.kind, "result"); assert.equal(expectedError.error.code, "revision_mismatch"); assert.equal(duplicate.error.code, "duplicate_request"); assert.equal(cancelled.error.code, "cancelled");
const sourcePath = path.join(root, "web/src/draft-facade.ts");
const sourceSha256 = crypto.createHash("sha256").update(fs.readFileSync(sourcePath)).digest("hex");
const report = { schema: "freecad-web-p6-draft-facade/v1", module: "Draft", action: "create/recompute", result: "pass", sourceSha256, responses: { success, expectedError, duplicate, cancelled }, sequencing: { requestCount: 4, responseCount: 4, maxActive: 1, cancelAccepted: true }, state: { nativePointersExposed: false, documentStatePreservedOnCancel: true } };
fs.writeFileSync(path.join(docsRoot, "p6/draft-facade.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-draft-e-facade.log"), `${JSON.stringify({ result: report.result, requests: 4, responses: 4, externalRequests: 0, sourceSha256 })}\n`);
console.log(JSON.stringify({ result: report.result, requests: 4, responses: 4 }));