import assert from "node:assert"; import { describe, it } from "node:test"; import { type Component, TUI } from "../src/tui.ts"; import { VirtualTerminal } from "./virtual-terminal.ts"; class Lines implements Component { private lines: string[]; constructor(lines: string[]) { this.lines = lines; } render(): string[] { return this.lines; } invalidate(): void {} } describe("TUI shrinking content", () => { it("clears all rendered lines when content shrinks to zero", async () => { const terminal = new VirtualTerminal(40, 10); const tui = new TUI(terminal); const content = new Lines(["first", "second", "third"]); tui.addChild(content); tui.start(); await terminal.waitForRender(); assert.ok(terminal.getViewport().some((line) => line.includes("first"))); assert.ok(terminal.getViewport().some((line) => line.includes("second"))); assert.ok(terminal.getViewport().some((line) => line.includes("third"))); tui.clear(); tui.requestRender(); await terminal.waitForRender(); const viewport = terminal.getViewport(); assert.ok(!viewport.some((line) => line.includes("first")), "first line should be cleared"); assert.ok(!viewport.some((line) => line.includes("second")), "second line should be cleared"); assert.ok(!viewport.some((line) => line.includes("third")), "third line should be cleared"); tui.stop(); }); });