| |
| |
| |
| |
| |
|
|
| import { describe, it, expect } from 'vitest'; |
| import { formatKeyBinding, formatCommand } from './keybindingUtils.js'; |
| import { Command, KeyBinding } from './keyBindings.js'; |
|
|
| describe('keybindingUtils', () => { |
| describe('formatKeyBinding', () => { |
| const testCases: Array<{ |
| name: string; |
| binding: KeyBinding; |
| expected: { |
| darwin: string; |
| win32: string; |
| linux: string; |
| default: string; |
| }; |
| }> = [ |
| { |
| name: 'simple key', |
| binding: new KeyBinding('a'), |
| expected: { darwin: 'A', win32: 'A', linux: 'A', default: 'A' }, |
| }, |
| { |
| name: 'named key (return)', |
| binding: new KeyBinding('enter'), |
| expected: { |
| darwin: 'Enter', |
| win32: 'Enter', |
| linux: 'Enter', |
| default: 'Enter', |
| }, |
| }, |
| { |
| name: 'named key (escape)', |
| binding: new KeyBinding('escape'), |
| expected: { darwin: 'Esc', win32: 'Esc', linux: 'Esc', default: 'Esc' }, |
| }, |
| { |
| name: 'ctrl modifier', |
| binding: new KeyBinding('ctrl+c'), |
| expected: { |
| darwin: 'Ctrl+C', |
| win32: 'Ctrl+C', |
| linux: 'Ctrl+C', |
| default: 'Ctrl+C', |
| }, |
| }, |
| { |
| name: 'cmd modifier', |
| binding: new KeyBinding('cmd+z'), |
| expected: { |
| darwin: 'Cmd+Z', |
| win32: 'Win+Z', |
| linux: 'Super+Z', |
| default: 'Cmd/Win+Z', |
| }, |
| }, |
| { |
| name: 'alt/option modifier', |
| binding: new KeyBinding('alt+left'), |
| expected: { |
| darwin: 'Option+Left', |
| win32: 'Alt+Left', |
| linux: 'Alt+Left', |
| default: 'Alt+Left', |
| }, |
| }, |
| { |
| name: 'shift modifier', |
| binding: new KeyBinding('shift+up'), |
| expected: { |
| darwin: 'Shift+Up', |
| win32: 'Shift+Up', |
| linux: 'Shift+Up', |
| default: 'Shift+Up', |
| }, |
| }, |
| { |
| name: 'multiple modifiers (ctrl+shift)', |
| binding: new KeyBinding('ctrl+shift+z'), |
| expected: { |
| darwin: 'Ctrl+Shift+Z', |
| win32: 'Ctrl+Shift+Z', |
| linux: 'Ctrl+Shift+Z', |
| default: 'Ctrl+Shift+Z', |
| }, |
| }, |
| { |
| name: 'all modifiers', |
| binding: new KeyBinding('ctrl+alt+shift+cmd+a'), |
| expected: { |
| darwin: 'Ctrl+Option+Shift+Cmd+A', |
| win32: 'Ctrl+Alt+Shift+Win+A', |
| linux: 'Ctrl+Alt+Shift+Super+A', |
| default: 'Ctrl+Alt+Shift+Cmd/Win+A', |
| }, |
| }, |
| ]; |
|
|
| testCases.forEach(({ name, binding, expected }) => { |
| describe(`${name}`, () => { |
| it('formats correctly for darwin', () => { |
| expect(formatKeyBinding(binding, 'darwin')).toBe(expected.darwin); |
| }); |
| it('formats correctly for win32', () => { |
| expect(formatKeyBinding(binding, 'win32')).toBe(expected.win32); |
| }); |
| it('formats correctly for linux', () => { |
| expect(formatKeyBinding(binding, 'linux')).toBe(expected.linux); |
| }); |
| it('formats correctly for default', () => { |
| expect(formatKeyBinding(binding, 'default')).toBe(expected.default); |
| }); |
| }); |
| }); |
| }); |
|
|
| describe('formatCommand', () => { |
| it('formats default commands (using default platform behavior)', () => { |
| expect(formatCommand(Command.QUIT, undefined, 'default')).toBe('Ctrl+C'); |
| expect(formatCommand(Command.SUBMIT, undefined, 'default')).toBe('Enter'); |
| expect( |
| formatCommand(Command.TOGGLE_BACKGROUND_SHELL, undefined, 'default'), |
| ).toBe('Ctrl+B'); |
| }); |
|
|
| it('returns empty string for unknown commands', () => { |
| expect( |
| formatCommand( |
| 'unknown.command' as unknown as Command, |
| undefined, |
| 'default', |
| ), |
| ).toBe(''); |
| }); |
| }); |
| }); |
|
|