From c20bfd122be1bdaf4ba76985e83a49bd32065f18 Mon Sep 17 00:00:00 2001 From: David Hotham Date: Sun, 31 Jul 2022 01:43:12 +0100 Subject: [PATCH] fix allows_any for local versions --- src/poetry/core/semver/version.py | 3 ++ tests/semver/test_version.py | 55 ++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/poetry/core/semver/version.py b/src/poetry/core/semver/version.py index 0529bbb3b..407ed8c9e 100644 --- a/src/poetry/core/semver/version.py +++ b/src/poetry/core/semver/version.py @@ -95,6 +95,9 @@ def allows_all(self, other: VersionConstraint) -> bool: ) def allows_any(self, other: VersionConstraint) -> bool: + if isinstance(other, Version): + return self.allows(other) + return other.allows(self) def intersect(self, other: VersionConstraint) -> Version | EmptyConstraint: diff --git a/tests/semver/test_version.py b/tests/semver/test_version.py index 812949798..67c029ad6 100644 --- a/tests/semver/test_version.py +++ b/tests/semver/test_version.py @@ -164,14 +164,53 @@ def test_allows_all() -> None: assert v.allows_all(EmptyConstraint()) -def test_allows_any() -> None: - v = Version.parse("1.2.3") - - assert v.allows_any(v) - assert not v.allows_any(Version.parse("0.0.3")) - assert v.allows_any(VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"))) - assert v.allows_any(VersionRange()) - assert not v.allows_any(EmptyConstraint()) +@pytest.mark.parametrize( + ("version1", "version2", "expected"), + [ + ( + Version.parse("1.2.3"), + Version.parse("1.2.3"), + True, + ), + ( + Version.parse("1.2.3"), + Version.parse("1.2.3+cpu"), + True, + ), + ( + Version.parse("1.2.3+cpu"), + Version.parse("1.2.3"), + False, + ), + ( + Version.parse("1.2.3"), + Version.parse("0.0.3"), + False, + ), + ( + Version.parse("1.2.3"), + VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4")), + True, + ), + ( + Version.parse("1.2.3"), + VersionRange(), + True, + ), + ( + Version.parse("1.2.3"), + EmptyConstraint(), + False, + ), + ], +) +def test_allows_any( + version1: VersionConstraint, + version2: VersionConstraint, + expected: bool, +) -> None: + actual = version1.allows_any(version2) + assert actual == expected @pytest.mark.parametrize(