forked from pypa/build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_env.py
83 lines (65 loc) · 2.65 KB
/
test_env.py
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
# SPDX-License-Identifier: MIT
import os
import subprocess
import sys
import sysconfig
import pytest
import build.env
def test_isolated_environment_setup():
old_path = os.environ['PATH']
with build.env.IsolatedEnvironment.for_current() as env:
if os.name != 'nt':
assert os.environ['PATH'] == os.pathsep.join([os.path.join(env.path, 'bin'), old_path])
assert os.environ['PYTHONHOME'] == env.path
python_path = os.environ['PYTHONPATH'].split(os.pathsep)
for path in ('purelib', 'platlib'):
assert sysconfig.get_path(path) not in python_path
assert sysconfig.get_path(
path,
vars={
'base': env.path,
'platbase': env.path,
}
) in python_path
copy_path = [
sysconfig.get_path('include'),
sysconfig.get_path('platinclude'),
]
libpl = sysconfig.get_config_var('LIBPL')
if libpl is None:
if os.name != 'nt':
# if sys.version_info[0] == 2:
# assert sys.subversion[0] == 'PyPy' # not available in Windows CPython 3
# else:
assert sys.implementation.name == 'pypy' # Python 3 only
else:
copy_path.append(libpl)
prefix = sysconfig.get_config_var('prefix')
assert prefix is not None
for path in copy_path:
assert path is not None
if path.startswith(prefix):
relative_path = path[len(prefix + os.pathsep):]
path = os.path.join(env.path, relative_path)
assert os.path.exists(path)
def test_isolated_environment_setup_require_virtualenv(mocker):
mocker.patch.dict(os.environ, {"PIP_REQUIRE_VIRTUALENV": "true"})
with build.env.IsolatedEnvironment.for_current():
assert "PIP_REQUIRE_VIRTUALENV" not in os.environ
assert os.environ["PIP_REQUIRE_VIRTUALENV"] == "true"
def test_isolated_environment_install(mocker):
with build.env.IsolatedEnvironment.for_current() as env:
mocker.patch('subprocess.check_call')
env.install([])
subprocess.check_call.assert_not_called()
env.install(['some', 'requirements'])
if sys.version_info[:2] != (3, 5):
subprocess.check_call.assert_called()
args = subprocess.check_call.call_args[0][0]
assert args[:7] == [
sys.executable, '-m', 'pip', 'install', '--prefix', env.path, '-r'
]
def test_uninitialised_isolated_environment():
env = build.env.IsolatedEnvironment.for_current()
with pytest.raises(RuntimeError):
env.path