Commit 75e88f63 authored by Benoit Pierre's avatar Benoit Pierre

fix `test` command handling of `extras_require`

Also install platform specific requirements in `extras_require`.
parent 0c86c6a2
......@@ -11,7 +11,7 @@ from setuptools.extern import six
from setuptools.extern.six.moves import map, filter
from pkg_resources import (resource_listdir, resource_exists, normalize_path,
working_set, _namespace_packages,
working_set, _namespace_packages, evaluate_marker,
add_activation_listener, require, EntryPoint)
from setuptools import Command
from setuptools.py31compat import unittest_main
......@@ -191,9 +191,13 @@ class test(Command):
Install the requirements indicated by self.distribution and
return an iterable of the dists that were built.
"""
ir_d = dist.fetch_build_eggs(dist.install_requires or [])
ir_d = dist.fetch_build_eggs(dist.install_requires)
tr_d = dist.fetch_build_eggs(dist.tests_require or [])
return itertools.chain(ir_d, tr_d)
er_d = dist.fetch_build_eggs(
v for k, v in dist.extras_require.items()
if k.startswith(':') and evaluate_marker(k[1:])
)
return itertools.chain(ir_d, tr_d, er_d)
def run(self):
installed_dists = self.install_dists(self.distribution)
......
......@@ -6,6 +6,9 @@ from pytest_fixture_config import yield_requires_config
import pytest_virtualenv
from .textwrap import DALS
from .test_easy_install import make_nspkg_sdist
@yield_requires_config(pytest_virtualenv.CONFIG, ['virtualenv_executable'])
@yield_fixture(scope='function')
......@@ -48,3 +51,66 @@ def test_pip_upgrade_from_source(virtualenv):
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()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment