AGENTS.md@packages/tui/test · git:20260824.0549249 · 2026-08-24 · sha256 379f5d3e960f063d

AGENTS.md@packages/tui/test git:20260824.0549249A

Immutable. This exact content is served forever at /api/v1/blob/379f5d3e960f063d.

# packages/tui/test

Score: 23 (77 files; `VirtualTerminal` imported by 65 of them).

`node:test` suite asserting rendered escape sequences against a simulated terminal. Test command and multiplexer setup are in `../../AGENTS.md`.

## WHERE TO LOOK

| Task | File |
|---|---|
| Terminal simulation helper | `virtual-terminal.ts` — `VirtualTerminal`: `write`/`resize`/`flush`/`getViewport`/`getScrollBuffer`/`waitForRender` |
| Shared themes | `test-themes.ts` — `defaultSelectListTheme`, `defaultMarkdownTheme`, `defaultEditorTheme` |
| Editor behavior | `editor.test.ts` (~4.4k LOC, 219 cases: autocomplete, history, Unicode, wrapping, markers, sticky columns) |
| Core render/diff, alt-screen, overlays | `tui-render.test.ts`, `tui-alt-screen.test.ts`, `overlay-non-capturing.test.ts` |
| Forbidden-regression guards | `external-stdout-guard.test.ts`, `cursor-write-hygiene.test.ts` |
| Perf harness | `perf-trend-local.test.ts`, `render-churn-bench.ts` (inspector profiles), `frame-cost-harness.test.ts` (validates the bench JSON) |
| Multiplexer environment | `setup-multiplexer-env.mjs` (imported globally by the test script) |

## CONVENTIONS

- Assert exact ANSI/OSC/APC bytes and viewport/scroll-buffer state via `VirtualTerminal` — never DOM or snapshot abstractions.
- Naming is behavior-oriented: `regression-*`, `*-characterization`, `*-contract`, `*-repro`.
- Filesystem autocomplete tests build isolated tmpdir trees and mock `fd` discovery; quoted paths, symlinks, hidden files, and `./` prefixes are explicit seams.
- Non-`*.test.ts` files are runnable utilities outside the runner glob: `chat-simple.ts`, `image-test.ts`, `key-tester.ts`, `mux-scrollback-harness.ts`, `viewport-overwrite-repro.ts`, `render-churn-bench.ts`.
- `stdin-buffer.test.ts` deliberately supports both `node:test` and Vitest APIs through a compat wrapper.

## ANTI-PATTERNS

- New tests synchronize on render/event signals (`waitForRender`, flush) — never fixed `setTimeout` sleeps. Legacy sleeps in `loader.test.ts`, `layout.test.ts`, `editor.test.ts`, `chat-simple.ts` must not be extended.
- Do not relax byte-exact terminal assertions; characterization contracts pin cursor/clear/SGR/OSC sequences.