fix(simulation): normalize named key presses (#37523)

This commit is contained in:
Kit Langton 2026-07-17 12:24:54 -04:00 committed by GitHub
commit 3fc06accbd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 49 additions and 3 deletions

View file

@ -1,7 +1,14 @@
import { tmpdir } from "node:os"
import { extname, join, resolve } from "node:path"
import type { CliRenderer, Renderable } from "@opentui/core"
import { createMockKeys, createMockMouse, type MockInput, type MockMouse } from "@opentui/core/testing"
import {
createMockKeys,
createMockMouse,
KeyCodes,
type KeyInput,
type MockInput,
type MockMouse,
} from "@opentui/core/testing"
import { Config, Effect, FileSystem } from "effect"
import type { SimulationProtocol } from "../protocol"
import { SimulationRenderer } from "./renderer"
@ -26,6 +33,15 @@ type RenderBuffer = {
const decoder = new TextDecoder()
function isKeyCode(key: string): key is keyof typeof KeyCodes {
return Object.hasOwn(KeyCodes, key)
}
function keyInput(key: string): KeyInput {
const named = key.toUpperCase()
return isKeyCode(named) ? named : key
}
function children(renderable: Renderable) {
return renderable.getChildren().filter((child): child is Renderable => "num" in child)
}
@ -154,7 +170,7 @@ export const execute = Effect.fn("SimulationActions.execute")(function* (harness
yield* Effect.tryPromise(() => harness.mockInput.typeText(action.text))
break
case "ui.press":
harness.mockInput.pressKey(action.key, action.modifiers)
harness.mockInput.pressKey(keyInput(action.key), action.modifiers)
break
case "ui.enter":
harness.mockInput.pressEnter()