mirror of https://github.com/pypa/pip
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
from pathlib import Path
|
|
from typing import Callable, Optional
|
|
|
|
import pytest
|
|
|
|
from pip._internal.cli.status_codes import ERROR, SUCCESS
|
|
from tests.lib import PipTestEnvironment
|
|
from tests.lib.wheel import make_wheel
|
|
|
|
MakeFakeWheel = Callable[[str], str]
|
|
|
|
|
|
@pytest.fixture()
|
|
def make_fake_wheel(script: PipTestEnvironment) -> MakeFakeWheel:
|
|
def _make_fake_wheel(wheel_tag: str) -> str:
|
|
wheel_house = script.scratch_path.joinpath("wheelhouse")
|
|
wheel_house.mkdir()
|
|
wheel_builder = make_wheel(
|
|
name="fake",
|
|
version="1.0",
|
|
wheel_metadata_updates={"Tag": []},
|
|
)
|
|
wheel_path = wheel_house.joinpath(f"fake-1.0-{wheel_tag}.whl")
|
|
wheel_builder.save_to(wheel_path)
|
|
return str(wheel_path)
|
|
|
|
return _make_fake_wheel
|
|
|
|
|
|
@pytest.mark.parametrize("implementation", [None, "fakepy"])
|
|
@pytest.mark.parametrize("python_version", [None, "1"])
|
|
@pytest.mark.parametrize("abi", [None, "fakeabi"])
|
|
@pytest.mark.parametrize("platform", [None, "fakeplat"])
|
|
def test_new_resolver_target_checks_compatibility_failure(
|
|
script: PipTestEnvironment,
|
|
make_fake_wheel: MakeFakeWheel,
|
|
implementation: Optional[str],
|
|
python_version: Optional[str],
|
|
abi: Optional[str],
|
|
platform: Optional[str],
|
|
) -> None:
|
|
fake_wheel_tag = "fakepy1-fakeabi-fakeplat"
|
|
args = [
|
|
"install",
|
|
"--only-binary=:all:",
|
|
"--no-cache-dir",
|
|
"--no-index",
|
|
"--target",
|
|
str(script.scratch_path.joinpath("target")),
|
|
make_fake_wheel(fake_wheel_tag),
|
|
]
|
|
if implementation:
|
|
args += ["--implementation", implementation]
|
|
if python_version:
|
|
args += ["--python-version", python_version]
|
|
if abi:
|
|
args += ["--abi", abi]
|
|
if platform:
|
|
args += ["--platform", platform]
|
|
|
|
args_tag = f"{implementation}{python_version}-{abi}-{platform}"
|
|
wheel_tag_matches = args_tag == fake_wheel_tag
|
|
|
|
result = script.pip(*args, expect_error=(not wheel_tag_matches))
|
|
|
|
dist_info = Path("scratch", "target", "fake-1.0.dist-info")
|
|
if wheel_tag_matches:
|
|
assert result.returncode == SUCCESS
|
|
result.did_create(dist_info)
|
|
else:
|
|
assert result.returncode == ERROR
|
|
result.did_not_create(dist_info)
|