mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 10:45:33 -04:00
b4a4ef0b3c
Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: Dax Raad <d@ironbay.co>
118 lines
3.1 KiB
TypeScript
118 lines
3.1 KiB
TypeScript
/** @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 <box />
|
|
}
|
|
|
|
const app = await testRender(() => (
|
|
<ConfigProvider
|
|
config={createTuiResolvedConfig({
|
|
keybinds: {
|
|
messages_page_up: "pgup",
|
|
messages_page_down: "pgdown",
|
|
},
|
|
})}
|
|
>
|
|
<Keymap.Provider>
|
|
<Harness />
|
|
</Keymap.Provider>
|
|
</ConfigProvider>
|
|
))
|
|
try {
|
|
expect(read()).toEqual({ up: "pgup", down: "pgdn" })
|
|
} finally {
|
|
app.renderer.destroy()
|
|
}
|
|
})
|
|
|
|
test("formats navigation keys as arrows", async () => {
|
|
let read = () => ({}) as Record<string, string>
|
|
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 <box />
|
|
}
|
|
|
|
const app = await testRender(() => (
|
|
<ConfigProvider config={createTuiResolvedConfig()}>
|
|
<Keymap.Provider>
|
|
<Harness />
|
|
</Keymap.Provider>
|
|
</ConfigProvider>
|
|
))
|
|
try {
|
|
expect(read()).toEqual({
|
|
"session.parent": "↑",
|
|
"session.child.first": "↓",
|
|
"session.child.previous": "←",
|
|
"session.child.next": "→",
|
|
})
|
|
} 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 <box />
|
|
}
|
|
|
|
const app = await testRender(() => (
|
|
<ConfigProvider config={createTuiResolvedConfig()}>
|
|
<Keymap.Provider>
|
|
<Harness />
|
|
</Keymap.Provider>
|
|
</ConfigProvider>
|
|
))
|
|
try {
|
|
exercise()
|
|
expect(calls).toEqual(["global", "base", "global"])
|
|
} finally {
|
|
app.renderer.destroy()
|
|
}
|
|
})
|