55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
/** @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<string, string[][]> = {}
|
|
|
|
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 (
|
|
<OpencodeKeymapProvider keymap={keymap}>
|
|
<box />
|
|
</OpencodeKeymapProvider>
|
|
)
|
|
}
|
|
|
|
const app = await testRender(() => <Harness />)
|
|
try {
|
|
expect(sequences).toEqual({
|
|
up: [["pageup"]],
|
|
down: [["pagedown"]],
|
|
})
|
|
} finally {
|
|
app.renderer.destroy()
|
|
}
|
|
})
|