feat: integrate Pi backend and Pi Web

This commit is contained in:
luckyyzh
2026-07-30 19:37:53 +08:00
commit 7392ab9dd7
1390 changed files with 337197 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
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();
});
});