import { describe, expect, it } from "vitest"; import { buildWaitingStatusMessage, pickWaitingPhrase } from "./tui-waiting.js"; const theme = { dim: (s: string) => `${s}`, bold: (s: string) => `${s}`, accentSoft: (s: string) => `${s}`, } as any; describe("tui-waiting", () => { it("pickWaitingPhrase rotates every 10 ticks", () => { const phrases = ["a", "b", "c"]; expect(pickWaitingPhrase(0, phrases)).toBe("a"); expect(pickWaitingPhrase(9, phrases)).toBe("a"); expect(pickWaitingPhrase(10, phrases)).toBe("b"); expect(pickWaitingPhrase(20, phrases)).toBe("c"); expect(pickWaitingPhrase(30, phrases)).toBe("a"); }); it("buildWaitingStatusMessage includes shimmer markup and metadata", () => { const msg = buildWaitingStatusMessage({ theme, tick: 1, elapsed: "3s", connectionStatus: "connected", phrases: ["hello"], }); expect(msg).toContain("connected"); expect(msg).toContain("3s"); // text is wrapped per-char; check it appears in order expect(msg).toContain("h"); expect(msg).toContain("e"); expect(msg).toContain("l"); expect(msg).toContain("o"); // shimmer should contain both highlighted and dim parts expect(msg).toContain(""); expect(msg).toContain(""); }); });