| import { afterEach, describe, expect, it, vi } from 'vitest' |
|
|
| const originalPlatform = process.platform |
|
|
| async function importPlatform(platform: NodeJS.Platform) { |
| vi.resetModules() |
| Object.defineProperty(process, 'platform', { value: platform }) |
|
|
| return import('../lib/platform.js') |
| } |
|
|
| afterEach(() => { |
| Object.defineProperty(process, 'platform', { value: originalPlatform }) |
| vi.resetModules() |
| }) |
|
|
| describe('platform action modifier', () => { |
| it('treats kitty Cmd sequences as the macOS action modifier', async () => { |
| const { isActionMod } = await importPlatform('darwin') |
|
|
| expect(isActionMod({ ctrl: false, meta: false, super: true })).toBe(true) |
| expect(isActionMod({ ctrl: false, meta: true, super: false })).toBe(true) |
| expect(isActionMod({ ctrl: true, meta: false, super: false })).toBe(false) |
| }) |
|
|
| it('still uses Ctrl as the action modifier on non-macOS', async () => { |
| const { isActionMod } = await importPlatform('linux') |
|
|
| expect(isActionMod({ ctrl: true, meta: false, super: false })).toBe(true) |
| expect(isActionMod({ ctrl: false, meta: false, super: true })).toBe(false) |
| }) |
| }) |
|
|
| describe('isVoiceToggleKey', () => { |
| it('matches raw Ctrl+B on macOS (doc-default across platforms)', async () => { |
| const { isVoiceToggleKey } = await importPlatform('darwin') |
|
|
| expect(isVoiceToggleKey({ ctrl: true, meta: false, super: false }, 'b')).toBe(true) |
| expect(isVoiceToggleKey({ ctrl: true, meta: false, super: false }, 'B')).toBe(true) |
| }) |
|
|
| it('matches Cmd+B on macOS (preserve platform muscle memory)', async () => { |
| const { isVoiceToggleKey } = await importPlatform('darwin') |
|
|
| expect(isVoiceToggleKey({ ctrl: false, meta: true, super: false }, 'b')).toBe(true) |
| expect(isVoiceToggleKey({ ctrl: false, meta: false, super: true }, 'b')).toBe(true) |
| }) |
|
|
| it('matches Ctrl+B on non-macOS platforms', async () => { |
| const { isVoiceToggleKey } = await importPlatform('linux') |
|
|
| expect(isVoiceToggleKey({ ctrl: true, meta: false, super: false }, 'b')).toBe(true) |
| }) |
|
|
| it('does not match unmodified b or other Ctrl combos', async () => { |
| const { isVoiceToggleKey } = await importPlatform('darwin') |
|
|
| expect(isVoiceToggleKey({ ctrl: false, meta: false, super: false }, 'b')).toBe(false) |
| expect(isVoiceToggleKey({ ctrl: true, meta: false, super: false }, 'a')).toBe(false) |
| expect(isVoiceToggleKey({ ctrl: true, meta: false, super: false }, 'c')).toBe(false) |
| }) |
| }) |
|
|
| describe('isMacActionFallback', () => { |
| it('routes raw Ctrl+K and Ctrl+W to readline kill-to-end / delete-word on macOS', async () => { |
| const { isMacActionFallback } = await importPlatform('darwin') |
|
|
| expect(isMacActionFallback({ ctrl: true, meta: false, super: false }, 'k', 'k')).toBe(true) |
| expect(isMacActionFallback({ ctrl: true, meta: false, super: false }, 'w', 'w')).toBe(true) |
| |
| expect(isMacActionFallback({ ctrl: true, meta: true, super: false }, 'k', 'k')).toBe(false) |
| expect(isMacActionFallback({ ctrl: true, meta: false, super: true }, 'w', 'w')).toBe(false) |
| }) |
|
|
| it('is a no-op on non-macOS (Linux routes Ctrl+K/W through isActionMod directly)', async () => { |
| const { isMacActionFallback } = await importPlatform('linux') |
|
|
| expect(isMacActionFallback({ ctrl: true, meta: false, super: false }, 'k', 'k')).toBe(false) |
| expect(isMacActionFallback({ ctrl: true, meta: false, super: false }, 'w', 'w')).toBe(false) |
| }) |
| }) |
|
|