import { setupTest, startEngine, startClientInTmux, openCmdFifo, writeFifoCommand, wait, tmuxSendKeys, tmuxCapturePane, ensureGenTone, teardownTest } from './test_utils'; export async function testRecordOnSelectedCell(): Promise { console.log("\nTest: RECORD ON SELECTED CELL (col 1, row 0)"); setupTest(); const engine = await startEngine(); await startClientInTmux(); openCmdFifo(); ensureGenTone(); await wait(500); // Add a new channel so column 1 (channel 1) exists writeFifoCommand("add"); await wait(500); // Navigation: move right once to column 1 (channel 1) tmuxSendKeys("looper", "0", "l"); // right once → col 1 await wait(500); // Verify selection shows column 1 let pane = tmuxCapturePane("looper", "0"); if (!pane.includes("Selected: Grid 0, Row 0, Col 1")) { console.log(" FAIL: Could not navigate to Col 1"); engine.kill(); teardownTest(); throw new Error("Navigation to column 1 failed"); } console.log(" PASS: Successfully navigated to Col 1"); // Press 't' to start recording – no extra key, TUI should redraw on its own tmuxSendKeys("looper", "0", "t"); await wait(1500); // Capture the pane once – this is the TUI's state const paneAfter = tmuxCapturePane("looper", "0"); // 1. The grid should show 'R' near cell 1 (col 1, row 0) const paneLines = paneAfter.split("\n"); let cell1Line = -1, recordLine = -1; for (let i = 0; i < paneLines.length; i++) { if (paneLines[i].includes(" 1")) cell1Line = i; if (paneLines[i].includes("R")) recordLine = i; } if (cell1Line === -1 || recordLine === -1 || Math.abs(recordLine - cell1Line) > 2) { console.log(" FAIL: Grid did not show 'R' near cell 1"); console.log(" Pane excerpt:\n" + paneAfter.slice(0, 1000)); engine.kill(); teardownTest(); throw new Error("Grid indicator not updated for selected cell"); } console.log(" PASS: Grid shows 'R' indicator near cell 1 after single 't'"); // 2. Verify that cell (row 0, col 0) does NOT show 'R' via pane char position // Cell (0,0) has its state character at line 5, column 4 (based on grid layout) const cell00StateCh = (paneLines.length > 5 && paneLines[5].length > 4) ? paneLines[5][4] : '?'; if (cell00StateCh === 'R') { console.log(" FAIL: Cell (0,0) shows 'R' (cross‑talk)"); engine.kill(); teardownTest(); throw new Error("Cross‑talk detected on cell 0"); } console.log(" PASS: Cell (0,0) does not show 'R' (no cross‑talk)"); engine.kill(); teardownTest(); }