From b8084ba8158b89facd49fd78a51abb80b1db54da Mon Sep 17 00:00:00 2001 From: Lee Won Jun Date: Sat, 9 Aug 2025 16:03:17 +0900 Subject: Centralize Key Binding Logic and Refactor (Reopen) (#5356) Co-authored-by: Lee-WonJun <10369528+Lee-WonJun@users.noreply.github.com> --- packages/cli/src/config/keyBindings.test.ts | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 packages/cli/src/config/keyBindings.test.ts (limited to 'packages/cli/src/config/keyBindings.test.ts') diff --git a/packages/cli/src/config/keyBindings.test.ts b/packages/cli/src/config/keyBindings.test.ts new file mode 100644 index 00000000..2e89e421 --- /dev/null +++ b/packages/cli/src/config/keyBindings.test.ts @@ -0,0 +1,62 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { describe, it, expect } from 'vitest'; +import { + Command, + KeyBindingConfig, + defaultKeyBindings, +} from './keyBindings.js'; + +describe('keyBindings config', () => { + describe('defaultKeyBindings', () => { + it('should have bindings for all commands', () => { + const commands = Object.values(Command); + + for (const command of commands) { + expect(defaultKeyBindings[command]).toBeDefined(); + expect(Array.isArray(defaultKeyBindings[command])).toBe(true); + } + }); + + it('should have valid key binding structures', () => { + for (const [_, bindings] of Object.entries(defaultKeyBindings)) { + for (const binding of bindings) { + // Each binding should have either key or sequence, but not both + const hasKey = binding.key !== undefined; + const hasSequence = binding.sequence !== undefined; + + expect(hasKey || hasSequence).toBe(true); + expect(hasKey && hasSequence).toBe(false); + + // Modifier properties should be boolean or undefined + if (binding.ctrl !== undefined) { + expect(typeof binding.ctrl).toBe('boolean'); + } + if (binding.shift !== undefined) { + expect(typeof binding.shift).toBe('boolean'); + } + if (binding.command !== undefined) { + expect(typeof binding.command).toBe('boolean'); + } + if (binding.paste !== undefined) { + expect(typeof binding.paste).toBe('boolean'); + } + } + } + }); + + it('should export all required types', () => { + // Basic type checks + expect(typeof Command.HOME).toBe('string'); + expect(typeof Command.END).toBe('string'); + + // Config should be readonly + const config: KeyBindingConfig = defaultKeyBindings; + expect(config[Command.HOME]).toBeDefined(); + }); + }); +}); -- cgit v1.2.3