Skip to content

Commit f4a5ac1

Browse files
committed
Add new explicit requirement test
1 parent a276c78 commit f4a5ac1

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

tests/unit/resolution_resolvelib/test_provider.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
from pip._internal.resolution.resolvelib.candidates import REQUIRES_PYTHON_IDENTIFIER
1111
from pip._internal.resolution.resolvelib.factory import Factory
1212
from pip._internal.resolution.resolvelib.provider import PipProvider
13-
from pip._internal.resolution.resolvelib.requirements import SpecifierRequirement
13+
from pip._internal.resolution.resolvelib.requirements import (
14+
ExplicitRequirement,
15+
SpecifierRequirement,
16+
)
1417

1518
if TYPE_CHECKING:
1619
from pip._vendor.resolvelib.providers import Preference
@@ -20,6 +23,12 @@
2023
PreferenceInformation = RequirementInformation[Requirement, Candidate]
2124

2225

26+
class FakeCandidate(Candidate):
27+
"""A minimal fake candidate for testing purposes."""
28+
29+
def __init__(self, *args: object, **kwargs: object) -> None: ...
30+
31+
2332
def build_req_info(
2433
name: str, parent: Optional[Candidate] = None
2534
) -> "PreferenceInformation":
@@ -33,6 +42,14 @@ def build_req_info(
3342
return requirement_information
3443

3544

45+
def build_explicit_req_info(
46+
url: str, parent: Optional[Candidate] = None
47+
) -> "PreferenceInformation":
48+
"""Build a direct requirement using a minimal FakeCandidate."""
49+
direct_requirement = ExplicitRequirement(FakeCandidate(url))
50+
return RequirementInformation(requirement=direct_requirement, parent=parent)
51+
52+
3653
@pytest.mark.parametrize(
3754
"identifier, information, backtrack_causes, user_requested, expected",
3855
[
@@ -42,55 +59,63 @@ def build_req_info(
4259
{REQUIRES_PYTHON_IDENTIFIER: [build_req_info("python")]},
4360
[],
4461
{},
45-
(False, False, True, True, math.inf, True, REQUIRES_PYTHON_IDENTIFIER),
62+
(False, True, True, True, math.inf, True, REQUIRES_PYTHON_IDENTIFIER),
4663
),
4764
# Pinned package with "=="
4865
(
4966
"pinned-package",
5067
{"pinned-package": [build_req_info("pinned-package==1.0")]},
5168
[],
5269
{},
53-
(True, False, False, True, math.inf, False, "pinned-package"),
70+
(True, True, False, True, math.inf, False, "pinned-package"),
5471
),
5572
# Star-specified package, i.e. with "*"
5673
(
5774
"star-specified-package",
5875
{"star-specified-package": [build_req_info("star-specified-package==1.*")]},
5976
[],
6077
{},
61-
(True, False, True, True, math.inf, False, "star-specified-package"),
78+
(True, True, True, True, math.inf, False, "star-specified-package"),
6279
),
6380
# Package that caused backtracking
6481
(
6582
"backtrack-package",
6683
{"backtrack-package": [build_req_info("backtrack-package")]},
6784
[build_req_info("backtrack-package")],
6885
{},
69-
(True, False, True, False, math.inf, True, "backtrack-package"),
86+
(True, True, True, False, math.inf, True, "backtrack-package"),
7087
),
7188
# Root package requested by user
7289
(
7390
"root-package",
7491
{"root-package": [build_req_info("root-package")]},
7592
[],
7693
{"root-package": 1},
77-
(True, False, True, True, 1, True, "root-package"),
94+
(True, True, True, True, 1, True, "root-package"),
7895
),
7996
# Unfree package (with specifier operator)
8097
(
8198
"unfree-package",
8299
{"unfree-package": [build_req_info("unfree-package<1")]},
83100
[],
84101
{},
85-
(True, False, True, True, math.inf, False, "unfree-package"),
102+
(True, True, True, True, math.inf, False, "unfree-package"),
86103
),
87104
# Free package (no operator)
88105
(
89106
"free-package",
90107
{"free-package": [build_req_info("free-package")]},
91108
[],
92109
{},
93-
(True, False, True, True, math.inf, True, "free-package"),
110+
(True, True, True, True, math.inf, True, "free-package"),
111+
),
112+
# Test case for "direct" preference (explicit URL)
113+
(
114+
"direct-package",
115+
{"direct-package": [build_explicit_req_info("direct-package")]},
116+
[],
117+
{},
118+
(True, False, True, True, math.inf, True, "direct-package"),
94119
),
95120
],
96121
)

0 commit comments

Comments
 (0)