45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
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();
|
|
});
|
|
});
|