mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 08:28:31 +00:00
T1: demo/serve.mjs exports check/checkAll/finish — all 48 smokes now assert named facts and exit non-zero on a mismatch or an uncaught in-card exception (verified by breaking the kiosk guard on purpose). Informational values were frozen from a v1.43.1 run and cross-read against the source; timings assert budgets, not exact numbers. T2: new CI job 'smoke' gated on 'frontend', builds a FRESH bundle before running (the committed demo/srv/assets copy is a snapshot) and uploads per-file logs on failure. T3: [auto] now means 'a named failing check exists' and each line names it (43 lines); 72 aspirational markers honestly downgraded to [manual]. Fixed the 'ZERO edit buttons' contradiction (wrong since v1.30.1) and the opening-click line (true again since v1.43.1). Three smokes carried pre-v1.39.0/v1.25 expectations and were testing old behaviour: tap defaults for lights, card-wide tap action, label drag requiring plan mode. DEVELOPMENT.md documents the harness contract.
22 lines
1.4 KiB
JavaScript
22 lines
1.4 KiB
JavaScript
// Split now works on a non-grid-aligned room (imported/legacy polygons).
|
|
import { launch, checkAll, finish } from './serve.mjs';
|
|
const { page, browser } = await launch();
|
|
const R = (nx, ny) => page.evaluate(([nx, ny]) => {
|
|
const c = window.__card; const H = 1000 / c._curSpaceCfg.aspect; return [nx * 1000, ny * H];
|
|
}, [nx, ny]);
|
|
const out = {};
|
|
await page.evaluate(()=>{const c=window.__card; if(!c._markup)c._setMode('plan'); c._tool='split';});
|
|
// living room (r1) has walls at y=0.05 which are NOT grid nodes; click near the wall
|
|
await page.evaluate((p)=>window.__card._splitClick(p), await R(0.3,0.3)); // pick living
|
|
await page.evaluate((p)=>window.__card._splitClick(p), await R(0.3,0.052)); // near top wall (off grid)
|
|
await page.evaluate((p)=>window.__card._splitClick(p), await R(0.3,0.58)); // near bottom wall
|
|
out.pending = await page.evaluate(()=>!!window.__card._pendingSplit);
|
|
out.dialog = await page.evaluate(()=>!!window.__card._roomDialog);
|
|
// accidental click in the middle of the room must NOT become a wall point
|
|
await page.evaluate(()=>{const c=window.__card; c._roomDialog=false; c._pendingSplit=null; c._splitSel=null;});
|
|
await page.evaluate((p)=>window.__card._splitClick(p), await R(0.3,0.3)); // pick again
|
|
await page.evaluate((p)=>window.__card._splitClick(p), await R(0.3,0.3)); // centre click = miss
|
|
out.centreRefused = await page.evaluate(()=>window.__card._splitSel?.a == null);
|
|
checkAll(out);
|
|
await finish(browser, out);
|