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

Build fake wheels for --user tests

The old INITools tests rely on setup.py, which relies on distutils and
generates a ton of issues. Build fake wheels directly to avoid dealing
with them.
This commit is contained in:
Tzu-ping Chung 2022-10-27 10:02:23 +08:00
parent b850d539f9
commit 4bf1b67964

View file

@ -1,6 +1,7 @@
"""
tests specific to "pip install --user"
"""
import os
import textwrap
from os.path import curdir, isdir, isfile
from pathlib import Path
@ -8,7 +9,12 @@ from pathlib import Path
import pytest
from tests.lib import pyversion # noqa: F401
from tests.lib import PipTestEnvironment, TestData, need_svn
from tests.lib import (
PipTestEnvironment,
TestData,
create_basic_wheel_for_package,
need_svn,
)
from tests.lib.local_repos import local_checkout
from tests.lib.venv import VirtualEnvironment
@ -142,7 +148,6 @@ class Tests_UserSite:
result2.did_create(egg_info_folder)
assert not isfile(initools_v3_file), initools_v3_file
@pytest.mark.network
@pytest.mark.incompatible_with_test_venv
def test_install_user_conflict_in_globalsite(
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@ -151,30 +156,41 @@ class Tests_UserSite:
Test user install with conflict in global site ignores site and
installs to usersite
"""
create_basic_wheel_for_package(script, "initools", "0.1")
create_basic_wheel_for_package(script, "initools", "0.2")
_patch_dist_in_site_packages(virtualenv)
script.pip("install", "INITools==0.2", "--no-binary=:all:")
result2 = script.pip("install", "--user", "INITools==0.1", "--no-binary=:all:")
script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"initools==0.2",
)
result2 = script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--user",
"initools==0.1",
)
# usersite has 0.1
# we still test for egg-info because no-binary implies setup.py install
egg_info_folder = script.user_site / f"INITools-0.1-py{pyversion}.egg-info"
dist_info_folder = script.user_site / "initools-0.1.dist-info"
initools_folder = script.user_site / "initools"
result2.did_create(egg_info_folder)
result2.did_create(dist_info_folder)
result2.did_create(initools_folder)
# site still has 0.2 (can't look in result1; have to check)
egg_info_folder = (
script.base_path
/ script.site_packages
/ f"INITools-0.2-py{pyversion}.egg-info"
dist_info_folder = (
script.base_path / script.site_packages / "initools-0.2.dist-info"
)
initools_folder = script.base_path / script.site_packages / "initools"
assert isdir(egg_info_folder)
assert isdir(dist_info_folder)
assert isdir(initools_folder)
@pytest.mark.network
@pytest.mark.incompatible_with_test_venv
def test_upgrade_user_conflict_in_globalsite(
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@ -183,31 +199,42 @@ class Tests_UserSite:
Test user install/upgrade with conflict in global site ignores site and
installs to usersite
"""
create_basic_wheel_for_package(script, "initools", "0.2")
create_basic_wheel_for_package(script, "initools", "0.3.1")
_patch_dist_in_site_packages(virtualenv)
script.pip("install", "INITools==0.2", "--no-binary=:all:")
script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"initools==0.2",
)
result2 = script.pip(
"install", "--user", "--upgrade", "INITools", "--no-binary=:all:"
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--user",
"--upgrade",
"initools",
)
# usersite has 0.3.1
# we still test for egg-info because no-binary implies setup.py install
egg_info_folder = script.user_site / f"INITools-0.3.1-py{pyversion}.egg-info"
dist_info_folder = script.user_site / "initools-0.3.1.dist-info"
initools_folder = script.user_site / "initools"
result2.did_create(egg_info_folder)
result2.did_create(dist_info_folder)
result2.did_create(initools_folder)
# site still has 0.2 (can't look in result1; have to check)
egg_info_folder = (
script.base_path
/ script.site_packages
/ f"INITools-0.2-py{pyversion}.egg-info"
dist_info_folder = (
script.base_path / script.site_packages / "initools-0.2.dist-info"
)
initools_folder = script.base_path / script.site_packages / "initools"
assert isdir(egg_info_folder), result2.stdout
assert isdir(dist_info_folder), result2.stdout
assert isdir(initools_folder)
@pytest.mark.network
@pytest.mark.incompatible_with_test_venv
def test_install_user_conflict_in_globalsite_and_usersite(
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@ -216,34 +243,54 @@ class Tests_UserSite:
Test user install with conflict in globalsite and usersite ignores
global site and updates usersite.
"""
initools_v3_file_name = os.path.join("initools", "configparser.py")
create_basic_wheel_for_package(script, "initools", "0.1")
create_basic_wheel_for_package(script, "initools", "0.2")
create_basic_wheel_for_package(
script,
"initools",
"0.3",
extra_files={initools_v3_file_name: "# Hi!"},
)
_patch_dist_in_site_packages(virtualenv)
script.pip("install", "INITools==0.2", "--no-binary=:all:")
script.pip("install", "--user", "INITools==0.3", "--no-binary=:all:")
result3 = script.pip("install", "--user", "INITools==0.1", "--no-binary=:all:")
script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"initools==0.2",
)
script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--user",
"initools==0.3",
)
result3 = script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--user",
"initools==0.1",
)
# usersite has 0.1
# we still test for egg-info because no-binary implies setup.py install
egg_info_folder = script.user_site / f"INITools-0.1-py{pyversion}.egg-info"
initools_v3_file = (
# file only in 0.3
script.base_path
/ script.user_site
/ "initools"
/ "configparser.py"
)
result3.did_create(egg_info_folder)
dist_info_folder = script.user_site / "initools-0.1.dist-info"
result3.did_create(dist_info_folder)
initools_v3_file = script.base_path / script.user_site / initools_v3_file_name
assert not isfile(initools_v3_file), initools_v3_file
# site still has 0.2 (can't just look in result1; have to check)
egg_info_folder = (
script.base_path
/ script.site_packages
/ f"INITools-0.2-py{pyversion}.egg-info"
dist_info_folder = (
script.base_path / script.site_packages / "initools-0.2.dist-info"
)
initools_folder = script.base_path / script.site_packages / "initools"
assert isdir(egg_info_folder)
assert isdir(dist_info_folder)
assert isdir(initools_folder)
@pytest.mark.network