Path: blob/main/src/vs/workbench/services/keybinding/test/node/fallbackKeyboardMapper.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 { KeyChord, KeyCode, KeyMod, ScanCode } from '../../../../../base/common/keyCodes.js';6import { KeyCodeChord, decodeKeybinding, ScanCodeChord, Keybinding } from '../../../../../base/common/keybindings.js';7import { OperatingSystem } from '../../../../../base/common/platform.js';8import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';9import { FallbackKeyboardMapper } from '../../common/fallbackKeyboardMapper.js';10import { IResolvedKeybinding, assertResolveKeyboardEvent, assertResolveKeybinding } from './keyboardMapperTestUtils.js';1112suite('keyboardMapper - MAC fallback', () => {1314ensureNoDisposablesAreLeakedInTestSuite();1516const mapper = new FallbackKeyboardMapper(false, OperatingSystem.Macintosh);1718function _assertResolveKeybinding(k: number, expected: IResolvedKeybinding[]): void {19assertResolveKeybinding(mapper, decodeKeybinding(k, OperatingSystem.Macintosh)!, expected);20}2122test('resolveKeybinding Cmd+Z', () => {23_assertResolveKeybinding(24KeyMod.CtrlCmd | KeyCode.KeyZ,25[{26label: '⌘Z',27ariaLabel: 'Command+Z',28electronAccelerator: 'Cmd+Z',29userSettingsLabel: 'cmd+z',30isWYSIWYG: true,31isMultiChord: false,32dispatchParts: ['meta+Z'],33singleModifierDispatchParts: [null],34}]35);36});3738test('resolveKeybinding Cmd+K Cmd+=', () => {39_assertResolveKeybinding(40KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Equal),41[{42label: '⌘K ⌘=',43ariaLabel: 'Command+K Command+=',44electronAccelerator: null,45userSettingsLabel: 'cmd+k cmd+=',46isWYSIWYG: true,47isMultiChord: true,48dispatchParts: ['meta+K', 'meta+='],49singleModifierDispatchParts: [null, null],50}]51);52});5354test('resolveKeyboardEvent Cmd+Z', () => {55assertResolveKeyboardEvent(56mapper,57{58_standardKeyboardEventBrand: true,59ctrlKey: false,60shiftKey: false,61altKey: false,62metaKey: true,63altGraphKey: false,64keyCode: KeyCode.KeyZ,65code: null!66},67{68label: '⌘Z',69ariaLabel: 'Command+Z',70electronAccelerator: 'Cmd+Z',71userSettingsLabel: 'cmd+z',72isWYSIWYG: true,73isMultiChord: false,74dispatchParts: ['meta+Z'],75singleModifierDispatchParts: [null],76}77);78});7980test('resolveUserBinding Cmd+[Comma] Cmd+/', () => {81assertResolveKeybinding(82mapper, new Keybinding([83new ScanCodeChord(false, false, false, true, ScanCode.Comma),84new KeyCodeChord(false, false, false, true, KeyCode.Slash),85]),86[{87label: '⌘, ⌘/',88ariaLabel: 'Command+, Command+/',89electronAccelerator: null,90userSettingsLabel: 'cmd+, cmd+/',91isWYSIWYG: true,92isMultiChord: true,93dispatchParts: ['meta+,', 'meta+/'],94singleModifierDispatchParts: [null, null],95}]96);97});9899test('resolveKeyboardEvent Single Modifier Meta+', () => {100assertResolveKeyboardEvent(101mapper,102{103_standardKeyboardEventBrand: true,104ctrlKey: false,105shiftKey: false,106altKey: false,107metaKey: true,108altGraphKey: false,109keyCode: KeyCode.Meta,110code: null!111},112{113label: '⌘',114ariaLabel: 'Command',115electronAccelerator: null,116userSettingsLabel: 'cmd',117isWYSIWYG: true,118isMultiChord: false,119dispatchParts: [null],120singleModifierDispatchParts: ['meta'],121}122);123});124125test('resolveKeyboardEvent Single Modifier Shift+', () => {126assertResolveKeyboardEvent(127mapper,128{129_standardKeyboardEventBrand: true,130ctrlKey: false,131shiftKey: true,132altKey: false,133metaKey: false,134altGraphKey: false,135keyCode: KeyCode.Shift,136code: null!137},138{139label: '⇧',140ariaLabel: 'Shift',141electronAccelerator: null,142userSettingsLabel: 'shift',143isWYSIWYG: true,144isMultiChord: false,145dispatchParts: [null],146singleModifierDispatchParts: ['shift'],147}148);149});150151test('resolveKeyboardEvent Single Modifier Alt+', () => {152assertResolveKeyboardEvent(153mapper,154{155_standardKeyboardEventBrand: true,156ctrlKey: false,157shiftKey: false,158altKey: true,159metaKey: false,160altGraphKey: false,161keyCode: KeyCode.Alt,162code: null!163},164{165label: '⌥',166ariaLabel: 'Option',167electronAccelerator: null,168userSettingsLabel: 'alt',169isWYSIWYG: true,170isMultiChord: false,171dispatchParts: [null],172singleModifierDispatchParts: ['alt'],173}174);175});176177test('resolveKeyboardEvent Only Modifiers Ctrl+Shift+', () => {178assertResolveKeyboardEvent(179mapper,180{181_standardKeyboardEventBrand: true,182ctrlKey: true,183shiftKey: true,184altKey: false,185metaKey: false,186altGraphKey: false,187keyCode: KeyCode.Shift,188code: null!189},190{191label: '⌃⇧',192ariaLabel: 'Control+Shift',193electronAccelerator: null,194userSettingsLabel: 'ctrl+shift',195isWYSIWYG: true,196isMultiChord: false,197dispatchParts: [null],198singleModifierDispatchParts: [null],199}200);201});202203test('resolveKeyboardEvent mapAltGrToCtrlAlt AltGr+Z', () => {204const mapper = new FallbackKeyboardMapper(true, OperatingSystem.Macintosh);205206assertResolveKeyboardEvent(207mapper,208{209_standardKeyboardEventBrand: true,210ctrlKey: false,211shiftKey: false,212altKey: false,213metaKey: false,214altGraphKey: true,215keyCode: KeyCode.KeyZ,216code: null!217},218{219label: '⌃⌥Z',220ariaLabel: 'Control+Option+Z',221electronAccelerator: 'Ctrl+Alt+Z',222userSettingsLabel: 'ctrl+alt+z',223isWYSIWYG: true,224isMultiChord: false,225dispatchParts: ['ctrl+alt+Z'],226singleModifierDispatchParts: [null],227}228);229});230});231232suite('keyboardMapper - LINUX fallback', () => {233234ensureNoDisposablesAreLeakedInTestSuite();235236const mapper = new FallbackKeyboardMapper(false, OperatingSystem.Linux);237238function _assertResolveKeybinding(k: number, expected: IResolvedKeybinding[]): void {239assertResolveKeybinding(mapper, decodeKeybinding(k, OperatingSystem.Linux)!, expected);240}241242test('resolveKeybinding Ctrl+Z', () => {243_assertResolveKeybinding(244KeyMod.CtrlCmd | KeyCode.KeyZ,245[{246label: 'Ctrl+Z',247ariaLabel: 'Control+Z',248electronAccelerator: 'Ctrl+Z',249userSettingsLabel: 'ctrl+z',250isWYSIWYG: true,251isMultiChord: false,252dispatchParts: ['ctrl+Z'],253singleModifierDispatchParts: [null],254}]255);256});257258test('resolveKeybinding Ctrl+K Ctrl+=', () => {259_assertResolveKeybinding(260KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Equal),261[{262label: 'Ctrl+K Ctrl+=',263ariaLabel: 'Control+K Control+=',264electronAccelerator: null,265userSettingsLabel: 'ctrl+k ctrl+=',266isWYSIWYG: true,267isMultiChord: true,268dispatchParts: ['ctrl+K', 'ctrl+='],269singleModifierDispatchParts: [null, null],270}]271);272});273274test('resolveKeyboardEvent Ctrl+Z', () => {275assertResolveKeyboardEvent(276mapper,277{278_standardKeyboardEventBrand: true,279ctrlKey: true,280shiftKey: false,281altKey: false,282metaKey: false,283altGraphKey: false,284keyCode: KeyCode.KeyZ,285code: null!286},287{288label: 'Ctrl+Z',289ariaLabel: 'Control+Z',290electronAccelerator: 'Ctrl+Z',291userSettingsLabel: 'ctrl+z',292isWYSIWYG: true,293isMultiChord: false,294dispatchParts: ['ctrl+Z'],295singleModifierDispatchParts: [null],296}297);298});299300test('resolveUserBinding Ctrl+[Comma] Ctrl+/', () => {301assertResolveKeybinding(302mapper, new Keybinding([303new ScanCodeChord(true, false, false, false, ScanCode.Comma),304new KeyCodeChord(true, false, false, false, KeyCode.Slash),305]),306[{307label: 'Ctrl+, Ctrl+/',308ariaLabel: 'Control+, Control+/',309electronAccelerator: null,310userSettingsLabel: 'ctrl+, ctrl+/',311isWYSIWYG: true,312isMultiChord: true,313dispatchParts: ['ctrl+,', 'ctrl+/'],314singleModifierDispatchParts: [null, null],315}]316);317});318319test('resolveUserBinding Ctrl+[Comma]', () => {320assertResolveKeybinding(321mapper, new Keybinding([322new ScanCodeChord(true, false, false, false, ScanCode.Comma),323]),324[{325label: 'Ctrl+,',326ariaLabel: 'Control+,',327electronAccelerator: 'Ctrl+,',328userSettingsLabel: 'ctrl+,',329isWYSIWYG: true,330isMultiChord: false,331dispatchParts: ['ctrl+,'],332singleModifierDispatchParts: [null],333}]334);335});336337test('resolveKeyboardEvent Single Modifier Ctrl+', () => {338assertResolveKeyboardEvent(339mapper,340{341_standardKeyboardEventBrand: true,342ctrlKey: true,343shiftKey: false,344altKey: false,345metaKey: false,346altGraphKey: false,347keyCode: KeyCode.Ctrl,348code: null!349},350{351label: 'Ctrl',352ariaLabel: 'Control',353electronAccelerator: null,354userSettingsLabel: 'ctrl',355isWYSIWYG: true,356isMultiChord: false,357dispatchParts: [null],358singleModifierDispatchParts: ['ctrl'],359}360);361});362363test('resolveKeyboardEvent mapAltGrToCtrlAlt AltGr+Z', () => {364const mapper = new FallbackKeyboardMapper(true, OperatingSystem.Linux);365366assertResolveKeyboardEvent(367mapper,368{369_standardKeyboardEventBrand: true,370ctrlKey: false,371shiftKey: false,372altKey: false,373metaKey: false,374altGraphKey: true,375keyCode: KeyCode.KeyZ,376code: null!377},378{379label: 'Ctrl+Alt+Z',380ariaLabel: 'Control+Alt+Z',381electronAccelerator: 'Ctrl+Alt+Z',382userSettingsLabel: 'ctrl+alt+z',383isWYSIWYG: true,384isMultiChord: false,385dispatchParts: ['ctrl+alt+Z'],386singleModifierDispatchParts: [null],387}388);389});390});391392393