summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2021-12-25 00:18:33 +0000
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2022-01-06 21:43:33 +0000
commit332a0532bf3293cf7c3d0fbfbb4664a5a98b9ec0 (patch)
tree1cb4f8a1cafb903e0e14450e41ef642644f61292
parent60e561c0a3747c2e862791f4cc5a4e530448a9a4 (diff)
downloadpython-setuptools-git-332a0532bf3293cf7c3d0fbfbb4664a5a98b9ec0.tar.gz
Replace tmp_src fixture with the virtualenv fixtures
Instead of re-building/installing setuptools from the source tree every time, the tests now rely on the venv, wheel and sdist fixtures (the venv fixture is populated from sdist/wheel). Moreover migrate `test_virtualenv` to use `jaraco.envs` (so it uses the same libraries ad `test_distutils_adoption`).
-rw-r--r--setuptools/tests/environment.py3
-rw-r--r--setuptools/tests/fixtures.py17
-rw-r--r--setuptools/tests/test_virtualenv.py96
3 files changed, 34 insertions, 82 deletions
diff --git a/setuptools/tests/environment.py b/setuptools/tests/environment.py
index e3ced27c..a0c0ec6e 100644
--- a/setuptools/tests/environment.py
+++ b/setuptools/tests/environment.py
@@ -17,7 +17,8 @@ class VirtualEnv(jaraco.envs.VirtualEnv):
def run(self, cmd, *args, **kwargs):
cmd = [self.exe(cmd[0])] + cmd[1:]
- return subprocess.check_output(cmd, *args, cwd=self.root, **kwargs)
+ kwargs = {"cwd": self.root, **kwargs} # Allow overriding
+ return subprocess.check_output(cmd, *args, **kwargs)
def _which_dirs(cmd):
diff --git a/setuptools/tests/fixtures.py b/setuptools/tests/fixtures.py
index 317254d9..9b91d7d7 100644
--- a/setuptools/tests/fixtures.py
+++ b/setuptools/tests/fixtures.py
@@ -1,6 +1,5 @@
import contextlib
import sys
-import shutil
import subprocess
import pytest
@@ -29,22 +28,6 @@ def tmpdir_cwd(tmpdir):
yield orig
-@pytest.fixture
-def tmp_src(request, tmp_path):
- """Make a copy of the source dir under `$tmp/src`.
-
- This fixture is useful whenever it's necessary to run `setup.py`
- or `pip install` against the source directory when there's no
- control over the number of simultaneous invocations. Such
- concurrent runs create and delete directories with the same names
- under the target directory and so they influence each other's runs
- when they are not being executed sequentially.
- """
- tmp_src_path = tmp_path / 'src'
- shutil.copytree(request.config.rootdir, tmp_src_path)
- return tmp_src_path
-
-
@pytest.fixture(autouse=True, scope="session")
def workaround_xdist_376(request):
"""
diff --git a/setuptools/tests/test_virtualenv.py b/setuptools/tests/test_virtualenv.py
index 61d239aa..0ba89643 100644
--- a/setuptools/tests/test_virtualenv.py
+++ b/setuptools/tests/test_virtualenv.py
@@ -1,52 +1,34 @@
-import glob
import os
import sys
import itertools
+import subprocess
import pathlib
import pytest
-from pytest_fixture_config import yield_requires_config
-
-import pytest_virtualenv
+from . import contexts
from .textwrap import DALS
from .test_easy_install import make_nspkg_sdist
@pytest.fixture(autouse=True)
-def pytest_virtualenv_works(virtualenv):
+def pytest_virtualenv_works(venv):
"""
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()
+ venv_prefix = venv.run(["python" , "-c", "import sys; print(sys.prefix)"]).strip()
if venv_prefix == sys.prefix:
pytest.skip("virtualenv is broken (see pypa/setuptools#1284)")
-@yield_requires_config(pytest_virtualenv.CONFIG, ['virtualenv_executable'])
-@pytest.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
-
-
-def test_clean_env_install(bare_virtualenv, tmp_src):
+def test_clean_env_install(venv_without_setuptools, setuptools_wheel):
"""
Check setuptools can be installed in a clean environment.
"""
- cmd = [bare_virtualenv.python, 'setup.py', 'install']
- bare_virtualenv.run(cmd, cd=tmp_src)
+ cmd = ["python", "-m", "pip", "install", str(setuptools_wheel)]
+ venv_without_setuptools.run(cmd)
def _get_pip_versions():
@@ -99,41 +81,31 @@ def _get_pip_versions():
reason="https://github.com/pypa/setuptools/pull/2865#issuecomment-965834995",
)
@pytest.mark.parametrize('pip_version', _get_pip_versions())
-def test_pip_upgrade_from_source(pip_version, tmp_src, virtualenv):
+def test_pip_upgrade_from_source(pip_version, venv_without_setuptools,
+ setuptools_wheel, setuptools_sdist):
"""
Check pip can upgrade setuptools from source.
"""
- # Install pip/wheel, and remove setuptools (as it
+ # Install pip/wheel, in a venv without setuptools (as it
# should not be needed for bootstraping from source)
- if pip_version is None:
- upgrade_pip = ()
- else:
- upgrade_pip = ('python -m pip install -U "{pip_version}" --retries=1',)
- virtualenv.run(' && '.join((
- 'pip uninstall -y setuptools',
- 'pip install -U wheel',
- ) + upgrade_pip).format(pip_version=pip_version))
- dist_dir = virtualenv.workspace
- # Generate source distribution / wheel.
- virtualenv.run(' && '.join((
- 'python setup.py -q sdist -d {dist}',
- 'python setup.py -q bdist_wheel -d {dist}',
- )).format(dist=dist_dir), cd=tmp_src)
- 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)
+ venv = venv_without_setuptools
+ venv.run(["pip", "install", "-U", "wheel"])
+ if pip_version is not None:
+ venv.run(["python", "-m", "pip", "install", "-U", pip_version, "--retries=1"])
+ with pytest.raises(subprocess.CalledProcessError):
+ # Meta-test to make sure setuptools is not installed
+ venv.run(["python", "-c", "import setuptools"])
+
+ # Then install from wheel.
+ venv.run(["pip", "install", str(setuptools_wheel)])
# And finally try to upgrade from source.
- virtualenv.run('pip install --no-cache-dir --upgrade ' + sdist)
+ venv.run(["pip", "install", "--no-cache-dir", "--upgrade", str(setuptools_sdist)])
-def _check_test_command_install_requirements(virtualenv, tmpdir, cwd):
+def _check_test_command_install_requirements(venv, tmpdir):
"""
Check the test command will install all required dependencies.
"""
- # Install setuptools.
- virtualenv.run('python setup.py develop', cd=cwd)
-
def sdist(distname, version):
dist_path = tmpdir.join('%s-%s.tar.gz' % (distname, version))
make_nspkg_sdist(str(dist_path), distname, version)
@@ -182,28 +154,24 @@ def _check_test_command_install_requirements(virtualenv, tmpdir, cwd):
open('success', 'w').close()
'''))
- # Run test command for test package.
- # use 'virtualenv.python' as workaround for man-group/pytest-plugins#166
- cmd = [virtualenv.python, 'setup.py', 'test', '-s', 'test']
- virtualenv.run(cmd, cd=str(tmpdir))
+
+ cmd = ["python", 'setup.py', 'test', '-s', 'test']
+ venv.run(cmd, cwd=str(tmpdir))
assert tmpdir.join('success').check()
-def test_test_command_install_requirements(virtualenv, tmpdir, request):
+def test_test_command_install_requirements(venv, tmpdir, tmpdir_cwd):
# Ensure pip/wheel packages are installed.
- virtualenv.run(
- "python -c \"__import__('pkg_resources').require(['pip', 'wheel'])\"")
- # uninstall setuptools so that 'setup.py develop' works
- virtualenv.run("python -m pip uninstall -y setuptools")
+ venv.run(["python", "-c", "__import__('pkg_resources').require(['pip', 'wheel'])"])
# disable index URL so bits and bobs aren't requested from PyPI
- virtualenv.env['PIP_NO_INDEX'] = '1'
- _check_test_command_install_requirements(virtualenv, tmpdir, request.config.rootdir)
+ with contexts.environment(PYTHONPATH=None, PIP_NO_INDEX="1"):
+ _check_test_command_install_requirements(venv, tmpdir)
-def test_no_missing_dependencies(bare_virtualenv, request):
+def test_no_missing_dependencies(bare_venv, request):
"""
Quick and dirty test to ensure all external dependencies are vendored.
"""
+ setuptools_dir = request.config.rootdir
for command in ('upload',): # sorted(distutils.command.__all__):
- cmd = [bare_virtualenv.python, 'setup.py', command, '-h']
- bare_virtualenv.run(cmd, cd=request.config.rootdir)
+ bare_venv.run(['python', 'setup.py', command, '-h'], cwd=setuptools_dir)