Files
FreeCADWasmDev/web/tools/test-geometry-boundary.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

58 lines
2.8 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import { auditGeometryBoundary, inspectGeometrySource } from "./audit-geometry-boundary.mjs";
test("native buffers, display bounds and picking remain allowed", () => {
const source = 'import * as THREE from "three"; const geometry=new THREE.BufferGeometry(); geometry.computeBoundingSphere(); new THREE.Box3(); new THREE.Raycaster();';
assert.deepEqual(inspectGeometrySource("src/render-object-registry.ts", source).findings, []);
});
test("Three imports in a native worker or facade are rejected", () => {
for (const file of ["src/part.worker.ts", "src/part-facade.ts"]) {
const result = inspectGeometrySource(file, 'import * as THREE from "three";');
assert.equal(result.findings[0].code, "three_outside_display");
}
});
test("procedural CAD geometry is detected through namespace and named aliases", () => {
for (const source of ['import * as Render from "three"; new Render.ExtrudeGeometry();',
'import { BoxGeometry as Shape } from "three"; new Shape();']) {
assert.equal(inspectGeometrySource("src/main.ts", source).findings[0].code, "three_procedural_cad");
}
});
test("alternate CSG imports, re-exports and dynamic imports are rejected", () => {
for (const source of ['import { CSG } from "three-csg-ts";', 'export * from "@jscad/modeling";',
'const csg=await import("three-bvh-csg");', 'const csg=require("manifold-3d");']) {
assert.equal(inspectGeometrySource("src/main.ts", source).findings[0].code, "alternate_geometry_backend");
}
});
test("type-only mesh transport declarations do not import a renderer at runtime", () => {
assert.deepEqual(inspectGeometrySource("src/shape-types.ts", 'import type { BufferGeometry } from "three";').findings, []);
});
test("missing or invalid supplied artifacts fail without triggering a build", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "freecad-boundary-"));
try {
fs.mkdirSync(path.join(root, "src"));
assert.equal(auditGeometryBoundary(root).findings.length, 2);
fs.mkdirSync(path.join(root, "public/kernel"), { recursive: true });
fs.writeFileSync(path.join(root, "public/kernel/FreeCADWebKernel.js"), "export default factory;");
fs.writeFileSync(path.join(root, "public/kernel/FreeCADWebKernel.wasm"), "not wasm");
const invalid = auditGeometryBoundary(root);
assert.equal(invalid.findings.length, 1);
assert.equal(invalid.singleRuntimeVerified, false);
} finally { fs.rmSync(root, { recursive: true, force: true }); }
});
test("the actual frontend obeys the checked display boundary", () => {
const report = auditGeometryBoundary();
assert.deepEqual(report.findings, []);
assert.equal(report.renderers.length, 4);
assert.equal(report.singleRuntimeVerified, false);
});