Path: blob/main/src/vs/workbench/contrib/debug/test/node/debugger.test.ts
5240 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { join, normalize } from '../../../../../base/common/path.js';7import * as platform from '../../../../../base/common/platform.js';8import { IDebugAdapterExecutable, IConfig, IDebugSession, IAdapterManager, IDebuggerContribution } from '../../common/debug.js';9import { Debugger } from '../../common/debugger.js';10import { TestConfigurationService } from '../../../../../platform/configuration/test/common/testConfigurationService.js';11import { URI } from '../../../../../base/common/uri.js';12import { ExecutableDebugAdapter } from '../../node/debugAdapter.js';13import { TestTextResourcePropertiesService } from '../../../../../editor/test/common/services/testTextResourcePropertiesService.js';14import { ExtensionIdentifier, IExtensionDescription, TargetPlatform } from '../../../../../platform/extensions/common/extensions.js';15import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';1617suite('Debug - Debugger', () => {18let _debugger: Debugger;1920const extensionFolderPath = '/a/b/c/';21const debuggerContribution: IDebuggerContribution = {22type: 'mock',23label: 'Mock Debug',24program: './out/mock/mockDebug.js',25args: ['arg1', 'arg2'],26configurationAttributes: {27launch: {28required: ['program'],29properties: {30program: {31'type': 'string',32'description': 'Workspace relative path to a text file.',33'default': 'readme.md'34}35}36}37},38variables: null!,39initialConfigurations: [40{41name: 'Mock-Debug',42type: 'mock',43request: 'launch',44program: 'readme.md'45}46]47};4849const extensionDescriptor0 = <IExtensionDescription>{50id: 'adapter',51identifier: new ExtensionIdentifier('adapter'),52name: 'myAdapter',53version: '1.0.0',54publisher: 'vscode',55extensionLocation: URI.file(extensionFolderPath),56isBuiltin: false,57isUserBuiltin: false,58isUnderDevelopment: false,59engines: null!,60targetPlatform: TargetPlatform.UNDEFINED,61contributes: {62'debuggers': [63debuggerContribution64]65},66enabledApiProposals: undefined,67preRelease: false,68};6970const extensionDescriptor1 = {71id: 'extension1',72identifier: new ExtensionIdentifier('extension1'),73name: 'extension1',74version: '1.0.0',75publisher: 'vscode',76extensionLocation: URI.file('/e1/b/c/'),77isBuiltin: false,78isUserBuiltin: false,79isUnderDevelopment: false,80engines: null!,81targetPlatform: TargetPlatform.UNDEFINED,82contributes: {83'debuggers': [84{85type: 'mock',86runtime: 'runtime',87runtimeArgs: ['rarg'],88program: 'mockprogram',89args: ['parg']90}91]92},93enabledApiProposals: undefined,94preRelease: false,95};9697const extensionDescriptor2 = {98id: 'extension2',99identifier: new ExtensionIdentifier('extension2'),100name: 'extension2',101version: '1.0.0',102publisher: 'vscode',103extensionLocation: URI.file('/e2/b/c/'),104isBuiltin: false,105isUserBuiltin: false,106isUnderDevelopment: false,107engines: null!,108targetPlatform: TargetPlatform.UNDEFINED,109contributes: {110'debuggers': [111{112type: 'mock',113win: {114runtime: 'winRuntime',115program: 'winProgram'116},117linux: {118runtime: 'linuxRuntime',119program: 'linuxProgram'120},121osx: {122runtime: 'osxRuntime',123program: 'osxProgram'124}125}126]127},128enabledApiProposals: undefined,129preRelease: false,130};131132133const adapterManager = <IAdapterManager>{134getDebugAdapterDescriptor(session: IDebugSession, config: IConfig): Promise<IDebugAdapterExecutable | undefined> {135return Promise.resolve(undefined);136}137};138139ensureNoDisposablesAreLeakedInTestSuite();140141const configurationService = new TestConfigurationService();142const testResourcePropertiesService = new TestTextResourcePropertiesService(configurationService);143144setup(() => {145_debugger = new Debugger(adapterManager, debuggerContribution, extensionDescriptor0, configurationService, testResourcePropertiesService, undefined!, undefined!, undefined!, undefined!, undefined!);146});147148teardown(() => {149_debugger = null!;150});151152test('attributes', () => {153assert.strictEqual(_debugger.type, debuggerContribution.type);154assert.strictEqual(_debugger.label, debuggerContribution.label);155156const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor0], 'mock');157158assert.strictEqual(ae!.command, join(extensionFolderPath, debuggerContribution.program!));159assert.deepStrictEqual(ae!.args, debuggerContribution.args);160});161162test('merge platform specific attributes', function () {163if (!process.versions.electron) {164this.skip(); //TODO@debug this test fails when run in node.js environments165}166const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor1, extensionDescriptor2], 'mock')!;167assert.strictEqual(ae.command, platform.isLinux ? 'linuxRuntime' : (platform.isMacintosh ? 'osxRuntime' : 'winRuntime'));168const xprogram = platform.isLinux ? 'linuxProgram' : (platform.isMacintosh ? 'osxProgram' : 'winProgram');169assert.deepStrictEqual(ae.args, ['rarg', normalize('/e2/b/c/') + xprogram, 'parg']);170});171172test('initial config file content', () => {173174const expected = ['{',175' // Use IntelliSense to learn about possible attributes.',176' // Hover to view descriptions of existing attributes.',177' // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387',178' "version": "0.2.0",',179' "configurations": [',180' {',181' "name": "Mock-Debug",',182' "type": "mock",',183' "request": "launch",',184' "program": "readme.md"',185' }',186' ]',187'}'].join(testResourcePropertiesService.getEOL(URI.file('somefile')));188189return _debugger.getInitialConfigurationContent().then(content => {190assert.strictEqual(content, expected);191}, err => assert.fail(err));192});193});194195196