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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
import glob
import os
import sys
import pytest
from pytest import yield_fixture
from pytest_fixture_config import yield_requires_config
import pytest_virtualenv
from .textwrap import DALS
from .test_easy_install import make_nspkg_sdist
@pytest.fixture(autouse=True)
def pytest_virtualenv_works(virtualenv):
"""
pytest_virtualenv may not work. if it doesn't, skip these
tests. See #1284.
"""
venv_prefix = virtualenv.run(
'python -c "import sys; print(sys.prefix)"',
capture=True,
).strip()
if venv_prefix == sys.prefix:
pytest.skip("virtualenv is broken (see pypa/setuptools#1284)")
@yield_requires_config(pytest_virtualenv.CONFIG, ['virtualenv_executable'])
@yield_fixture(scope='function')
def bare_virtualenv():
""" Bare virtualenv (no pip/setuptools/wheel).
"""
with pytest_virtualenv.VirtualEnv(args=(
'--no-wheel',
'--no-pip',
'--no-setuptools',
)) as venv:
yield venv
SOURCE_DIR = os.path.join(os.path.dirname(__file__), '../..')
def test_clean_env_install(bare_virtualenv):
"""
Check setuptools can be installed in a clean environment.
"""
bare_virtualenv.run(' && '.join((
'cd {source}',
'python setup.py install',
)).format(source=SOURCE_DIR))
def test_pip_upgrade_from_source(virtualenv):
"""
Check pip can upgrade setuptools from source.
"""
dist_dir = virtualenv.workspace
if sys.version_info < (2, 7):
# Python 2.6 support was dropped in wheel 0.30.0.
virtualenv.run('pip install -U "wheel<0.30.0"')
# Generate source distribution / wheel.
virtualenv.run(' && '.join((
'cd {source}',
'python setup.py -q sdist -d {dist}',
'python setup.py -q bdist_wheel -d {dist}',
)).format(source=SOURCE_DIR, dist=dist_dir))
sdist = glob.glob(os.path.join(dist_dir, '*.zip'))[0]
wheel = glob.glob(os.path.join(dist_dir, '*.whl'))[0]
# Then update from wheel.
virtualenv.run('pip install ' + wheel)
# And finally try to upgrade from source.
virtualenv.run('pip install --no-cache-dir --upgrade ' + sdist)
def test_test_command_install_requirements(bare_virtualenv, tmpdir):
"""
Check the test command will install all required dependencies.
"""
bare_virtualenv.run(' && '.join((
'cd {source}',
'python setup.py develop',
)).format(source=SOURCE_DIR))
def sdist(distname, version):
dist_path = tmpdir.join('%s-%s.tar.gz' % (distname, version))
make_nspkg_sdist(str(dist_path), distname, version)
return dist_path
dependency_links = [
str(dist_path)
for dist_path in (
sdist('foobar', '2.4'),
sdist('bits', '4.2'),
sdist('bobs', '6.0'),
sdist('pieces', '0.6'),
)
]
with tmpdir.join('setup.py').open('w') as fp:
fp.write(DALS(
'''
from setuptools import setup
setup(
dependency_links={dependency_links!r},
install_requires=[
'barbazquux1; sys_platform in ""',
'foobar==2.4',
],
setup_requires='bits==4.2',
tests_require="""
bobs==6.0
""",
extras_require={{
'test': ['barbazquux2'],
':"" in sys_platform': 'pieces==0.6',
':python_version > "1"': """
pieces
foobar
""",
}}
)
'''.format(dependency_links=dependency_links)))
with tmpdir.join('test.py').open('w') as fp:
fp.write(DALS(
'''
import foobar
import bits
import bobs
import pieces
open('success', 'w').close()
'''))
# Run test command for test package.
bare_virtualenv.run(' && '.join((
'cd {tmpdir}',
'python setup.py test -s test',
)).format(tmpdir=tmpdir))
assert tmpdir.join('success').check()
|