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
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 { 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
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
assert.strictEqual((resultConfig as any).configurationResolved, true, 'Configuration should be updated by test provider');
93
});
94
95
test('resolves configuration from second provider if type changes', async () => {
96
const secondProviderType = 'second-provider';
97
disposables.add(_debugConfigurationManager.registerDebugConfigurationProvider({
98
type: configurationProviderType,
99
resolveDebugConfiguration: (folderUri, config, token) => {
100
assert.strictEqual(config.type, configurationProviderType);
101
return Promise.resolve({
102
...config,
103
type: secondProviderType
104
});
105
},
106
triggerKind: DebugConfigurationProviderTriggerKind.Initial
107
}));
108
disposables.add(_debugConfigurationManager.registerDebugConfigurationProvider({
109
type: secondProviderType,
110
resolveDebugConfiguration: (folderUri, config, token) => {
111
assert.strictEqual(config.type, secondProviderType);
112
return Promise.resolve({
113
...config,
114
configurationResolved: true
115
});
116
},
117
triggerKind: DebugConfigurationProviderTriggerKind.Initial
118
}));
119
120
const initialConfig: IConfig = {
121
type: configurationProviderType,
122
request: 'launch',
123
name: 'configName',
124
};
125
126
const resultConfig = await _debugConfigurationManager.resolveConfigurationByProviders(undefined, configurationProviderType, initialConfig, CancellationToken.None);
127
assert.strictEqual(resultConfig!.type, secondProviderType);
128
assert.strictEqual((resultConfig as any).configurationResolved, true, 'Configuration should be updated by test provider');
129
});
130
131
teardown(() => disposables.clear());
132
});
133
134