forked from microsoft/vscode-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.functional.test.ts
More file actions
123 lines (100 loc) · 4.69 KB
/
api.functional.test.ts
File metadata and controls
123 lines (100 loc) · 4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import { assert, expect } from 'chai';
import * as path from 'path';
import { instance, mock, when } from 'ts-mockito';
import * as Typemoq from 'typemoq';
import { Event, Uri } from 'vscode';
import { buildApi } from '../client/api';
import { ConfigurationService } from '../client/common/configuration/service';
import { EXTENSION_ROOT_DIR } from '../client/common/constants';
import { IConfigurationService } from '../client/common/types';
import { IInterpreterService } from '../client/interpreter/contracts';
import { InterpreterService } from '../client/interpreter/interpreterService';
import { ServiceContainer } from '../client/ioc/container';
import { ServiceManager } from '../client/ioc/serviceManager';
import { IServiceContainer, IServiceManager } from '../client/ioc/types';
suite('Extension API', () => {
const debuggerPath = path.join(EXTENSION_ROOT_DIR, 'pythonFiles', 'lib', 'python', 'debugpy');
const debuggerHost = 'somehost';
const debuggerPort = 12345;
let serviceContainer: IServiceContainer;
let serviceManager: IServiceManager;
let configurationService: IConfigurationService;
let interpreterService: IInterpreterService;
setup(() => {
serviceContainer = mock(ServiceContainer);
serviceManager = mock(ServiceManager);
configurationService = mock(ConfigurationService);
interpreterService = mock(InterpreterService);
when(serviceContainer.get<IConfigurationService>(IConfigurationService)).thenReturn(
instance(configurationService),
);
when(serviceContainer.get<IInterpreterService>(IInterpreterService)).thenReturn(instance(interpreterService));
});
test('Execution details settings API returns expected object if interpreter is set', async () => {
const resource = Uri.parse('a');
when(configurationService.getSettings(resource)).thenReturn({ pythonPath: 'settingValue' } as any);
const execDetails = buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
).settings.getExecutionDetails(resource);
assert.deepEqual(execDetails, { execCommand: ['settingValue'] });
});
test('Execution details settings API returns `undefined` if interpreter is set', async () => {
const resource = Uri.parse('a');
when(configurationService.getSettings(resource)).thenReturn({ pythonPath: '' } as any);
const execDetails = buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
).settings.getExecutionDetails(resource);
assert.deepEqual(execDetails, { execCommand: undefined });
});
test('Provide a callback which is called when interpreter setting changes', async () => {
const expectedEvent = Typemoq.Mock.ofType<Event<Uri | undefined>>().object;
when(interpreterService.onDidChangeInterpreterConfiguration).thenReturn(expectedEvent);
const result = buildApi(Promise.resolve(), instance(serviceManager), instance(serviceContainer)).settings
.onDidChangeExecutionDetails;
assert.deepEqual(result, expectedEvent);
});
test('Test debug launcher args (no-wait)', async () => {
const waitForAttach = false;
const args = await buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
).debug.getRemoteLauncherCommand(debuggerHost, debuggerPort, waitForAttach);
const expectedArgs = [
debuggerPath.fileToCommandArgumentForPythonExt(),
'--listen',
`${debuggerHost}:${debuggerPort}`,
];
expect(args).to.be.deep.equal(expectedArgs);
});
test('Test debug launcher args (wait)', async () => {
const waitForAttach = true;
const args = await buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
).debug.getRemoteLauncherCommand(debuggerHost, debuggerPort, waitForAttach);
const expectedArgs = [
debuggerPath.fileToCommandArgumentForPythonExt(),
'--listen',
`${debuggerHost}:${debuggerPort}`,
'--wait-for-client',
];
expect(args).to.be.deep.equal(expectedArgs);
});
test('Test debugger package path', async () => {
const pkgPath = await buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
).debug.getDebuggerPackagePath();
assert.strictEqual(pkgPath, debuggerPath);
});
});