Skip to content

Commit a8fc3d4

Browse files
authored
Merge branch 'main' into runtime-module-imports-2
2 parents 87b88c1 + dc0cb90 commit a8fc3d4

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

packages/core/src/testing/mock-keys.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,28 @@ describe("mock-keys", () => {
381381

382382
mockKeys.pressTab({ shift: true })
383383

384+
expect(mockRenderer.getEmittedData()).toBe("\x1b[Z")
385+
})
386+
387+
test("pressTab with shift modifier parses as shift+tab", async () => {
388+
const { parseKeypress } = await import("../lib/parse.keypress")
389+
const mockRenderer = new MockRenderer()
390+
const mockKeys = createMockKeys(mockRenderer as any)
391+
392+
mockKeys.pressTab({ shift: true })
393+
394+
const result = parseKeypress(mockRenderer.getEmittedData())
395+
expect(result).not.toBeNull()
396+
expect(result?.name).toBe("tab")
397+
expect(result?.shift).toBe(true)
398+
})
399+
400+
test("pressTab without modifiers still sends raw tab", () => {
401+
const mockRenderer = new MockRenderer()
402+
const mockKeys = createMockKeys(mockRenderer as any)
403+
404+
mockKeys.pressTab()
405+
384406
expect(mockRenderer.getEmittedData()).toBe("\t")
385407
})
386408

packages/core/src/testing/mock-keys.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,14 @@ export function createMockKeys(renderer: CliRenderer, options?: MockKeysOptions)
298298
// For regular characters and single-char control codes with modifiers
299299
let char = keyCode
300300

301+
// Shift+Tab produces the back-tab escape sequence \x1b[Z in standard ANSI terminals
302+
if (char === "\t" && modifiers.shift) {
303+
// Build the base as \x1b[Z, then apply meta prefix if also pressed
304+
keyCode = modifiers.meta ? "\x1b\x1b[Z" : "\x1b[Z"
305+
renderer.stdin.emit("data", Buffer.from(keyCode))
306+
return
307+
}
308+
301309
// Special handling for backspace with modifiers - use modifyOtherKeys format
302310
// Terminals send Ctrl+Backspace as CSI 27;5;127~ (or CSI 27;5;8~)
303311
// Only use modifyOtherKeys for ctrl, super, or hyper (not shift or meta alone)

0 commit comments

Comments
 (0)