|
import os |
|
import sys |
|
import subprocess |
|
from urllib.request import urlopen |
|
from urllib.error import URLError |
|
|
|
|
|
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(): |
|
|
|
if not os.environ.get('NETWORK_REQUIRED', False): |
|
try: |
|
urlopen('https://pypi.org', timeout=1) |
|
except URLError: |
|
|
|
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") |
|
|
|
|
|
@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. |
|
""" |
|
|
|
|
|
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): |
|
|
|
venv.run(["python", "-c", "import setuptools"]) |
|
|
|
|
|
venv.run(["pip", "install", str(setuptools_wheel)]) |
|
|
|
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 |
|
for command in ('upload',): |
|
bare_venv.run(['python', 'setup.py', command, '-h'], cwd=setuptools_dir) |
|
|