vscode/src/vs/workbench/contrib/debug/test/node/debugger.test.ts

184 lines
5.5 KiB
TypeScript
Raw Normal View History

2015-11-25 19:52:05 +01:00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { join, normalize } from 'vs/base/common/path';
import * as platform from 'vs/base/common/platform';
import { IDebugAdapterExecutable, IConfig, IDebugSession, IAdapterManager } from 'vs/workbench/contrib/debug/common/debug';
2019-06-17 15:49:08 +02:00
import { Debugger } from 'vs/workbench/contrib/debug/common/debugger';
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
import { URI } from 'vs/base/common/uri';
import { ExecutableDebugAdapter } from 'vs/workbench/contrib/debug/node/debugAdapter';
import { TestTextResourcePropertiesService } from 'vs/editor/test/common/services/testTextResourcePropertiesService';
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
2018-01-29 16:07:43 +01:00
2015-11-25 19:52:05 +01:00
2018-04-06 16:41:25 +02:00
suite('Debug - Debugger', () => {
let _debugger: Debugger;
2018-05-07 17:28:43 +02:00
const extensionFolderPath = '/a/b/c/';
const debuggerContribution = {
2015-11-25 19:52:05 +01:00
type: 'mock',
label: 'Mock Debug',
program: './out/mock/mockDebug.js',
args: ['arg1', 'arg2'],
2015-11-25 19:52:05 +01:00
configurationAttributes: {
launch: {
2016-10-08 09:53:13 +02:00
required: ['program'],
2015-11-25 19:52:05 +01:00
properties: {
program: {
'type': 'string',
'description': 'Workspace relative path to a text file.',
'default': 'readme.md'
}
}
}
},
variables: null!,
2015-11-25 19:52:05 +01:00
initialConfigurations: [
{
name: 'Mock-Debug',
type: 'mock',
request: 'launch',
program: 'readme.md'
}
]
2016-06-16 14:07:29 +02:00
};
2018-04-06 16:41:25 +02:00
const extensionDescriptor0 = <IExtensionDescription>{
2018-04-06 16:41:25 +02:00
id: 'adapter',
identifier: new ExtensionIdentifier('adapter'),
2018-04-06 16:41:25 +02:00
name: 'myAdapter',
version: '1.0.0',
publisher: 'vscode',
2018-05-07 17:28:43 +02:00
extensionLocation: URI.file(extensionFolderPath),
2018-04-06 16:41:25 +02:00
isBuiltin: false,
2020-10-09 16:38:27 +02:00
isUserBuiltin: false,
isUnderDevelopment: false,
engines: null!,
2018-04-06 16:41:25 +02:00
contributes: {
'debuggers': [
debuggerContribution
2018-04-06 16:41:25 +02:00
]
}
};
const extensionDescriptor1 = {
id: 'extension1',
identifier: new ExtensionIdentifier('extension1'),
2018-04-06 16:41:25 +02:00
name: 'extension1',
version: '1.0.0',
publisher: 'vscode',
2018-05-07 17:28:43 +02:00
extensionLocation: URI.file('/e1/b/c/'),
2018-04-06 16:41:25 +02:00
isBuiltin: false,
2020-10-09 16:38:27 +02:00
isUserBuiltin: false,
isUnderDevelopment: false,
engines: null!,
2018-04-06 16:41:25 +02:00
contributes: {
'debuggers': [
{
type: 'mock',
runtime: 'runtime',
runtimeArgs: ['rarg'],
program: 'mockprogram',
args: ['parg']
}
]
}
};
const extensionDescriptor2 = {
id: 'extension2',
identifier: new ExtensionIdentifier('extension2'),
2018-04-06 16:41:25 +02:00
name: 'extension2',
version: '1.0.0',
publisher: 'vscode',
2018-05-07 17:28:43 +02:00
extensionLocation: URI.file('/e2/b/c/'),
2018-04-06 16:41:25 +02:00
isBuiltin: false,
2020-10-09 16:38:27 +02:00
isUserBuiltin: false,
isUnderDevelopment: false,
engines: null!,
2018-04-06 16:41:25 +02:00
contributes: {
'debuggers': [
{
type: 'mock',
win: {
runtime: 'winRuntime',
program: 'winProgram'
},
linux: {
runtime: 'linuxRuntime',
program: 'linuxProgram'
},
osx: {
runtime: 'osxRuntime',
program: 'osxProgram'
}
}
]
}
};
const adapterManager = <IAdapterManager>{
getDebugAdapterDescriptor(session: IDebugSession, config: IConfig): Promise<IDebugAdapterExecutable | undefined> {
return Promise.resolve(undefined);
2018-01-29 16:07:43 +01:00
}
};
2015-11-25 19:52:05 +01:00
2018-10-15 17:23:30 +02:00
const configurationService = new TestConfigurationService();
const testResourcePropertiesService = new TestTextResourcePropertiesService(configurationService);
2015-11-25 19:52:05 +01:00
setup(() => {
_debugger = new Debugger(adapterManager, debuggerContribution, extensionDescriptor0, configurationService, testResourcePropertiesService, undefined!, undefined!, undefined!, undefined!);
2015-11-25 19:52:05 +01:00
});
teardown(() => {
_debugger = null!;
2015-11-25 19:52:05 +01:00
});
test('attributes', () => {
2021-03-05 15:36:40 +01:00
assert.strictEqual(_debugger.type, debuggerContribution.type);
assert.strictEqual(_debugger.label, debuggerContribution.label);
2018-09-19 23:25:44 +02:00
const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor0], 'mock');
2018-04-06 16:41:25 +02:00
2021-03-05 15:36:40 +01:00
assert.strictEqual(ae!.command, join(extensionFolderPath, debuggerContribution.program));
assert.deepStrictEqual(ae!.args, debuggerContribution.args);
2015-11-25 19:52:05 +01:00
});
test('merge platform specific attributes', function () {
if (!process.versions.electron) {
this.skip(); //TODO@debug this test fails when run in node.js environments
}
const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor1, extensionDescriptor2], 'mock')!;
2021-03-05 15:36:40 +01:00
assert.strictEqual(ae.command, platform.isLinux ? 'linuxRuntime' : (platform.isMacintosh ? 'osxRuntime' : 'winRuntime'));
2018-04-06 16:41:25 +02:00
const xprogram = platform.isLinux ? 'linuxProgram' : (platform.isMacintosh ? 'osxProgram' : 'winProgram');
2021-03-05 15:36:40 +01:00
assert.deepStrictEqual(ae.args, ['rarg', normalize('/e2/b/c/') + xprogram, 'parg']);
2016-11-21 16:59:17 +01:00
});
test('initial config file content', () => {
const expected = ['{',
' // Use IntelliSense to learn about possible attributes.',
' // Hover to view descriptions of existing attributes.',
' // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387',
' "version": "0.2.0",',
' "configurations": [',
' {',
' "name": "Mock-Debug",',
' "type": "mock",',
' "request": "launch",',
' "program": "readme.md"',
' }',
' ]',
2018-10-15 17:23:30 +02:00
'}'].join(testResourcePropertiesService.getEOL(URI.file('somefile')));
2018-04-06 16:41:25 +02:00
return _debugger.getInitialConfigurationContent().then(content => {
2021-03-05 15:36:40 +01:00
assert.strictEqual(content, expected);
}, err => assert.fail(err));
});
});