Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.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 { KeyCodeChord } from '../../../../../base/common/keybindings.js';
8
import { KeyCode } from '../../../../../base/common/keyCodes.js';
9
import { OperatingSystem } from '../../../../../base/common/platform.js';
10
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
11
import { organizeImportsCommandId, refactorCommandId } from '../../browser/codeAction.js';
12
import { CodeActionKeybindingResolver } from '../../browser/codeActionKeybindingResolver.js';
13
import { CodeActionKind } from '../../common/types.js';
14
import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';
15
import { ResolvedKeybindingItem } from '../../../../../platform/keybinding/common/resolvedKeybindingItem.js';
16
import { USLayoutResolvedKeybinding } from '../../../../../platform/keybinding/common/usLayoutResolvedKeybinding.js';
17
18
suite('CodeActionKeybindingResolver', () => {
19
20
ensureNoDisposablesAreLeakedInTestSuite();
21
22
const refactorKeybinding = createCodeActionKeybinding(
23
KeyCode.KeyA,
24
refactorCommandId,
25
{ kind: CodeActionKind.Refactor.value });
26
27
const refactorExtractKeybinding = createCodeActionKeybinding(
28
KeyCode.KeyB,
29
refactorCommandId,
30
{ kind: CodeActionKind.Refactor.append('extract').value });
31
32
const organizeImportsKeybinding = createCodeActionKeybinding(
33
KeyCode.KeyC,
34
organizeImportsCommandId,
35
undefined);
36
37
test('Should match refactor keybindings', async function () {
38
const resolver = new CodeActionKeybindingResolver(
39
createMockKeyBindingService([refactorKeybinding])
40
).getResolver();
41
42
assert.strictEqual(
43
resolver({ title: '' }),
44
undefined);
45
46
assert.strictEqual(
47
resolver({ title: '', kind: CodeActionKind.Refactor.value }),
48
refactorKeybinding.resolvedKeybinding);
49
50
assert.strictEqual(
51
resolver({ title: '', kind: CodeActionKind.Refactor.append('extract').value }),
52
refactorKeybinding.resolvedKeybinding);
53
54
assert.strictEqual(
55
resolver({ title: '', kind: CodeActionKind.QuickFix.value }),
56
undefined);
57
});
58
59
test('Should prefer most specific keybinding', async function () {
60
const resolver = new CodeActionKeybindingResolver(
61
createMockKeyBindingService([refactorKeybinding, refactorExtractKeybinding, organizeImportsKeybinding])
62
).getResolver();
63
64
assert.strictEqual(
65
resolver({ title: '', kind: CodeActionKind.Refactor.value }),
66
refactorKeybinding.resolvedKeybinding);
67
68
assert.strictEqual(
69
resolver({ title: '', kind: CodeActionKind.Refactor.append('extract').value }),
70
refactorExtractKeybinding.resolvedKeybinding);
71
});
72
73
test('Organize imports should still return a keybinding even though it does not have args', async function () {
74
const resolver = new CodeActionKeybindingResolver(
75
createMockKeyBindingService([refactorKeybinding, refactorExtractKeybinding, organizeImportsKeybinding])
76
).getResolver();
77
78
assert.strictEqual(
79
resolver({ title: '', kind: CodeActionKind.SourceOrganizeImports.value }),
80
organizeImportsKeybinding.resolvedKeybinding);
81
});
82
});
83
84
function createMockKeyBindingService(items: ResolvedKeybindingItem[]): IKeybindingService {
85
return <IKeybindingService>{
86
getKeybindings: (): readonly ResolvedKeybindingItem[] => {
87
return items;
88
},
89
};
90
}
91
92
function createCodeActionKeybinding(keycode: KeyCode, command: string, commandArgs: any) {
93
return new ResolvedKeybindingItem(
94
new USLayoutResolvedKeybinding(
95
[new KeyCodeChord(false, true, false, false, keycode)],
96
OperatingSystem.Linux),
97
command,
98
commandArgs,
99
undefined,
100
false,
101
null,
102
false);
103
}
104
105