/** @jsxImportSource @opentui/solid */ import { createDefaultOpenTuiKeymap } from "@opentui/keymap/opentui" import { testRender, useRenderer } from "@opentui/solid" import { expect, test } from "bun:test" import { onCleanup } from "solid-js" import { createTuiResolvedConfig } from "../../fixture/tui-runtime" import { OpencodeKeymapProvider, registerOpencodeKeymap } from "@/cli/cmd/tui/keymap" test("legacy page key aliases compile as page keys", async () => { const sequences: Record = {} function Harness() { const renderer = useRenderer() const keymap = createDefaultOpenTuiKeymap(renderer) const config = createTuiResolvedConfig({ keybinds: { messages_page_up: "pgup", messages_page_down: "pgdown", }, }) const offKeymap = registerOpencodeKeymap(keymap, renderer, config) const offLayer = keymap.registerLayer({ bindings: config.keybinds.gather("session", ["session.page.up", "session.page.down"]), }) const bindings = keymap.getCommandBindings({ visibility: "registered", commands: ["session.page.up", "session.page.down"], }) sequences.up = bindings.get("session.page.up")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? [] sequences.down = bindings.get("session.page.down")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? [] onCleanup(() => { offLayer() offKeymap() }) return ( ) } const app = await testRender(() => ) try { expect(sequences).toEqual({ up: [["pageup"]], down: [["pagedown"]], }) } finally { app.renderer.destroy() } })