mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 09:01:13 +00:00
- Copy all pi-mono source into apps/companion-os/ - Update Dockerfile to COPY pre-built binary instead of downloading from GitHub Releases - Update deploy-staging.yml to build pi from source (bun compile) before Docker build - Add apps/companion-os/** to path triggers - No more cross-repo dispatch needed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import assert from "node:assert";
|
|
import { describe, it } from "node:test";
|
|
import { type Component, TUI } from "../src/tui.js";
|
|
import { VirtualTerminal } from "./virtual-terminal.js";
|
|
|
|
class SimpleContent implements Component {
|
|
constructor(private lines: string[]) {}
|
|
render(): string[] {
|
|
return this.lines;
|
|
}
|
|
invalidate() {}
|
|
}
|
|
|
|
class SimpleOverlay implements Component {
|
|
render(): string[] {
|
|
return ["OVERLAY_TOP", "OVERLAY_MID", "OVERLAY_BOT"];
|
|
}
|
|
invalidate() {}
|
|
}
|
|
|
|
describe("TUI overlay with short content", () => {
|
|
it("should render overlay when content is shorter than terminal height", async () => {
|
|
// Terminal has 24 rows, but content only has 3 lines
|
|
const terminal = new VirtualTerminal(80, 24);
|
|
const tui = new TUI(terminal);
|
|
|
|
// Only 3 lines of content
|
|
tui.addChild(new SimpleContent(["Line 1", "Line 2", "Line 3"]));
|
|
|
|
// Show overlay centered - should be around row 10 in a 24-row terminal
|
|
const overlay = new SimpleOverlay();
|
|
tui.showOverlay(overlay);
|
|
|
|
// Trigger render
|
|
tui.start();
|
|
await new Promise((r) => process.nextTick(r));
|
|
await terminal.flush();
|
|
|
|
const viewport = terminal.getViewport();
|
|
const hasOverlay = viewport.some((line) => line.includes("OVERLAY"));
|
|
|
|
console.log("Terminal rows:", terminal.rows);
|
|
console.log("Content lines: 3");
|
|
console.log("Overlay visible:", hasOverlay);
|
|
|
|
if (!hasOverlay) {
|
|
console.log("\nViewport contents:");
|
|
for (let i = 0; i < viewport.length; i++) {
|
|
console.log(` [${i}]: "${viewport[i]}"`);
|
|
}
|
|
}
|
|
|
|
assert.ok(
|
|
hasOverlay,
|
|
"Overlay should be visible when content is shorter than terminal",
|
|
);
|
|
|
|
tui.stop();
|
|
});
|
|
});
|