Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/test/browser/mainThreadCommands.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 { MainThreadCommands } from '../../browser/mainThreadCommands.js';
8
import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';
9
import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js';
10
import { IExtensionService } from '../../../services/extensions/common/extensions.js';
11
import { mock } from '../../../../base/test/common/mock.js';
12
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
13
14
suite('MainThreadCommands', function () {
15
16
ensureNoDisposablesAreLeakedInTestSuite();
17
18
test('dispose on unregister', function () {
19
20
const commands = new MainThreadCommands(SingleProxyRPCProtocol(null), undefined!, new class extends mock<IExtensionService>() { });
21
assert.strictEqual(CommandsRegistry.getCommand('foo'), undefined);
22
23
// register
24
commands.$registerCommand('foo');
25
assert.ok(CommandsRegistry.getCommand('foo'));
26
27
// unregister
28
commands.$unregisterCommand('foo');
29
assert.strictEqual(CommandsRegistry.getCommand('foo'), undefined);
30
31
commands.dispose();
32
33
});
34
35
test('unregister all on dispose', function () {
36
37
const commands = new MainThreadCommands(SingleProxyRPCProtocol(null), undefined!, new class extends mock<IExtensionService>() { });
38
assert.strictEqual(CommandsRegistry.getCommand('foo'), undefined);
39
40
commands.$registerCommand('foo');
41
commands.$registerCommand('bar');
42
43
assert.ok(CommandsRegistry.getCommand('foo'));
44
assert.ok(CommandsRegistry.getCommand('bar'));
45
46
commands.dispose();
47
48
assert.strictEqual(CommandsRegistry.getCommand('foo'), undefined);
49
assert.strictEqual(CommandsRegistry.getCommand('bar'), undefined);
50
});
51
52
test('activate and throw when needed', async function () {
53
54
const activations: string[] = [];
55
const runs: string[] = [];
56
57
const commands = new MainThreadCommands(
58
SingleProxyRPCProtocol(null),
59
new class extends mock<ICommandService>() {
60
override executeCommand<T>(id: string): Promise<T | undefined> {
61
runs.push(id);
62
return Promise.resolve(undefined);
63
}
64
},
65
new class extends mock<IExtensionService>() {
66
override activateByEvent(id: string) {
67
activations.push(id);
68
return Promise.resolve();
69
}
70
}
71
);
72
73
// case 1: arguments and retry
74
try {
75
activations.length = 0;
76
await commands.$executeCommand('bazz', [1, 2, { n: 3 }], true);
77
assert.ok(false);
78
} catch (e) {
79
assert.deepStrictEqual(activations, ['onCommand:bazz']);
80
assert.strictEqual((<Error>e).message, '$executeCommand:retry');
81
}
82
83
// case 2: no arguments and retry
84
runs.length = 0;
85
await commands.$executeCommand('bazz', [], true);
86
assert.deepStrictEqual(runs, ['bazz']);
87
88
// case 3: arguments and no retry
89
runs.length = 0;
90
await commands.$executeCommand('bazz', [1, 2, true], false);
91
assert.deepStrictEqual(runs, ['bazz']);
92
93
commands.dispose();
94
});
95
});
96
97