Skip to content

Commit

Permalink
More Specifier and SpecifierSet tests
Browse files Browse the repository at this point in the history
  • Loading branch information
notatallshaw committed Feb 14, 2025
1 parent 7865467 commit 6a04147
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
25 changes: 25 additions & 0 deletions tests/test_specifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,11 @@ def test_specifiers_prereleases(self, specifier, version, expected):
# Test overriding with the overall specifier
(">=1.0.dev1", True, None, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0.dev1", False, None, ["1.0", "2.0a1"], ["1.0"]),
# Test when both specifier and filter have prerelease value
(">=1.0", True, False, ["1.0", "2.0a1"], ["1.0"]),
(">=1.0", False, True, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0", True, True, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0", False, False, ["1.0", "2.0a1"], ["1.0"]),
],
)
def test_specifier_filter(
Expand Down Expand Up @@ -749,6 +754,26 @@ def test_specifier_contains_installed_prereleases(self):
(">=1.0.dev1", False, None, ["1.0", "2.0a1"], ["1.0"]),
("", True, None, ["1.0a1"], ["1.0a1"]),
("", False, None, ["1.0a1"], []),
# Test when both specifier and filter have prerelease value
(">=1.0", True, False, ["1.0", "2.0a1"], ["1.0"]),
(">=1.0", False, True, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0", True, True, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0", False, False, ["1.0", "2.0a1"], ["1.0"]),
# Test when there are multiple specifiers
(">=1.0,<=2.0", None, None, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0dev", None, None, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0", True, None, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0", False, None, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0dev", False, None, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0dev", True, None, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0", None, False, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0", None, True, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0dev", None, False, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0dev", None, True, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0", True, False, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0", False, True, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
(">=1.0,<=2.0dev", True, False, ["1.0", "1.5a1"], ["1.0"]),
(">=1.0,<=2.0dev", False, True, ["1.0", "1.5a1"], ["1.0", "1.5a1"]),
],
)
def test_specifier_filter(
Expand Down
47 changes: 47 additions & 0 deletions tests/test_specifierset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import pytest

from packaging.specifiers import SpecifierSet
from packaging.version import Version


class TestSpeicifierSet:
@pytest.mark.parametrize(
("specifier", "specifier_prereleases", "prereleases", "input", "expected"),
[
# General test of the filter method
("", None, None, ["1.0", "2.0a1"], ["1.0"]),
(">=1.0.dev1", None, None, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
("", None, None, ["1.0a1"], ["1.0a1"]),
(">=1.2.3", None, None, ["1.2", "1.5a1"], ["1.5a1"]),
(">=1.2.3", None, None, ["1.3", "1.5a1"], ["1.3"]),
("", None, None, ["1.0", Version("2.0")], ["1.0", Version("2.0")]),
(">=1.0", None, None, ["2.0a1"], ["2.0a1"]),
("!=2.0a1", None, None, ["1.0a2", "1.0", "2.0a1"], ["1.0"]),
("==2.0a1", None, None, ["2.0a1"], ["2.0a1"]),
(">2.0a1", None, None, ["2.0a1", "3.0a2", "3.0"], ["3.0a2", "3.0"]),
("<2.0a1", None, None, ["1.0a2", "1.0", "2.0a1"], ["1.0a2", "1.0"]),
("~=2.0a1", None, None, ["1.0", "2.0a1", "3.0a2", "3.0"], ["2.0a1"]),
# Test overriding with the prereleases parameter on filter
("", None, False, ["1.0a1"], []),
(">=1.0.dev1", None, False, ["1.0", "2.0a1"], ["1.0"]),
("", None, True, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
# Test overriding with the overall specifier
("", True, None, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
("", False, None, ["1.0", "2.0a1"], ["1.0"]),
(">=1.0.dev1", True, None, ["1.0", "2.0a1"], ["1.0", "2.0a1"]),
(">=1.0.dev1", False, None, ["1.0", "2.0a1"], ["1.0"]),
("", True, None, ["1.0a1"], ["1.0a1"]),
("", False, None, ["1.0a1"], []),
],
)
def test_specifier_filter(
self, specifier_prereleases, specifier, prereleases, input, expected
):
if specifier_prereleases is None:
spec = SpecifierSet(specifier)
else:
spec = SpecifierSet(specifier, prereleases=specifier_prereleases)

kwargs = {"prereleases": prereleases} if prereleases is not None else {}

assert list(spec.filter(input, **kwargs)) == expected

0 comments on commit 6a04147

Please sign in to comment.