ca859c4aa4
Standalone-Browser-Port von DOSSIER. Enthaelt das semantische Modell mit Plan-/3D-Ableitung, Zeichen- und Editierwerkzeuge, Rhino-artiges Befehlssystem, dockbares Panel-System, Resource-Manager, DXF/.lin/.pat-Import, i18n (de/en) sowie Projektdokumentation und Probe-Harness.
94 lines
3.4 KiB
JavaScript
94 lines
3.4 KiB
JavaScript
// Probe für das Rhino-artige Befehlssystem (Tier 0 + Line).
|
|
// Treibt: Tab → „line"⏎ → „0,0"⏎ → „r3,0"⏎ und screenshotet das Ergebnis.
|
|
// Erwartung: eine deutlich DUNKLE 3-m-Linie im Plan + Command-Line zeigt Prompts.
|
|
//
|
|
// Headless Puppeteer (swiftshader für WebGL). Zweiter Lauf mit „3<45" prüft die
|
|
// polare Eingabe. Vorlage: scripts/probe-tools.mjs.
|
|
|
|
import puppeteer from "puppeteer";
|
|
|
|
const URL = process.env.PROBE_URL || "http://localhost:5173/";
|
|
const browser = await puppeteer.launch({
|
|
headless: "new",
|
|
args: ["--no-sandbox", "--use-gl=swiftshader", "--enable-unsafe-swiftshader"],
|
|
});
|
|
const page = await browser.newPage();
|
|
await page.setViewport({ width: 1200, height: 800, deviceScaleFactor: 2 });
|
|
const logs = [];
|
|
page.on("console", (m) => logs.push(`[${m.type()}] ${m.text()}`));
|
|
page.on("pageerror", (e) => logs.push(`[PAGEERROR] ${e.message}`));
|
|
|
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
|
|
try {
|
|
await page.goto(URL, { waitUntil: "networkidle0", timeout: 20000 });
|
|
} catch (e) {
|
|
logs.push(`[GOTO-ERROR] ${e.message}`);
|
|
}
|
|
await sleep(600);
|
|
|
|
// Zählt 2D-Zeichenlinien + liefert die computed stroke der ersten (Tinte-Check).
|
|
async function inkInfo() {
|
|
return page.evaluate(() => {
|
|
const lines = [...document.querySelectorAll(".plan-svg line.draw2d")];
|
|
const first = lines[0];
|
|
const stroke = first ? getComputedStyle(first).stroke : null;
|
|
return { count: lines.length, stroke };
|
|
});
|
|
}
|
|
|
|
// Tippt einen Befehl/Eine Zeile in die fokussierte Command-Line + Enter.
|
|
async function typeLine(text) {
|
|
await page.type(".cmdline-input", text, { delay: 12 });
|
|
await page.keyboard.press("Enter");
|
|
await sleep(150);
|
|
}
|
|
|
|
// 1) Tab → Command-Line fokussieren (globaler Tab-Handler in App).
|
|
// Erst in den Body klicken, damit Tab nicht von einem anderen Feld geschluckt wird.
|
|
await page.mouse.click(600, 400);
|
|
await sleep(80);
|
|
await page.keyboard.press("Tab");
|
|
await sleep(120);
|
|
const focused1 = await page.evaluate(
|
|
() => document.activeElement?.className || "",
|
|
);
|
|
|
|
// 2) Befehl + zwei getippte Koordinaten. Startpunkt 1,7 liegt ÜBER dem Raum
|
|
// (freies Papier), damit die 3-m-Linie eindeutig sichtbar ist (nicht von einer
|
|
// Wandkante überdeckt). Verlangt: 1,7 ⏎ r3,0 ⏎ → 3-m-Linie nach rechts.
|
|
await typeLine("line");
|
|
const promptAfterLine = await page.evaluate(
|
|
() => document.querySelector(".cmdline-prompt")?.textContent || "",
|
|
);
|
|
await typeLine("1,2");
|
|
const promptAfterStart = await page.evaluate(
|
|
() => document.querySelector(".cmdline-prompt")?.textContent || "",
|
|
);
|
|
await typeLine("r3,0");
|
|
await sleep(200);
|
|
|
|
const ink1 = await inkInfo();
|
|
await page.screenshot({ path: "scripts/probe-command-line.png" });
|
|
|
|
// 3) Zweiter Lauf: polare Eingabe 3<45 (neue Linie ab Ursprung).
|
|
await page.mouse.click(600, 400);
|
|
await sleep(80);
|
|
await page.keyboard.press("Tab");
|
|
await sleep(120);
|
|
await typeLine("line");
|
|
await typeLine("1,1");
|
|
await typeLine("3<45");
|
|
await sleep(200);
|
|
const ink2 = await inkInfo();
|
|
await page.screenshot({ path: "scripts/probe-command-line-polar.png" });
|
|
|
|
console.log("focused after Tab:", focused1);
|
|
console.log("prompt after 'line':", JSON.stringify(promptAfterLine));
|
|
console.log("prompt after '0,0':", JSON.stringify(promptAfterStart));
|
|
console.log("ink (after 0,0 + r3,0):", JSON.stringify(ink1));
|
|
console.log("ink (after polar 3<45):", JSON.stringify(ink2));
|
|
console.log("=== Logs ===");
|
|
console.log(logs.length ? logs.join("\n") : "(keine)");
|
|
await browser.close();
|