|
| 1 | +// Copyright (c) Microsoft Corporation. All rights reserved. |
| 2 | +// Licensed under the MIT License. |
| 3 | + |
| 4 | +'use strict'; |
| 5 | + |
| 6 | +import { expect } from 'chai'; |
| 7 | +import * as typemoq from 'typemoq'; |
| 8 | +import { DebugConfiguration, Uri } from 'vscode'; |
| 9 | +import { PythonDebugConfigurationService } from '../../../../client/debugger/extension/configuration/debugConfigurationService'; |
| 10 | +import { IDebugConfigurationResolver } from '../../../../client/debugger/extension/configuration/types'; |
| 11 | +import { AttachRequestArguments, LaunchRequestArguments } from '../../../../client/debugger/types'; |
| 12 | + |
| 13 | +suite('Debugging - Configuration Service', () => { |
| 14 | + let attachResolver: typemoq.IMock<IDebugConfigurationResolver<AttachRequestArguments>>; |
| 15 | + let launchResolver: typemoq.IMock<IDebugConfigurationResolver<LaunchRequestArguments>>; |
| 16 | + let configService: TestPythonDebugConfigurationService; |
| 17 | + |
| 18 | + class TestPythonDebugConfigurationService extends PythonDebugConfigurationService {} |
| 19 | + setup(() => { |
| 20 | + attachResolver = typemoq.Mock.ofType<IDebugConfigurationResolver<AttachRequestArguments>>(); |
| 21 | + launchResolver = typemoq.Mock.ofType<IDebugConfigurationResolver<LaunchRequestArguments>>(); |
| 22 | + configService = new TestPythonDebugConfigurationService(attachResolver.object, launchResolver.object); |
| 23 | + }); |
| 24 | + test('Should use attach resolver when passing attach config', async () => { |
| 25 | + const config = ({ |
| 26 | + request: 'attach', |
| 27 | + } as DebugConfiguration) as AttachRequestArguments; |
| 28 | + const folder = { name: '1', index: 0, uri: Uri.parse('1234') }; |
| 29 | + const expectedConfig = { yay: 1 }; |
| 30 | + |
| 31 | + attachResolver |
| 32 | + .setup((a) => |
| 33 | + a.resolveDebugConfiguration(typemoq.It.isValue(folder), typemoq.It.isValue(config), typemoq.It.isAny()), |
| 34 | + ) |
| 35 | + .returns(() => Promise.resolve((expectedConfig as unknown) as AttachRequestArguments)) |
| 36 | + .verifiable(typemoq.Times.once()); |
| 37 | + launchResolver |
| 38 | + .setup((a) => a.resolveDebugConfiguration(typemoq.It.isAny(), typemoq.It.isAny(), typemoq.It.isAny())) |
| 39 | + .verifiable(typemoq.Times.never()); |
| 40 | + |
| 41 | + const resolvedConfig = await configService.resolveDebugConfiguration(folder, config as DebugConfiguration); |
| 42 | + |
| 43 | + expect(resolvedConfig).to.deep.equal(expectedConfig); |
| 44 | + attachResolver.verifyAll(); |
| 45 | + launchResolver.verifyAll(); |
| 46 | + }); |
| 47 | + [{ request: 'launch' }, { request: undefined }].forEach((config) => { |
| 48 | + test(`Should use launch resolver when passing launch config with request=${config.request}`, async () => { |
| 49 | + const folder = { name: '1', index: 0, uri: Uri.parse('1234') }; |
| 50 | + const expectedConfig = { yay: 1 }; |
| 51 | + |
| 52 | + launchResolver |
| 53 | + .setup((a) => |
| 54 | + a.resolveDebugConfiguration( |
| 55 | + typemoq.It.isValue(folder), |
| 56 | + typemoq.It.isValue((config as DebugConfiguration) as LaunchRequestArguments), |
| 57 | + typemoq.It.isAny(), |
| 58 | + ), |
| 59 | + ) |
| 60 | + .returns(() => Promise.resolve((expectedConfig as unknown) as LaunchRequestArguments)) |
| 61 | + .verifiable(typemoq.Times.once()); |
| 62 | + attachResolver |
| 63 | + .setup((a) => a.resolveDebugConfiguration(typemoq.It.isAny(), typemoq.It.isAny(), typemoq.It.isAny())) |
| 64 | + .verifiable(typemoq.Times.never()); |
| 65 | + |
| 66 | + const resolvedConfig = await configService.resolveDebugConfiguration(folder, config as DebugConfiguration); |
| 67 | + |
| 68 | + expect(resolvedConfig).to.deep.equal(expectedConfig); |
| 69 | + attachResolver.verifyAll(); |
| 70 | + launchResolver.verifyAll(); |
| 71 | + }); |
| 72 | + }); |
| 73 | +}); |
0 commit comments