import pytest from pip._internal.cli.status_codes import ERROR, SUCCESS from tests.lib.path import Path from tests.lib.wheel import make_wheel @pytest.fixture() def make_fake_wheel(script): def _make_fake_wheel(wheel_tag): 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("fake-1.0-{}.whl".format(wheel_tag)) wheel_builder.save_to(wheel_path) return 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, make_fake_wheel, implementation, python_version, abi, platform, ): fake_wheel_tag = "fakepy1-fakeabi-fakeplat" args = [ "install", "--use-feature=2020-resolver", "--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 = "{}{}-{}-{}".format( 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)