/** @jsxImportSource @opentui/solid */ import { testRender } from "@opentui/solid" import { expect, test } from "bun:test" import { ConfigProvider } from "../src/config" import { Keymap } from "../src/context/keymap" import { createTuiResolvedConfig } from "./fixture/tui-runtime" test("legacy page key aliases compile as page keys", async () => { let read = () => ({ up: "", down: "" }) function Harness() { const shortcuts = Keymap.useShortcuts() Keymap.createLayer(() => ({ commands: [ { id: "session.page.up", run() {} }, { id: "session.page.down", run() {} }, ], })) read = () => ({ up: shortcuts.get("session.page.up") ?? "", down: shortcuts.get("session.page.down") ?? "", }) return } const app = await testRender(() => ( )) try { expect(read()).toEqual({ up: "pgup", down: "pgdn" }) } finally { app.renderer.destroy() } }) test("formats navigation keys as arrows", async () => { let read = () => ({}) as Record const commands = ["session.parent", "session.child.first", "session.child.previous", "session.child.next"] function Harness() { const shortcuts = Keymap.useShortcuts() Keymap.createLayer(() => ({ commands: commands.map((id) => ({ id, run() {} })), })) read = () => Object.fromEntries(commands.map((id) => [id, shortcuts.get(id) ?? ""])) return } const app = await testRender(() => ( )) try { expect(read()).toEqual({ "session.parent": "↑", "session.child.first": "↓", "session.child.previous": "←", "session.child.next": "→", }) } finally { app.renderer.destroy() } }) test("returns every formatted command shortcut", async () => { let read = () => [] as readonly string[] function Harness() { const shortcuts = Keymap.useShortcuts() Keymap.createLayer(() => ({ commands: [{ id: "demo.command", bind: "x,y", run() {} }], })) read = () => shortcuts.list("demo.command") return } const app = await testRender(() => ( )) try { expect(read()).toEqual(["x", "y"]) } finally { app.renderer.destroy() } }) test("global commands stay reachable when the mode changes", async () => { const calls: string[] = [] let exercise = () => {} function Harness() { const keymap = Keymap.use() Keymap.createLayer(() => ({ mode: "global", commands: [{ id: "session.list", run: () => void calls.push("global") }], })) Keymap.createLayer(() => ({ commands: [{ id: "model.list", run: () => void calls.push("base") }], })) exercise = () => { keymap.dispatch("session.list") keymap.dispatch("model.list") const pop = keymap.mode.push("question") keymap.dispatch("session.list") keymap.dispatch("model.list") pop() } return } const app = await testRender(() => ( )) try { exercise() expect(calls).toEqual(["global", "base", "global"]) } finally { app.renderer.destroy() } })