Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/test/common/keyCodes.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { 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';
8
import { decodeKeybinding, KeyCodeChord, Keybinding } from '../../common/keybindings.js';
9
import { OperatingSystem } from '../../common/platform.js';
10
import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';
11
12
suite('keyCodes', () => {
13
14
ensureNoDisposablesAreLeakedInTestSuite();
15
16
function testBinaryEncoding(expected: Keybinding | null, k: number, OS: OperatingSystem): void {
17
assert.deepStrictEqual(decodeKeybinding(k, OS), expected);
18
}
19
20
test('mapping for Minus', () => {
21
// [147, 83, 0, ScanCode.Minus, 'Minus', KeyCode.US_MINUS, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'],
22
assert.strictEqual(EVENT_KEY_CODE_MAP[189], KeyCode.Minus);
23
assert.strictEqual(NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE['VK_OEM_MINUS'], KeyCode.Minus);
24
assert.strictEqual(ScanCodeUtils.lowerCaseToEnum('minus'), ScanCode.Minus);
25
assert.strictEqual(ScanCodeUtils.toEnum('Minus'), ScanCode.Minus);
26
assert.strictEqual(ScanCodeUtils.toString(ScanCode.Minus), 'Minus');
27
assert.strictEqual(IMMUTABLE_CODE_TO_KEY_CODE[ScanCode.Minus], KeyCode.DependsOnKbLayout);
28
assert.strictEqual(IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Minus], ScanCode.DependsOnKbLayout);
29
assert.strictEqual(KeyCodeUtils.toString(KeyCode.Minus), '-');
30
assert.strictEqual(KeyCodeUtils.fromString('-'), KeyCode.Minus);
31
assert.strictEqual(KeyCodeUtils.toUserSettingsUS(KeyCode.Minus), '-');
32
assert.strictEqual(KeyCodeUtils.toUserSettingsGeneral(KeyCode.Minus), 'OEM_MINUS');
33
assert.strictEqual(KeyCodeUtils.fromUserSettings('-'), KeyCode.Minus);
34
assert.strictEqual(KeyCodeUtils.fromUserSettings('OEM_MINUS'), KeyCode.Minus);
35
assert.strictEqual(KeyCodeUtils.fromUserSettings('oem_minus'), KeyCode.Minus);
36
});
37
38
test('mapping for Space', () => {
39
// [21, 10, 1, ScanCode.Space, 'Space', KeyCode.Space, 'Space', 32, 'VK_SPACE', empty, empty],
40
assert.strictEqual(EVENT_KEY_CODE_MAP[32], KeyCode.Space);
41
assert.strictEqual(NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE['VK_SPACE'], KeyCode.Space);
42
assert.strictEqual(ScanCodeUtils.lowerCaseToEnum('space'), ScanCode.Space);
43
assert.strictEqual(ScanCodeUtils.toEnum('Space'), ScanCode.Space);
44
assert.strictEqual(ScanCodeUtils.toString(ScanCode.Space), 'Space');
45
assert.strictEqual(IMMUTABLE_CODE_TO_KEY_CODE[ScanCode.Space], KeyCode.Space);
46
assert.strictEqual(IMMUTABLE_KEY_CODE_TO_CODE[KeyCode.Space], ScanCode.Space);
47
assert.strictEqual(KeyCodeUtils.toString(KeyCode.Space), 'Space');
48
assert.strictEqual(KeyCodeUtils.fromString('Space'), KeyCode.Space);
49
assert.strictEqual(KeyCodeUtils.toUserSettingsUS(KeyCode.Space), 'Space');
50
assert.strictEqual(KeyCodeUtils.toUserSettingsGeneral(KeyCode.Space), 'Space');
51
assert.strictEqual(KeyCodeUtils.fromUserSettings('Space'), KeyCode.Space);
52
assert.strictEqual(KeyCodeUtils.fromUserSettings('space'), KeyCode.Space);
53
});
54
55
test('MAC binary encoding', () => {
56
57
function test(expected: Keybinding | null, k: number): void {
58
testBinaryEncoding(expected, k, OperatingSystem.Macintosh);
59
}
60
61
test(null, 0);
62
test(new KeyCodeChord(false, false, false, false, KeyCode.Enter).toKeybinding(), KeyCode.Enter);
63
test(new KeyCodeChord(true, false, false, false, KeyCode.Enter).toKeybinding(), KeyMod.WinCtrl | KeyCode.Enter);
64
test(new KeyCodeChord(false, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyCode.Enter);
65
test(new KeyCodeChord(true, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
66
test(new KeyCodeChord(false, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyCode.Enter);
67
test(new KeyCodeChord(true, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
68
test(new KeyCodeChord(false, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
69
test(new KeyCodeChord(true, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
70
test(new KeyCodeChord(false, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyCode.Enter);
71
test(new KeyCodeChord(true, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
72
test(new KeyCodeChord(false, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
73
test(new KeyCodeChord(true, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
74
test(new KeyCodeChord(false, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
75
test(new KeyCodeChord(true, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
76
test(new KeyCodeChord(false, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
77
test(new KeyCodeChord(true, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
78
79
test(
80
new Keybinding([
81
new KeyCodeChord(false, false, false, false, KeyCode.Enter),
82
new KeyCodeChord(false, false, false, false, KeyCode.Tab)
83
]),
84
KeyChord(KeyCode.Enter, KeyCode.Tab)
85
);
86
test(
87
new Keybinding([
88
new KeyCodeChord(false, false, false, true, KeyCode.KeyY),
89
new KeyCodeChord(false, false, false, false, KeyCode.KeyZ)
90
]),
91
KeyChord(KeyMod.CtrlCmd | KeyCode.KeyY, KeyCode.KeyZ)
92
);
93
});
94
95
test('WINDOWS & LINUX binary encoding', () => {
96
97
[OperatingSystem.Linux, OperatingSystem.Windows].forEach((OS) => {
98
99
function test(expected: Keybinding | null, k: number): void {
100
testBinaryEncoding(expected, k, OS);
101
}
102
103
test(null, 0);
104
test(new KeyCodeChord(false, false, false, false, KeyCode.Enter).toKeybinding(), KeyCode.Enter);
105
test(new KeyCodeChord(false, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.WinCtrl | KeyCode.Enter);
106
test(new KeyCodeChord(false, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyCode.Enter);
107
test(new KeyCodeChord(false, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
108
test(new KeyCodeChord(false, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyCode.Enter);
109
test(new KeyCodeChord(false, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
110
test(new KeyCodeChord(false, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
111
test(new KeyCodeChord(false, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
112
test(new KeyCodeChord(true, false, false, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyCode.Enter);
113
test(new KeyCodeChord(true, false, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
114
test(new KeyCodeChord(true, false, true, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
115
test(new KeyCodeChord(true, false, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
116
test(new KeyCodeChord(true, true, false, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
117
test(new KeyCodeChord(true, true, false, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
118
test(new KeyCodeChord(true, true, true, false, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
119
test(new KeyCodeChord(true, true, true, true, KeyCode.Enter).toKeybinding(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
120
121
test(
122
new Keybinding([
123
new KeyCodeChord(false, false, false, false, KeyCode.Enter),
124
new KeyCodeChord(false, false, false, false, KeyCode.Tab)
125
]),
126
KeyChord(KeyCode.Enter, KeyCode.Tab)
127
);
128
test(
129
new Keybinding([
130
new KeyCodeChord(true, false, false, false, KeyCode.KeyY),
131
new KeyCodeChord(false, false, false, false, KeyCode.KeyZ)
132
]),
133
KeyChord(KeyMod.CtrlCmd | KeyCode.KeyY, KeyCode.KeyZ)
134
);
135
136
});
137
});
138
});
139
140