35 lines
2.5 KiB
JavaScript
35 lines
2.5 KiB
JavaScript
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 ['<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="100mm" viewBox="0 0 100 100"><circle r="3"/></svg>', "not XML", '<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="100mm" viewBox="0 0 100 100"><rect width="5" height="3"/></svg>']) {
|
|
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(); }
|
|
}
|