Files
dev/third_party/pi/packages/tui/test/tui-shrink.test.ts
alexion 4def357d09 chore(vendor): import pi 0.85.1
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
2026-09-14 10:48:47 -04:00

46 lines
1.4 KiB
TypeScript

import assert from "node:assert";
import { describe, it } from "node:test";
import type { Component, TUI } from "../src/tui.ts";
import { TuiMainScreen } from "../src/tui-main-screen.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: TUI = new TuiMainScreen(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();
});
});