forked from microsoft/vscode-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvenv.test.ts
More file actions
89 lines (70 loc) · 4.17 KB
/
Copy pathvenv.test.ts
File metadata and controls
89 lines (70 loc) · 4.17 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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import { expect } from 'chai';
import { Container } from 'inversify';
import * as os from 'os';
import * as path from 'path';
import * as TypeMoq from 'typemoq';
import { Uri, WorkspaceFolder } from 'vscode';
import { IWorkspaceService } from '../../client/common/application/types';
import { IConfigurationService, ICurrentProcess, IPythonSettings } from '../../client/common/types';
import { EnvironmentVariables } from '../../client/common/variables/types';
import { GlobalVirtualEnvironmentsSearchPathProvider } from '../../client/interpreter/locators/services/globalVirtualEnvService';
import { WorkspaceVirtualEnvironmentsSearchPathProvider } from '../../client/interpreter/locators/services/workspaceVirtualEnvService';
import { ServiceContainer } from '../../client/ioc/container';
import { ServiceManager } from '../../client/ioc/serviceManager';
suite('Virtual environments', () => {
let serviceManager: ServiceManager;
let serviceContainer: ServiceContainer;
let settings: TypeMoq.IMock<IPythonSettings>;
let config: TypeMoq.IMock<IConfigurationService>;
let workspace: TypeMoq.IMock<IWorkspaceService>;
let process: TypeMoq.IMock<ICurrentProcess>;
setup(async () => {
const cont = new Container();
serviceManager = new ServiceManager(cont);
serviceContainer = new ServiceContainer(cont);
settings = TypeMoq.Mock.ofType<IPythonSettings>();
config = TypeMoq.Mock.ofType<IConfigurationService>();
workspace = TypeMoq.Mock.ofType<IWorkspaceService>();
process = TypeMoq.Mock.ofType<ICurrentProcess>();
config.setup(x => x.getSettings(TypeMoq.It.isAny())).returns(() => settings.object);
serviceManager.addSingletonInstance<IConfigurationService>(IConfigurationService, config.object);
serviceManager.addSingletonInstance<IWorkspaceService>(IWorkspaceService, workspace.object);
serviceManager.addSingletonInstance<ICurrentProcess>(ICurrentProcess, process.object);
});
test('Global search paths', async () => {
const pathProvider = new GlobalVirtualEnvironmentsSearchPathProvider(serviceContainer);
const homedir = os.homedir();
const folders = ['Envs', '.virtualenvs', '.pyenv'];
settings.setup(x => x.venvFolders).returns(() => folders);
let paths = pathProvider.getSearchPaths();
let expected = folders.map(item => path.join(homedir, item));
expected.push(path.join(homedir, '.pyenv', 'versions'));
expect(paths).to.deep.equal(expected, 'Global search folder list is incorrect.');
const envMap: EnvironmentVariables = {};
process.setup(x => x.env).returns(() => envMap);
const customFolder = path.join(homedir, 'some_folder');
// tslint:disable-next-line:no-string-literal
envMap['PYENV_ROOT'] = customFolder;
paths = pathProvider.getSearchPaths();
expected = folders.map(item => path.join(homedir, item));
expected.push(customFolder);
expected.push(path.join(customFolder, 'versions'));
expect(paths).to.deep.equal(expected, 'PYENV_ROOT not resolved correctly.');
});
test('Workspace search paths', async () => {
settings.setup(x => x.venvPath).returns(() => `~${path.sep}foo`);
const wsRoot = TypeMoq.Mock.ofType<WorkspaceFolder>();
wsRoot.setup(x => x.uri).returns(() => Uri.file('root'));
const folder1 = TypeMoq.Mock.ofType<WorkspaceFolder>();
folder1.setup(x => x.uri).returns(() => Uri.file('dir1'));
workspace.setup(x => x.getWorkspaceFolder(TypeMoq.It.isAny())).returns(() => wsRoot.object);
workspace.setup(x => x.workspaceFolders).returns(() => [wsRoot.object, folder1.object]);
const pathProvider = new WorkspaceVirtualEnvironmentsSearchPathProvider(serviceContainer);
const paths = pathProvider.getSearchPaths(Uri.file(''));
const homedir = os.homedir();
const expected = [path.join(homedir, 'foo'), `${path.sep}root`, `${path.sep}root${path.sep}.direnv`];
expect(paths).to.deep.equal(expected, 'Workspace venv folder search list does not match.');
});
});