Path: blob/main/src/vs/workbench/contrib/debug/test/node/debugger.test.ts
3296 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 } 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';161718suite('Debug - Debugger', () => {19let _debugger: Debugger;2021const extensionFolderPath = '/a/b/c/';22const debuggerContribution = {23type: 'mock',24label: 'Mock Debug',25program: './out/mock/mockDebug.js',26args: ['arg1', 'arg2'],27configurationAttributes: {28launch: {29required: ['program'],30properties: {31program: {32'type': 'string',33'description': 'Workspace relative path to a text file.',34'default': 'readme.md'35}36}37}38},39variables: null!,40initialConfigurations: [41{42name: 'Mock-Debug',43type: 'mock',44request: 'launch',45program: 'readme.md'46}47]48};4950const extensionDescriptor0 = <IExtensionDescription>{51id: 'adapter',52identifier: new ExtensionIdentifier('adapter'),53name: 'myAdapter',54version: '1.0.0',55publisher: 'vscode',56extensionLocation: URI.file(extensionFolderPath),57isBuiltin: false,58isUserBuiltin: false,59isUnderDevelopment: false,60engines: null!,61targetPlatform: TargetPlatform.UNDEFINED,62contributes: {63'debuggers': [64debuggerContribution65]66},67enabledApiProposals: undefined,68preRelease: false,69};7071const extensionDescriptor1 = {72id: 'extension1',73identifier: new ExtensionIdentifier('extension1'),74name: 'extension1',75version: '1.0.0',76publisher: 'vscode',77extensionLocation: URI.file('/e1/b/c/'),78isBuiltin: false,79isUserBuiltin: false,80isUnderDevelopment: false,81engines: null!,82targetPlatform: TargetPlatform.UNDEFINED,83contributes: {84'debuggers': [85{86type: 'mock',87runtime: 'runtime',88runtimeArgs: ['rarg'],89program: 'mockprogram',90args: ['parg']91}92]93},94enabledApiProposals: undefined,95preRelease: false,96};9798const extensionDescriptor2 = {99id: 'extension2',100identifier: new ExtensionIdentifier('extension2'),101name: 'extension2',102version: '1.0.0',103publisher: 'vscode',104extensionLocation: URI.file('/e2/b/c/'),105isBuiltin: false,106isUserBuiltin: false,107isUnderDevelopment: false,108engines: null!,109targetPlatform: TargetPlatform.UNDEFINED,110contributes: {111'debuggers': [112{113type: 'mock',114win: {115runtime: 'winRuntime',116program: 'winProgram'117},118linux: {119runtime: 'linuxRuntime',120program: 'linuxProgram'121},122osx: {123runtime: 'osxRuntime',124program: 'osxProgram'125}126}127]128},129enabledApiProposals: undefined,130preRelease: false,131};132133134const adapterManager = <IAdapterManager>{135getDebugAdapterDescriptor(session: IDebugSession, config: IConfig): Promise<IDebugAdapterExecutable | undefined> {136return Promise.resolve(undefined);137}138};139140ensureNoDisposablesAreLeakedInTestSuite();141142const configurationService = new TestConfigurationService();143const testResourcePropertiesService = new TestTextResourcePropertiesService(configurationService);144145setup(() => {146_debugger = new Debugger(adapterManager, debuggerContribution, extensionDescriptor0, configurationService, testResourcePropertiesService, undefined!, undefined!, undefined!, undefined!);147});148149teardown(() => {150_debugger = null!;151});152153test('attributes', () => {154assert.strictEqual(_debugger.type, debuggerContribution.type);155assert.strictEqual(_debugger.label, debuggerContribution.label);156157const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor0], 'mock');158159assert.strictEqual(ae!.command, join(extensionFolderPath, debuggerContribution.program));160assert.deepStrictEqual(ae!.args, debuggerContribution.args);161});162163test('merge platform specific attributes', function () {164if (!process.versions.electron) {165this.skip(); //TODO@debug this test fails when run in node.js environments166}167const ae = ExecutableDebugAdapter.platformAdapterExecutable([extensionDescriptor1, extensionDescriptor2], 'mock')!;168assert.strictEqual(ae.command, platform.isLinux ? 'linuxRuntime' : (platform.isMacintosh ? 'osxRuntime' : 'winRuntime'));169const xprogram = platform.isLinux ? 'linuxProgram' : (platform.isMacintosh ? 'osxProgram' : 'winProgram');170assert.deepStrictEqual(ae.args, ['rarg', normalize('/e2/b/c/') + xprogram, 'parg']);171});172173test('initial config file content', () => {174175const expected = ['{',176' // Use IntelliSense to learn about possible attributes.',177' // Hover to view descriptions of existing attributes.',178' // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387',179' "version": "0.2.0",',180' "configurations": [',181' {',182' "name": "Mock-Debug",',183' "type": "mock",',184' "request": "launch",',185' "program": "readme.md"',186' }',187' ]',188'}'].join(testResourcePropertiesService.getEOL(URI.file('somefile')));189190return _debugger.getInitialConfigurationContent().then(content => {191assert.strictEqual(content, expected);192}, err => assert.fail(err));193});194});195196197