| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import os
- import subprocess
- import sys
- from urllib.error import URLError
- from urllib.request import urlopen
- import pytest
- @pytest.fixture(autouse=True)
- def pytest_virtualenv_works(venv):
- """
- pytest_virtualenv may not work. if it doesn't, skip these
- tests. See #1284.
- """
- 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)")
- def test_clean_env_install(venv_without_setuptools, setuptools_wheel):
- """
- Check setuptools can be installed in a clean environment.
- """
- cmd = ["python", "-m", "pip", "install", str(setuptools_wheel)]
- venv_without_setuptools.run(cmd)
- def access_pypi():
- # Detect if tests are being run without connectivity
- if not os.environ.get('NETWORK_REQUIRED', False): # pragma: nocover
- try:
- urlopen('https://pypi.org', timeout=1)
- except URLError:
- # No network, disable most of these tests
- return False
- return True
- @pytest.mark.skipif(
- 'platform.python_implementation() == "PyPy"',
- reason="https://github.com/pypa/setuptools/pull/2865#issuecomment-965834995",
- )
- @pytest.mark.skipif(not access_pypi(), reason="no network")
- # ^-- Even when it is not necessary to install a different version of `pip`
- # the build process will still try to download `wheel`, see #3147 and #2986.
- @pytest.mark.parametrize(
- 'pip_version',
- [
- None,
- pytest.param(
- 'pip<20.1',
- marks=pytest.mark.xfail(
- 'sys.version_info >= (3, 12)',
- reason="pip 23.1.2 required for Python 3.12 and later",
- ),
- ),
- pytest.param(
- 'pip<21',
- marks=pytest.mark.xfail(
- 'sys.version_info >= (3, 12)',
- reason="pip 23.1.2 required for Python 3.12 and later",
- ),
- ),
- pytest.param(
- 'pip<22',
- marks=pytest.mark.xfail(
- 'sys.version_info >= (3, 12)',
- reason="pip 23.1.2 required for Python 3.12 and later",
- ),
- ),
- pytest.param(
- 'pip<23',
- marks=pytest.mark.xfail(
- 'sys.version_info >= (3, 12)',
- reason="pip 23.1.2 required for Python 3.12 and later",
- ),
- ),
- pytest.param(
- 'https://github.com/pypa/pip/archive/main.zip',
- marks=pytest.mark.xfail(reason='#2975'),
- ),
- ],
- )
- 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, in a venv without setuptools (as it
- # should not be needed for bootstrapping from source)
- 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.
- venv.run(["pip", "install", "--no-cache-dir", "--upgrade", str(setuptools_sdist)])
- def test_no_missing_dependencies(bare_venv, request):
- """
- Quick and dirty test to ensure all external dependencies are vendored.
- """
- setuptools_dir = request.config.rootdir
- bare_venv.run(['python', 'setup.py', '--help'], cwd=setuptools_dir)
|