import assert from "node:assert/strict"; import { playwright } from "./part-primitive-business-cases.mjs"; export async function runStartBrowserCases() { const browser = await playwright().chromium.launch({ executablePath: process.env.FREECAD_CHROME ?? "/usr/bin/google-chrome", headless: true, args: ["--no-sandbox", "--disable-dev-shm-usage"] }); try { const page = await browser.newPage(); await page.goto(process.env.FREECAD_START_BROWSER_ORIGIN ?? "http://localhost:5180/", { waitUntil: "domcontentloaded" }); const result = await page.evaluate(async () => { const { WebModuleRouter } = await import("/src/module-router.ts"); const { getWebModuleWorkerForCommand } = await import("/src/module-registry.generated.ts"); const router = new WebModuleRouter(), responses = []; try { const worker = getWebModuleWorkerForCommand("Start", "start.importSvg"); const input = content => ({ schema: "freecad-web-start/import-svg/v1", module: "Start", action: "import", path: "/tmp/browser.svg", content }); for (const content of ['', "not XML", '']) { const payload = input(content), start = performance.now(); responses.push({ input: payload, response: await router.request("Start", "start.importSvg", payload, "StartBrowser"), seconds: (performance.now() - start) / 1000 }); } return { worker, responses }; } finally { router.dispose(); } }); assert.equal(result.worker, "start.worker.ts"); const [first, invalid, recovered] = result.responses.map(item => item.response); assert.equal(first.kind, "result", JSON.stringify(first)); assert.ok(Math.abs(first.result.objects[0].length - 6 * Math.PI) < 1e-6); assert.equal(invalid.kind, "error"); assert.equal(recovered.kind, "result", JSON.stringify(recovered)); assert.equal(recovered.result.document, first.result.document); assert.equal(recovered.result.objectCount, first.result.objectCount + 1); assert.ok(Math.abs(recovered.result.objects[0].length - 16) < 1e-6); return result.responses.map(item => ({ input: item.input, actual: item.response, seconds: item.seconds, assertions: [{ name: "browser module router uses the real SVG Worker, native geometry, correlated errors and same-document recovery", passed: true }] })); } finally { await browser.close(); } }