Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/debug/test/browser/debugConfigurationManager.test.ts
5241 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 { CancellationToken } from '../../../../../base/common/cancellation.js';
8
import { Event } from '../../../../../base/common/event.js';
9
import { DisposableStore } from '../../../../../base/common/lifecycle.js';
10
import { URI } from '../../../../../base/common/uri.js';
11
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
12
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
13
import { TestConfigurationService } from '../../../../../platform/configuration/test/common/testConfigurationService.js';
14
import { ContextKeyService } from '../../../../../platform/contextkey/browser/contextKeyService.js';
15
import { FileService } from '../../../../../platform/files/common/fileService.js';
16
import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js';
17
import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js';
18
import { NullLogService } from '../../../../../platform/log/common/log.js';
19
import { UriIdentityService } from '../../../../../platform/uriIdentity/common/uriIdentityService.js';
20
import { ConfigurationManager } from '../../browser/debugConfigurationManager.js';
21
import { DebugConfigurationProviderTriggerKind, IAdapterManager, IConfig, IDebugAdapterExecutable, IDebugSession } from '../../common/debug.js';
22
import { IPreferencesService } from '../../../../services/preferences/common/preferences.js';
23
import { TestQuickInputService } from '../../../../test/browser/workbenchTestServices.js';
24
import { TestHistoryService, TestContextService, TestExtensionService, TestStorageService } from '../../../../test/common/workbenchTestServices.js';
25
26
suite('debugConfigurationManager', () => {
27
const configurationProviderType = 'custom-type';
28
let _debugConfigurationManager: ConfigurationManager;
29
let disposables: DisposableStore;
30
31
const adapterManager = <IAdapterManager>{
32
getDebugAdapterDescriptor(session: IDebugSession, config: IConfig): Promise<IDebugAdapterExecutable | undefined> {
33
return Promise.resolve(undefined);
34
},
35
36
activateDebuggers(activationEvent: string, debugType?: string): Promise<void> {
37
return Promise.resolve();
38
},
39
40
get onDidDebuggersExtPointRead(): Event<void> {
41
return Event.None;
42
}
43
};
44
45
const preferencesService = <IPreferencesService>{
46
userSettingsResource: URI.file('/tmp/settings.json')
47
};
48
49
const configurationService = new TestConfigurationService();
50
setup(() => {
51
disposables = new DisposableStore();
52
const fileService = disposables.add(new FileService(new NullLogService()));
53
const instantiationService = disposables.add(new TestInstantiationService(new ServiceCollection([IPreferencesService, preferencesService], [IConfigurationService, configurationService])));
54
_debugConfigurationManager = new ConfigurationManager(
55
adapterManager,
56
new TestContextService(),
57
configurationService,
58
new TestQuickInputService(),
59
instantiationService,
60
new TestStorageService(),
61
new TestExtensionService(),
62
new TestHistoryService(),
63
new UriIdentityService(fileService),
64
disposables.add(new ContextKeyService(configurationService)),
65
new NullLogService());
66
});
67
68
teardown(() => disposables.dispose());
69
70
ensureNoDisposablesAreLeakedInTestSuite();
71
72
test('resolves configuration based on type', async () => {
73
disposables.add(_debugConfigurationManager.registerDebugConfigurationProvider({
74
type: configurationProviderType,
75
resolveDebugConfiguration: (folderUri, config, token) => {
76
assert.strictEqual(config.type, configurationProviderType);
77
return Promise.resolve({
78
...config,
79
configurationResolved: true
80
});
81
},
82
triggerKind: DebugConfigurationProviderTriggerKind.Initial
83
}));
84
85
const initialConfig: IConfig = {
86
type: configurationProviderType,
87
request: 'launch',
88
name: 'configName',
89
};
90
91
const resultConfig = await _debugConfigurationManager.resolveConfigurationByProviders(undefined, configurationProviderType, initialConfig, CancellationToken.None);
92
// eslint-disable-next-line local/code-no-any-casts
93
assert.strictEqual((resultConfig as any).configurationResolved, true, 'Configuration should be updated by test provider');
94
});
95
96
test('resolves configuration from second provider if type changes', async () => {
97
const secondProviderType = 'second-provider';
98
disposables.add(_debugConfigurationManager.registerDebugConfigurationProvider({
99
type: configurationProviderType,
100
resolveDebugConfiguration: (folderUri, config, token) => {
101
assert.strictEqual(config.type, configurationProviderType);
102
return Promise.resolve({
103
...config,
104
type: secondProviderType
105
});
106
},
107
triggerKind: DebugConfigurationProviderTriggerKind.Initial
108
}));
109
disposables.add(_debugConfigurationManager.registerDebugConfigurationProvider({
110
type: secondProviderType,
111
resolveDebugConfiguration: (folderUri, config, token) => {
112
assert.strictEqual(config.type, secondProviderType);
113
return Promise.resolve({
114
...config,
115
configurationResolved: true
116
});
117
},
118
triggerKind: DebugConfigurationProviderTriggerKind.Initial
119
}));
120
121
const initialConfig: IConfig = {
122
type: configurationProviderType,
123
request: 'launch',
124
name: 'configName',
125
};
126
127
const resultConfig = await _debugConfigurationManager.resolveConfigurationByProviders(undefined, configurationProviderType, initialConfig, CancellationToken.None);
128
assert.strictEqual(resultConfig!.type, secondProviderType);
129
// eslint-disable-next-line local/code-no-any-casts
130
assert.strictEqual((resultConfig as any).configurationResolved, true, 'Configuration should be updated by test provider');
131
});
132
133
teardown(() => disposables.clear());
134
});
135
136