From 4c30f231a6dc57adde8ae7390cd656ddc6210c8a Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Mon, 28 Sep 2026 23:16:24 -0300 Subject: The web harness Looks through the touch fixture its documented dump holds test/web_harness.mjs still expected source-list.dump.zon (a git ls-files listing of the live tree), which posxwrksryvw deleted for capturing project paths; the documented invocation embeds touch.dump.zon, so the scroll check could never match. The harness now scrolls the fixture to its first row, right-click Looks /virtual/pane/1/body and checks the reflected body opens with Tree-sitter styles. A stale test, not a product bug. Co-Authored-By: Claude Opus 5.5 --- test/web_harness.mjs | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/test/web_harness.mjs b/test/web_harness.mjs index 402e41f4..7fd58b86 100644 --- a/test/web_harness.mjs +++ b/test/web_harness.mjs @@ -90,29 +90,34 @@ async function main() { assert.equal(renderer.cells[0], firstCell, "stable frames should reuse DOM nodes"); assert.equal(second.cells.length, 80 * 24); - // A replay follows the terminal cursor at the bottom. Deliberately - // over-scroll (the core clamps at row zero) so adding more source files does - // not silently move the hard-coded build.zig click onto some later path. + // The embedded dump is test/web-snapshots/touch.dump.zon, a fixed source + // fixture (no live project paths). Over-scroll first (the core clamps at row + // zero) so the Look below always lands on the fixture's own first rows. for (let tick = 0; tick < 128; tick += 1) wasm.pardes_mouse(3, 0, 5, 3, 0); const listingTop = draw(); - assert.match( - listingTop.cells.map((cell) => cell.text).join(""), - /git ls-files --cached --others --exclude-standard.*build\.zig/, - "working-tree source listing did not scroll to its first row", + const topLines = Array.from({ length: listingTop.rows }, (_, row) => + listingTop.cells.slice(row * listingTop.cols, (row + 1) * listingTop.cols).map((cell) => cell.text).join("")); + assert.ok( + topLines.some((text) => /^\s*1 pub fn choose/.test(text)), + "fixture source did not scroll to its first row", ); - wasm.pardes_mouse(2, 0, 5, 3, 0); - wasm.pardes_mouse(2, 1, 5, 3, 0); + const link = "/virtual/pane/1/body"; + const linkRow = topLines.findIndex((text) => text.includes(link)); + assert.ok(linkRow >= 0, "fixture has no Look target"); + const linkCol = topLines[linkRow].indexOf(link) + 5; + wasm.pardes_mouse(2, 0, linkCol, linkRow, 0); + wasm.pardes_mouse(2, 1, linkCol, linkRow, 0); const looked = draw(); - assert.match( - looked.cells.map((cell) => cell.text).join(""), - /build\.zig\s+Save Tty Del/, - "right-click LOOK did not open the embedded source", + const lookedText = looked.cells.map((cell) => cell.text).join(""); + assert.ok( + lookedText.includes(`${link} `) && lookedText.split("pub fn choose").length - 1 >= 2, + "right-click LOOK did not open the reflected source body", ); const sourceRows = Array.from({ length: looked.rows }, (_, row) => looked.cells.slice(row * looked.cols, (row + 1) * looked.cols)); const codeRows = sourceRows.filter((row) => row.map((cell) => cell.text).join("").match(/^\s*\d+\s/)); const codeColors = new Set(codeRows.flatMap((row) => row.slice(5).map((cell) => `${cell.fg}:${cell.attrs & 1}`))); - assert.ok(codeColors.size >= 3, "Tree-sitter did not apply distinct syntax styles to build.zig"); + assert.ok(codeColors.size >= 3, "Tree-sitter did not apply distinct syntax styles to the fixture"); assert.deepEqual(asked, [], "a plain replay asked the page for host IO"); wasm.pardes_resize(41, 13); -- cgit v1.3