forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathapi.functional.test.ts
More file actions
118 lines (103 loc) · 4.83 KB
/
api.functional.test.ts
File metadata and controls
118 lines (103 loc) · 4.83 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
// 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 * as sinon from 'sinon';
import { instance, mock, when } from 'ts-mockito';
import { buildApi } from '../client/api';
import { ConfigurationService } from '../client/common/configuration/service';
import { EXTENSION_ROOT_DIR } from '../client/common/constants';
import { IConfigurationService, IDisposableRegistry } from '../client/common/types';
import { IEnvironmentVariablesProvider } from '../client/common/variables/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';
import { IDiscoveryAPI } from '../client/pythonEnvironments/base/locator';
import * as pythonDebugger from '../client/debugger/pythonDebugger';
import { JupyterExtensionPythonEnvironments, JupyterPythonEnvironmentApi } from '../client/jupyter/jupyterIntegration';
import { EventEmitter, Uri } from 'vscode';
suite('Extension API', () => {
const debuggerPath = path.join(EXTENSION_ROOT_DIR, 'python_files', 'lib', 'python', 'debugpy');
const debuggerHost = 'somehost';
const debuggerPort = 12345;
let serviceContainer: IServiceContainer;
let serviceManager: IServiceManager;
let configurationService: IConfigurationService;
let interpreterService: IInterpreterService;
let discoverAPI: IDiscoveryAPI;
let environmentVariablesProvider: IEnvironmentVariablesProvider;
let getDebugpyPathStub: sinon.SinonStub;
setup(() => {
serviceContainer = mock(ServiceContainer);
serviceManager = mock(ServiceManager);
configurationService = mock(ConfigurationService);
interpreterService = mock(InterpreterService);
environmentVariablesProvider = mock<IEnvironmentVariablesProvider>();
discoverAPI = mock<IDiscoveryAPI>();
when(discoverAPI.getEnvs()).thenReturn([]);
when(serviceContainer.get<IConfigurationService>(IConfigurationService)).thenReturn(
instance(configurationService),
);
when(serviceContainer.get<IEnvironmentVariablesProvider>(IEnvironmentVariablesProvider)).thenReturn(
instance(environmentVariablesProvider),
);
when(serviceContainer.get<IInterpreterService>(IInterpreterService)).thenReturn(instance(interpreterService));
const onDidChangePythonEnvironment = new EventEmitter<Uri>();
const jupyterApi: JupyterPythonEnvironmentApi = {
onDidChangePythonEnvironment: onDidChangePythonEnvironment.event,
getPythonEnvironment: (_uri: Uri) => undefined,
};
when(serviceContainer.get<JupyterPythonEnvironmentApi>(JupyterExtensionPythonEnvironments)).thenReturn(
jupyterApi,
);
when(serviceContainer.get<IDisposableRegistry>(IDisposableRegistry)).thenReturn([]);
getDebugpyPathStub = sinon.stub(pythonDebugger, 'getDebugpyPath');
getDebugpyPathStub.resolves(debuggerPath);
});
teardown(() => {
sinon.restore();
});
test('Test debug launcher args (no-wait)', async () => {
const waitForAttach = false;
const args = await buildApi(
Promise.resolve(),
instance(serviceManager),
instance(serviceContainer),
instance(discoverAPI),
).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),
instance(discoverAPI),
).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),
instance(discoverAPI),
).debug.getDebuggerPackagePath();
assert.strictEqual(pkgPath, debuggerPath);
});
});