1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00
pip/tests/functional/test_install_compat.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

79 lines
2.3 KiB
Python
Raw Normal View History

"""
Tests for compatibility workarounds.
"""
import os
from pathlib import Path
2017-05-16 12:16:30 +02:00
2015-01-15 00:53:15 +01:00
import pytest
2023-06-05 16:06:11 +02:00
from tests.lib import (
PipTestEnvironment,
TestData,
assert_all_changes,
2023-09-21 02:00:34 +02:00
pyversion,
2023-06-05 16:06:11 +02:00
)
2015-01-15 00:53:15 +01:00
@pytest.mark.network
def test_debian_egg_name_workaround(
script: PipTestEnvironment,
shared_data: TestData,
tmp_path: Path,
) -> None:
"""
We can uninstall packages installed with the pyversion removed from the
egg-info metadata directory name.
Refs:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618367
https://bugs.launchpad.net/ubuntu/+source/distribute/+bug/725178
https://bitbucket.org/ianb/pip/issue/104/pip-uninstall-on-ubuntu-linux
"""
result = script.run(
"python",
"setup.py",
"install",
"--single-version-externally-managed",
f"--record={tmp_path / 'record'}",
cwd=shared_data.src / "simplewheel-2.0",
)
egg_info = os.path.join(
script.site_packages, f"simplewheel-2.0-py{pyversion}.egg-info"
)
# Debian only removes pyversion for global installs, not inside a venv
# so even if this test runs on a Debian/Ubuntu system with broken
# setuptools, since our test runs inside a venv we'll still have the normal
# .egg-info
result.did_create(egg_info, message=f"Couldn't find {egg_info}")
# The Debian no-pyversion version of the .egg-info
mangled = os.path.join(script.site_packages, "simplewheel-2.0.egg-info")
result.did_not_create(mangled, message=f"Found unexpected {mangled}")
# Simulate a Debian install by copying the .egg-info to their name for it
full_egg_info = os.path.join(script.base_path, egg_info)
assert os.path.isdir(full_egg_info)
full_mangled = os.path.join(script.base_path, mangled)
os.renames(full_egg_info, full_mangled)
assert os.path.isdir(full_mangled)
# Try the uninstall and verify that everything is removed.
result2 = script.pip("uninstall", "simplewheel", "-y")
assert_all_changes(result, result2, [script.venv / "build", "cache"])
def test_setup_py_with_dos_line_endings(
script: PipTestEnvironment, data: TestData
) -> None:
"""
It doesn't choke on a setup.py file that uses DOS line endings (\\r\\n).
Refs https://github.com/pypa/pip/issues/237
"""
to_install = data.packages.joinpath("LineEndings")
script.pip("install", to_install)