Spaces:
Paused
Paused
| import type { Component } from "@mariozechner/pi-tui"; | |
| import { describe, expect, it, vi } from "vitest"; | |
| import { createOverlayHandlers } from "./tui-overlays.js"; | |
| class DummyComponent implements Component { | |
| render() { | |
| return ["dummy"]; | |
| } | |
| invalidate() {} | |
| } | |
| describe("createOverlayHandlers", () => { | |
| it("routes overlays through the TUI overlay stack", () => { | |
| const showOverlay = vi.fn(); | |
| const hideOverlay = vi.fn(); | |
| const setFocus = vi.fn(); | |
| let open = false; | |
| const host = { | |
| showOverlay: (component: Component) => { | |
| open = true; | |
| showOverlay(component); | |
| }, | |
| hideOverlay: () => { | |
| open = false; | |
| hideOverlay(); | |
| }, | |
| hasOverlay: () => open, | |
| setFocus, | |
| }; | |
| const { openOverlay, closeOverlay } = createOverlayHandlers(host, new DummyComponent()); | |
| const overlay = new DummyComponent(); | |
| openOverlay(overlay); | |
| expect(showOverlay).toHaveBeenCalledWith(overlay); | |
| closeOverlay(); | |
| expect(hideOverlay).toHaveBeenCalledTimes(1); | |
| expect(setFocus).not.toHaveBeenCalled(); | |
| }); | |
| it("restores focus when closing without an overlay", () => { | |
| const setFocus = vi.fn(); | |
| const host = { | |
| showOverlay: vi.fn(), | |
| hideOverlay: vi.fn(), | |
| hasOverlay: () => false, | |
| setFocus, | |
| }; | |
| const fallback = new DummyComponent(); | |
| const { closeOverlay } = createOverlayHandlers(host, fallback); | |
| closeOverlay(); | |
| expect(setFocus).toHaveBeenCalledWith(fallback); | |
| }); | |
| }); | |