import { assert, describe, it } from "vite-plus/test"; import { type KeybindingCommand, type KeybindingShortcut, type KeybindingWhenNode, type ResolvedKeybindingsConfig, } from "@t3tools/contracts"; import { formatShortcutLabel, isChatNewShortcut, isChatNewLocalShortcut, isDiffToggleShortcut, modelPickerJumpCommandForIndex, modelPickerJumpIndexFromCommand, isOpenFavoriteEditorShortcut, isTerminalClearShortcut, isTerminalCloseShortcut, isTerminalNewShortcut, isTerminalSplitShortcut, isTerminalSplitVerticalShortcut, isTerminalToggleShortcut, resolveShortcutCommand, shouldShowModelPickerJumpHints, shouldShowThreadJumpHints, shortcutLabelForCommand, terminalDeleteShortcutData, terminalNavigationShortcutData, threadJumpCommandForIndex, threadJumpIndexFromCommand, threadTraversalDirectionFromCommand, type ShortcutEventLike, } from "./keybindings"; function event(overrides: Partial = {}): ShortcutEventLike { return { key: "j", metaKey: false, ctrlKey: false, shiftKey: false, altKey: false, ...overrides, }; } function modShortcut( key: string, overrides: Partial> = {}, ): KeybindingShortcut { return { key, metaKey: false, ctrlKey: false, shiftKey: false, altKey: false, modKey: true, ...overrides, }; } function whenIdentifier(name: string): KeybindingWhenNode { return { type: "identifier", name }; } function whenNot(node: KeybindingWhenNode): KeybindingWhenNode { return { type: "not", node }; } function whenAnd(left: KeybindingWhenNode, right: KeybindingWhenNode): KeybindingWhenNode { return { type: "and", left, right }; } interface TestBinding { shortcut: KeybindingShortcut; command: KeybindingCommand; whenAst?: KeybindingWhenNode; } function compile(bindings: TestBinding[]): ResolvedKeybindingsConfig { return bindings.map((binding) => ({ command: binding.command, shortcut: binding.shortcut, ...(binding.whenAst ? { whenAst: binding.whenAst } : {}), })); } const DEFAULT_BINDINGS = compile([ { shortcut: modShortcut("b"), command: "sidebar.toggle" }, { shortcut: modShortcut("j"), command: "terminal.toggle" }, { shortcut: modShortcut("b", { altKey: true }), command: "rightPanel.toggle" }, { shortcut: modShortcut("d"), command: "terminal.split", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("d", { shiftKey: true }), command: "terminal.splitVertical", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("n"), command: "terminal.new", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("w"), command: "terminal.close", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("w"), command: "rightPanel.close", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("d"), command: "diff.toggle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("k"), command: "commandPalette.toggle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("p"), command: "filePicker.toggle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("f", { shiftKey: true }), command: "projectSearch.toggle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("t", { altKey: true, shiftKey: true }), command: "themeEditor.toggle", }, { shortcut: modShortcut("m", { shiftKey: true }), command: "modelPicker.toggle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("o", { shiftKey: true }), command: "chat.new" }, { shortcut: modShortcut("n", { shiftKey: true }), command: "chat.newLocal" }, { shortcut: modShortcut("o"), command: "editor.openFavorite" }, { shortcut: modShortcut("[", { shiftKey: true }), command: "thread.previous" }, { shortcut: modShortcut("]", { shiftKey: true }), command: "thread.next" }, { shortcut: modShortcut("c", { shiftKey: true }), command: "thread.copyReference", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("s", { shiftKey: true }), command: "thread.settle", whenAst: whenNot(whenIdentifier("terminalFocus")), }, { shortcut: modShortcut("1"), command: "thread.jump.1" }, { shortcut: modShortcut("2"), command: "thread.jump.2" }, { shortcut: modShortcut("3"), command: "thread.jump.3" }, { shortcut: modShortcut("1"), command: "modelPicker.jump.1", whenAst: whenIdentifier("modelPickerOpen"), }, { shortcut: modShortcut("2"), command: "modelPicker.jump.2", whenAst: whenIdentifier("modelPickerOpen"), }, { shortcut: modShortcut("3"), command: "modelPicker.jump.3", whenAst: whenIdentifier("modelPickerOpen"), }, ]); describe("isTerminalToggleShortcut", () => { it("matches Cmd+J on macOS", () => { assert.isTrue( isTerminalToggleShortcut(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); }); it("matches Ctrl+J on non-macOS", () => { assert.isTrue( isTerminalToggleShortcut(event({ ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Win32" }), ); }); it("matches Ctrl+J on non-macOS while terminalFocus is true", () => { assert.isTrue( isTerminalToggleShortcut(event({ ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Win32", context: { terminalFocus: true }, }), ); }); }); describe("settle thread shortcut", () => { it("resolves outside the terminal", () => { assert.equal( resolveShortcutCommand(event({ key: "s", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), "thread.settle", ); }); it("does not intercept the terminal", () => { assert.isNull( resolveShortcutCommand(event({ key: "s", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Win32", context: { terminalFocus: true }, }), ); }); }); describe("copy thread reference shortcut", () => { it("resolves Cmd+Shift+C on macOS and Ctrl+Shift+C elsewhere", () => { assert.equal( resolveShortcutCommand(event({ key: "c", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), "thread.copyReference", ); assert.equal( resolveShortcutCommand(event({ key: "c", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }), "thread.copyReference", ); }); it("leaves terminal copy untouched", () => { assert.isNull( resolveShortcutCommand(event({ key: "c", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Linux", context: { terminalFocus: true }, }), ); }); }); describe("split/new/close terminal shortcuts", () => { it("requires terminalFocus for default split/new/close bindings", () => { assert.isFalse( isTerminalSplitShortcut(event({ key: "d", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), ); assert.isFalse( isTerminalSplitVerticalShortcut( event({ key: "d", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }, ), ); assert.isFalse( isTerminalNewShortcut(event({ key: "n", ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", context: { terminalFocus: false }, }), ); assert.isFalse( isTerminalCloseShortcut(event({ key: "w", ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", context: { terminalFocus: false }, }), ); }); it("matches split/new when terminalFocus is true", () => { assert.isTrue( isTerminalSplitShortcut(event({ key: "d", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), ); assert.isTrue( isTerminalSplitVerticalShortcut( event({ key: "d", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }, ), ); assert.isTrue( isTerminalNewShortcut(event({ key: "n", ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", context: { terminalFocus: true }, }), ); assert.isTrue( isTerminalCloseShortcut(event({ key: "w", ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", context: { terminalFocus: true }, }), ); }); it("supports when expressions", () => { const keybindings = compile([ { shortcut: modShortcut("\\"), command: "terminal.split", whenAst: whenAnd(whenIdentifier("terminalOpen"), whenNot(whenIdentifier("terminalFocus"))), }, { shortcut: modShortcut("n", { shiftKey: true }), command: "terminal.new", whenAst: whenAnd(whenIdentifier("terminalOpen"), whenNot(whenIdentifier("terminalFocus"))), }, { shortcut: modShortcut("j"), command: "terminal.toggle" }, ]); assert.isTrue( isTerminalSplitShortcut(event({ key: "\\", ctrlKey: true }), keybindings, { platform: "Win32", context: { terminalOpen: true, terminalFocus: false }, }), ); assert.isFalse( isTerminalSplitShortcut(event({ key: "\\", ctrlKey: true }), keybindings, { platform: "Win32", context: { terminalOpen: false, terminalFocus: false }, }), ); assert.isTrue( isTerminalNewShortcut(event({ key: "n", ctrlKey: true, shiftKey: true }), keybindings, { platform: "Win32", context: { terminalOpen: true, terminalFocus: false }, }), ); }); it("supports when boolean literals", () => { const keybindings = compile([ { shortcut: modShortcut("n"), command: "terminal.new", whenAst: whenIdentifier("true") }, { shortcut: modShortcut("m"), command: "terminal.new", whenAst: whenIdentifier("false") }, ]); assert.isTrue( isTerminalNewShortcut(event({ key: "n", ctrlKey: true }), keybindings, { platform: "Linux", }), ); assert.isFalse( isTerminalNewShortcut(event({ key: "m", ctrlKey: true }), keybindings, { platform: "Linux", }), ); }); }); describe("shortcutLabelForCommand", () => { it("returns the effective binding label", () => { const bindings = compile([ { shortcut: modShortcut("\\"), command: "terminal.split", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("\\", { shiftKey: true }), command: "terminal.split", whenAst: whenNot(whenIdentifier("terminalFocus")), }, ]); assert.strictEqual( shortcutLabelForCommand(bindings, "terminal.split", { platform: "Linux", context: { terminalFocus: false }, }), "Ctrl+Shift+\\", ); }); it("returns effective labels for non-terminal commands", () => { assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "sidebar.toggle", "MacIntel"), "⌘B", ); assert.strictEqual(shortcutLabelForCommand(DEFAULT_BINDINGS, "chat.new", "MacIntel"), "⇧⌘O"); assert.strictEqual(shortcutLabelForCommand(DEFAULT_BINDINGS, "diff.toggle", "Linux"), "Ctrl+D"); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "rightPanel.toggle", "MacIntel"), "⌥⌘B", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "commandPalette.toggle", "MacIntel"), "⌘K", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "filePicker.toggle", "MacIntel"), "⌘P", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "projectSearch.toggle", "MacIntel"), "⇧⌘F", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "modelPicker.toggle", "Linux"), "Ctrl+Shift+M", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "editor.openFavorite", "Linux"), "Ctrl+O", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "thread.jump.3", "MacIntel"), "⌘3", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "thread.previous", "Linux"), "Ctrl+Shift+[", ); assert.strictEqual( shortcutLabelForCommand(DEFAULT_BINDINGS, "modelPicker.jump.3", { platform: "MacIntel", context: { modelPickerOpen: true }, }), "⌘3", ); }); it("returns null for commands shadowed by a later conflicting shortcut", () => { const bindings = compile([ { shortcut: modShortcut("1", { shiftKey: true }), command: "thread.jump.1" }, { shortcut: modShortcut("1", { shiftKey: true }), command: "thread.jump.7" }, ]); assert.isNull(shortcutLabelForCommand(bindings, "thread.jump.1", "MacIntel")); assert.strictEqual(shortcutLabelForCommand(bindings, "thread.jump.7", "MacIntel"), "⇧⌘1"); }); it("respects when-context while resolving labels", () => { const bindings = compile([ { shortcut: modShortcut("d"), command: "diff.toggle" }, { shortcut: modShortcut("d"), command: "terminal.split", whenAst: whenIdentifier("terminalFocus"), }, ]); assert.strictEqual( shortcutLabelForCommand(bindings, "diff.toggle", { platform: "Linux", context: { terminalFocus: false }, }), "Ctrl+D", ); assert.isNull( shortcutLabelForCommand(bindings, "diff.toggle", { platform: "Linux", context: { terminalFocus: true }, }), ); assert.strictEqual( shortcutLabelForCommand(bindings, "terminal.split", { platform: "Linux", context: { terminalFocus: true }, }), "Ctrl+D", ); }); }); describe("thread navigation helpers", () => { it("maps jump commands to visible thread indices", () => { assert.strictEqual(threadJumpCommandForIndex(0), "thread.jump.1"); assert.strictEqual(threadJumpCommandForIndex(2), "thread.jump.3"); assert.isNull(threadJumpCommandForIndex(9)); assert.strictEqual(threadJumpIndexFromCommand("thread.jump.1"), 0); assert.strictEqual(threadJumpIndexFromCommand("thread.jump.3"), 2); assert.isNull(threadJumpIndexFromCommand("thread.next")); }); it("maps traversal commands to directions", () => { assert.strictEqual(threadTraversalDirectionFromCommand("thread.previous"), "previous"); assert.strictEqual(threadTraversalDirectionFromCommand("thread.next"), "next"); assert.isNull(threadTraversalDirectionFromCommand("thread.jump.1")); assert.isNull(threadTraversalDirectionFromCommand(null)); }); it("shows jump hints only when configured modifiers match", () => { assert.isTrue( shouldShowThreadJumpHints(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); assert.isFalse( shouldShowThreadJumpHints(event({ metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); assert.isTrue( shouldShowThreadJumpHints(event({ ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }), ); }); it("never shows jump hints while the terminal is focused, even with an unrestricted binding", () => { assert.isFalse( shouldShowThreadJumpHints(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), ); assert.isTrue( shouldShowThreadJumpHints(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), ); }); }); describe("model picker navigation helpers", () => { it("maps jump commands to visible model indices", () => { assert.strictEqual(modelPickerJumpCommandForIndex(0), "modelPicker.jump.1"); assert.strictEqual(modelPickerJumpCommandForIndex(2), "modelPicker.jump.3"); assert.isNull(modelPickerJumpCommandForIndex(9)); assert.strictEqual(modelPickerJumpIndexFromCommand("modelPicker.jump.1"), 0); assert.strictEqual(modelPickerJumpIndexFromCommand("modelPicker.jump.3"), 2); assert.isNull(modelPickerJumpIndexFromCommand("thread.jump.1")); }); it("shows jump hints only while the model picker context is active", () => { assert.isFalse( shouldShowModelPickerJumpHints(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { modelPickerOpen: false }, }), ); assert.isTrue( shouldShowModelPickerJumpHints(event({ metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { modelPickerOpen: true }, }), ); }); }); describe("chat/editor shortcuts", () => { it("matches chat.new shortcut", () => { assert.isTrue( isChatNewShortcut(event({ key: "o", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); assert.isTrue( isChatNewShortcut(event({ key: "o", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }), ); }); it("matches chat.newLocal shortcut", () => { assert.isTrue( isChatNewLocalShortcut(event({ key: "n", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); assert.isTrue( isChatNewLocalShortcut(event({ key: "n", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }), ); }); it("matches editor.openFavorite shortcut", () => { assert.isTrue( isOpenFavoriteEditorShortcut(event({ key: "o", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }), ); assert.isTrue( isOpenFavoriteEditorShortcut(event({ key: "o", ctrlKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }), ); assert.isFalse( isOpenFavoriteEditorShortcut( event({ key: "o", metaKey: true, repeat: true }), DEFAULT_BINDINGS, { platform: "MacIntel" }, ), ); }); it("matches commandPalette.toggle shortcut outside terminal focus", () => { assert.strictEqual( resolveShortcutCommand(event({ key: "k", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), "commandPalette.toggle", ); assert.notStrictEqual( resolveShortcutCommand(event({ key: "k", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), "commandPalette.toggle", ); }); it("resolves a user-configured thread panel shortcut without assigning a default", () => { const bindings = compile([ { shortcut: modShortcut("b", { shiftKey: true }), command: "threadPanel.toggle" }, ]); assert.strictEqual( resolveShortcutCommand(event({ key: "b", metaKey: true, shiftKey: true }), bindings, { platform: "MacIntel", }), "threadPanel.toggle", ); }); it("matches themeEditor.toggle on macOS and Windows", () => { assert.strictEqual( resolveShortcutCommand( event({ key: "t", metaKey: true, altKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel" }, ), "themeEditor.toggle", ); assert.strictEqual( resolveShortcutCommand( event({ key: "t", ctrlKey: true, altKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Win32" }, ), "themeEditor.toggle", ); }); it("matches filePicker.toggle shortcut outside terminal focus", () => { assert.strictEqual( resolveShortcutCommand(event({ key: "p", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), "filePicker.toggle", ); assert.notStrictEqual( resolveShortcutCommand(event({ key: "p", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), "filePicker.toggle", ); }); it("matches projectSearch.toggle shortcut outside terminal focus", () => { assert.strictEqual( resolveShortcutCommand(event({ key: "f", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), "projectSearch.toggle", ); assert.notStrictEqual( resolveShortcutCommand(event({ key: "f", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), "projectSearch.toggle", ); }); it("matches diff.toggle shortcut outside terminal focus", () => { assert.isTrue( isDiffToggleShortcut(event({ key: "d", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), ); assert.isFalse( isDiffToggleShortcut(event({ key: "d", metaKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), ); }); }); describe("cross-command precedence", () => { it("uses when + order so a later focused rule overrides a global rule", () => { const keybindings = compile([ { shortcut: modShortcut("n"), command: "chat.new" }, { shortcut: modShortcut("n"), command: "terminal.new", whenAst: whenIdentifier("terminalFocus"), }, ]); assert.isTrue( isTerminalNewShortcut(event({ key: "n", metaKey: true }), keybindings, { platform: "MacIntel", context: { terminalFocus: true }, }), ); assert.isFalse( isChatNewShortcut(event({ key: "n", metaKey: true }), keybindings, { platform: "MacIntel", context: { terminalFocus: true }, }), ); assert.isFalse( isTerminalNewShortcut(event({ key: "n", metaKey: true }), keybindings, { platform: "MacIntel", context: { terminalFocus: false }, }), ); assert.isTrue( isChatNewShortcut(event({ key: "n", metaKey: true }), keybindings, { platform: "MacIntel", context: { terminalFocus: false }, }), ); }); it("still lets a later global rule win when both rules match", () => { const keybindings = compile([ { shortcut: modShortcut("n"), command: "terminal.new", whenAst: whenIdentifier("terminalFocus"), }, { shortcut: modShortcut("n"), command: "chat.new" }, ]); assert.isFalse( isTerminalNewShortcut(event({ key: "n", ctrlKey: true }), keybindings, { platform: "Linux", context: { terminalFocus: true }, }), ); assert.isTrue( isChatNewShortcut(event({ key: "n", ctrlKey: true }), keybindings, { platform: "Linux", context: { terminalFocus: true }, }), ); }); }); describe("resolveShortcutCommand", () => { it("returns dynamic script commands", () => { const keybindings = compile([{ shortcut: modShortcut("r"), command: "script.setup.run" }]); assert.strictEqual( resolveShortcutCommand(event({ key: "r", ctrlKey: true }), keybindings, { platform: "Linux", }), "script.setup.run", ); }); it("routes mod+w to the terminal while focused and to the right panel otherwise", () => { const closeEvent = event({ key: "w", metaKey: true }); assert.strictEqual( resolveShortcutCommand(closeEvent, DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: true }, }), "terminal.close", ); assert.strictEqual( resolveShortcutCommand(closeEvent, DEFAULT_BINDINGS, { platform: "MacIntel", context: { terminalFocus: false }, }), "rightPanel.close", ); }); it("resolves a custom right panel maximize binding", () => { const keybindings = compile([ { shortcut: modShortcut("m", { shiftKey: true }), command: "rightPanel.toggleMaximized", }, ]); assert.strictEqual( resolveShortcutCommand(event({ key: "m", metaKey: true, shiftKey: true }), keybindings, { platform: "MacIntel", }), "rightPanel.toggleMaximized", ); }); it("matches bracket shortcuts using the physical key code", () => { assert.strictEqual( resolveShortcutCommand( event({ key: "{", code: "BracketLeft", metaKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel", }, ), "thread.previous", ); assert.strictEqual( resolveShortcutCommand( event({ key: "}", code: "BracketRight", ctrlKey: true, shiftKey: true }), DEFAULT_BINDINGS, { platform: "Linux", }, ), "thread.next", ); }); it("matches Option-modified letters using the physical key code on macOS", () => { assert.strictEqual( resolveShortcutCommand( event({ key: "∫", code: "KeyB", metaKey: true, altKey: true }), DEFAULT_BINDINGS, { platform: "MacIntel" }, ), "rightPanel.toggle", ); }); it("matches non-Latin layout letters using the physical key code", () => { const keybindings = compile([{ shortcut: modShortcut("d"), command: "diff.toggle" }]); assert.strictEqual( resolveShortcutCommand(event({ key: "в", code: "KeyD", metaKey: true }), keybindings, { platform: "MacIntel", }), "diff.toggle", ); }); it("ignores the physical key code when the layout types a different Latin letter", () => { const keybindings = compile([{ shortcut: modShortcut("d"), command: "diff.toggle" }]); // On a remapped layout the physical D key types "a"; only the physical // key whose layout output is "d" may trigger the shortcut. assert.isNull( resolveShortcutCommand(event({ key: "a", code: "KeyD", metaKey: true }), keybindings, { platform: "MacIntel", }), ); assert.strictEqual( resolveShortcutCommand(event({ key: "d", code: "KeyL", metaKey: true }), keybindings, { platform: "MacIntel", }), "diff.toggle", ); }); }); describe("formatShortcutLabel", () => { it("formats labels for macOS", () => { assert.strictEqual( formatShortcutLabel(modShortcut("d", { shiftKey: true }), "MacIntel"), "⇧⌘D", ); }); it("formats labels for non-macOS", () => { assert.strictEqual( formatShortcutLabel(modShortcut("d", { shiftKey: true }), "Linux"), "Ctrl+Shift+D", ); }); it("formats labels for plus key", () => { assert.strictEqual(formatShortcutLabel(modShortcut("+"), "MacIntel"), "⌘+"); assert.strictEqual(formatShortcutLabel(modShortcut("+"), "Linux"), "Ctrl++"); }); }); describe("isTerminalClearShortcut", () => { it("matches Ctrl+L on all platforms", () => { assert.isTrue(isTerminalClearShortcut(event({ key: "l", ctrlKey: true }), "Linux")); assert.isTrue(isTerminalClearShortcut(event({ key: "l", ctrlKey: true }), "MacIntel")); }); it("matches Cmd+K on macOS", () => { assert.isTrue(isTerminalClearShortcut(event({ key: "k", metaKey: true }), "MacIntel")); }); it("ignores non-keydown events", () => { assert.isFalse( isTerminalClearShortcut(event({ type: "keyup", key: "l", ctrlKey: true }), "Linux"), ); }); }); describe("terminalDeleteShortcutData", () => { it("maps Cmd+Backspace on macOS to delete-to-line-start", () => { assert.strictEqual( terminalDeleteShortcutData(event({ key: "Backspace", metaKey: true }), "MacIntel"), "\u0015", ); }); it("ignores non-macOS platforms and modified variants", () => { assert.isNull(terminalDeleteShortcutData(event({ key: "Backspace", metaKey: true }), "Linux")); assert.isNull( terminalDeleteShortcutData( event({ key: "Backspace", metaKey: true, altKey: true }), "MacIntel", ), ); }); it("ignores non-keydown events", () => { assert.isNull( terminalDeleteShortcutData( event({ type: "keyup", key: "Backspace", metaKey: true }), "MacIntel", ), ); }); }); describe("terminalNavigationShortcutData", () => { it("maps Option+Arrow on macOS to word movement", () => { assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowLeft", altKey: true }), "MacIntel"), "\u001bb", ); assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowRight", altKey: true }), "MacIntel"), "\u001bf", ); }); it("maps Cmd+Arrow on macOS to line movement", () => { assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowLeft", metaKey: true }), "MacIntel"), "\u0001", ); assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowRight", metaKey: true }), "MacIntel"), "\u0005", ); }); it("maps Ctrl+Arrow on non-macOS to word movement", () => { assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowLeft", ctrlKey: true }), "Win32"), "\u001bb", ); assert.strictEqual( terminalNavigationShortcutData(event({ key: "ArrowRight", ctrlKey: true }), "Linux"), "\u001bf", ); }); it("rejects unsupported combinations", () => { assert.isNull( terminalNavigationShortcutData( event({ key: "ArrowLeft", shiftKey: true, altKey: true }), "MacIntel", ), ); assert.isNull( terminalNavigationShortcutData(event({ key: "ArrowLeft", metaKey: true }), "Linux"), ); assert.isNull(terminalNavigationShortcutData(event({ key: "a", altKey: true }), "MacIntel")); }); it("ignores non-keydown events", () => { assert.isNull( terminalNavigationShortcutData( event({ type: "keyup", key: "ArrowLeft", altKey: true }), "MacIntel", ), ); }); }); describe("plus key parsing", () => { it("matches the plus key shortcut", () => { const plusBindings = compile([{ shortcut: modShortcut("+"), command: "terminal.toggle" }]); assert.isTrue( isTerminalToggleShortcut(event({ key: "+", metaKey: true }), plusBindings, { platform: "MacIntel", }), ); assert.isTrue( isTerminalToggleShortcut(event({ key: "+", ctrlKey: true }), plusBindings, { platform: "Linux", }), ); }); });