Path: blob/main/src/vs/base/test/common/keyCodes.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { EVENT_KEY_CODE_MAP, IMMUTABLE_CODE_TO_KEY_CODE, IMMUTABLE_KEY_CODE_TO_CODE, KeyChord, KeyCode, KeyCodeUtils, KeyMod, NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE, ScanCode, ScanCodeUtils } from '../../common/keyCodes.js';7import { decodeKeybinding, KeyCodeChord, Keybinding } from '../../common/keybindings.js';8import { OperatingSystem } from '../../common/platform.js';9import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';1011suite('keyCodes', () => {1213ensureNoDisposablesAreLeakedInTestSuite();1415function testBinaryEncoding(expected: Keybinding | null, k: number, OS: OperatingSystem): void {16assert.deepStrictEqual(decodeKeybinding(k, OS), expected);17}1819test('mapping for Minus', () => {20// [147, 83, 0, ScanCode.Minus, 'Minus', KeyCode.US_MINUS, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'],21assert.strictEqual(EVENT_KEY_CODE_MAP[189], KeyCode.Minus);22assert.strictEqual(NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE['VK_OEM_MINUS'], KeyCode.Minus);23assert.strictEqual(ScanCodeUtils.lowerCaseToEnum('minus'), ScanCode.Minus);24assert.strictEqual(ScanCodeUtils.toEnum('Minus'), ScanCode.Minus);25assert.strictEqual(ScanCodeUtils.toString(ScanCode.Minus), 'Minus');26assert.strictEqual(IMMUTABLE_CODE_TO_KEY_CODE[ScanCode.Minus], KeyCode.DependsOnKbLayout);27assert.strictEqual(IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Minus], ScanCode.DependsOnKbLayout);28assert.strictEqual(KeyCodeUtils.toString(KeyCode.Minus), '-');29assert.strictEqual(KeyCodeUtils.fromString('-'), KeyCode.Minus);30assert.strictEqual(KeyCodeUtils.toUserSettingsUS(KeyCode.Minus), '-');31assert.strictEqual(KeyCodeUtils.toUserSettingsGeneral(KeyCode.Minus), 'OEM_MINUS');32assert.strictEqual(KeyCodeUtils.fromUserSettings('-'), KeyCode.Minus);33assert.strictEqual(KeyCodeUtils.fromUserSettings('OEM_MINUS'), KeyCode.Minus);34assert.strictEqual(KeyCodeUtils.fromUserSettings('oem_minus'), KeyCode.Minus);35});3637test('mapping for Space', () => {38// [21, 10, 1, ScanCode.Space, 'Space', KeyCode.Space, 'Space', 32, 'VK_SPACE', empty, empty],39assert.strictEqual(EVENT_KEY_CODE_MAP[32], KeyCode.Space);40assert.strictEqual(NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE['VK_SPACE'], KeyCode.Space);41assert.strictEqual(ScanCodeUtils.lowerCaseToEnum('space'), ScanCode.Space);42assert.strictEqual(ScanCodeUtils.toEnum('Space'), ScanCode.Space);43assert.strictEqual(ScanCodeUtils.toString(ScanCode.Space), 'Space');44assert.strictEqual(IMMUTABLE_CODE_TO_KEY_CODE[ScanCode.Space], KeyCode.Space);45assert.strictEqual(IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Space], ScanCode.Space);46assert.strictEqual(KeyCodeUtils.toString(KeyCode.Space), 'Space');47assert.strictEqual(KeyCodeUtils.fromString('Space'), KeyCode.Space);48assert.strictEqual(KeyCodeUtils.toUserSettingsUS(KeyCode.Space), 'Space');49assert.strictEqual(KeyCodeUtils.toUserSettingsGeneral(KeyCode.Space), 'Space');50assert.strictEqual(KeyCodeUtils.fromUserSettings('Space'), KeyCode.Space);51assert.strictEqual(KeyCodeUtils.fromUserSettings('space'), KeyCode.Space);52});5354test('MAC binary encoding', () => {5556function test(expected: Keybinding | null, k: number): void {57testBinaryEncoding(expected, k, OperatingSystem.Macintosh);58}5960test(null, 0);61test(new KeyCodeChord(false, false, false, false, KeyCode.Enter).toKeybinding(), KeyCode.Enter);62test(new KeyCodeChord(true, false, false, false, KeyCode.Enter).toKeybinding(), KeyMod.WinCtrl | KeyCode.Enter);63test(new KeyCodeChord(false, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyCode.Enter);64test(new KeyCodeChord(true, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);65test(new KeyCodeChord(false, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyCode.Enter);66test(new KeyCodeChord(true, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);67test(new KeyCodeChord(false, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);68test(new KeyCodeChord(true, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);69test(new KeyCodeChord(false, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyCode.Enter);70test(new KeyCodeChord(true, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);71test(new KeyCodeChord(false, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);72test(new KeyCodeChord(true, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);73test(new KeyCodeChord(false, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);74test(new KeyCodeChord(true, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);75test(new KeyCodeChord(false, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);76test(new KeyCodeChord(true, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);7778test(79new Keybinding([80new KeyCodeChord(false, false, false, false, KeyCode.Enter),81new KeyCodeChord(false, false, false, false, KeyCode.Tab)82]),83KeyChord(KeyCode.Enter, KeyCode.Tab)84);85test(86new Keybinding([87new KeyCodeChord(false, false, false, true, KeyCode.KeyY),88new KeyCodeChord(false, false, false, false, KeyCode.KeyZ)89]),90KeyChord(KeyMod.CtrlCmd | KeyCode.KeyY, KeyCode.KeyZ)91);92});9394test('WINDOWS & LINUX binary encoding', () => {9596[OperatingSystem.Linux, OperatingSystem.Windows].forEach((OS) => {9798function test(expected: Keybinding | null, k: number): void {99testBinaryEncoding(expected, k, OS);100}101102test(null, 0);103test(new KeyCodeChord(false, false, false, false, KeyCode.Enter).toKeybinding(), KeyCode.Enter);104test(new KeyCodeChord(false, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.WinCtrl | KeyCode.Enter);105test(new KeyCodeChord(false, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyCode.Enter);106test(new KeyCodeChord(false, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);107test(new KeyCodeChord(false, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyCode.Enter);108test(new KeyCodeChord(false, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);109test(new KeyCodeChord(false, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);110test(new KeyCodeChord(false, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);111test(new KeyCodeChord(true, false, false, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyCode.Enter);112test(new KeyCodeChord(true, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);113test(new KeyCodeChord(true, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);114test(new KeyCodeChord(true, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);115test(new KeyCodeChord(true, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);116test(new KeyCodeChord(true, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);117test(new KeyCodeChord(true, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);118test(new KeyCodeChord(true, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);119120test(121new Keybinding([122new KeyCodeChord(false, false, false, false, KeyCode.Enter),123new KeyCodeChord(false, false, false, false, KeyCode.Tab)124]),125KeyChord(KeyCode.Enter, KeyCode.Tab)126);127test(128new Keybinding([129new KeyCodeChord(true, false, false, false, KeyCode.KeyY),130new KeyCodeChord(false, false, false, false, KeyCode.KeyZ)131]),132KeyChord(KeyMod.CtrlCmd | KeyCode.KeyY, KeyCode.KeyZ)133);134135});136});137});138139140