keymap.test.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /** @jsxImportSource @opentui/solid */
  2. import { createDefaultOpenTuiKeymap } from "@opentui/keymap/opentui"
  3. import { testRender, useRenderer } from "@opentui/solid"
  4. import { expect, test } from "bun:test"
  5. import { onCleanup } from "solid-js"
  6. import { createTuiResolvedConfig } from "../../fixture/tui-runtime"
  7. import { OpencodeKeymapProvider, registerOpencodeKeymap } from "@/cli/cmd/tui/keymap"
  8. test("legacy page key aliases compile as page keys", async () => {
  9. const sequences: Record<string, string[][]> = {}
  10. function Harness() {
  11. const renderer = useRenderer()
  12. const keymap = createDefaultOpenTuiKeymap(renderer)
  13. const config = createTuiResolvedConfig({
  14. keybinds: {
  15. messages_page_up: "pgup",
  16. messages_page_down: "pgdown",
  17. },
  18. })
  19. const offKeymap = registerOpencodeKeymap(keymap, renderer, config)
  20. const offLayer = keymap.registerLayer({
  21. bindings: config.keybinds.gather("session", ["session.page.up", "session.page.down"]),
  22. })
  23. const bindings = keymap.getCommandBindings({
  24. visibility: "registered",
  25. commands: ["session.page.up", "session.page.down"],
  26. })
  27. sequences.up =
  28. bindings.get("session.page.up")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? []
  29. sequences.down =
  30. bindings.get("session.page.down")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? []
  31. onCleanup(() => {
  32. offLayer()
  33. offKeymap()
  34. })
  35. return (
  36. <OpencodeKeymapProvider keymap={keymap}>
  37. <box />
  38. </OpencodeKeymapProvider>
  39. )
  40. }
  41. const app = await testRender(() => <Harness />)
  42. try {
  43. expect(sequences).toEqual({
  44. up: [["pageup"]],
  45. down: [["pagedown"]],
  46. })
  47. } finally {
  48. app.renderer.destroy()
  49. }
  50. })