Skip to content

Commit 97405ff

Browse files
committed
Add integration test
1 parent 66da009 commit 97405ff

File tree

3 files changed

+60
-3
lines changed

3 files changed

+60
-3
lines changed

src/python/pants/build_graph/build_configuration.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from pants.build_graph.build_file_aliases import BuildFileAliases
1515
from pants.core.util_rules.environments import EnvironmentsSubsystem
1616
from pants.engine.goal import GoalSubsystem
17-
from pants.engine.rules import Rule, RuleIndex, TaskRule
17+
from pants.engine.rules import DeleteRule, Rule, RuleIndex, TaskRule
1818
from pants.engine.target import Target
1919
from pants.engine.unions import UnionRule
2020
from pants.option.alias import CliOptions
@@ -216,7 +216,9 @@ def register_subsystems(
216216
for subsystem in subsystems:
217217
self._subsystem_to_providers[subsystem].append(plugin_or_backend)
218218

219-
def register_rules(self, plugin_or_backend: str, rules: Iterable[Rule | UnionRule]):
219+
def register_rules(
220+
self, plugin_or_backend: str, rules: Iterable[Rule | UnionRule | DeleteRule]
221+
):
220222
"""Registers the given rules."""
221223
if not isinstance(rules, Iterable):
222224
raise TypeError(f"The rules must be an iterable, given {rules!r}")
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Copyright 2024 Pants project contributors (see CONTRIBUTORS.md).
2+
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3+
from dataclasses import dataclass
4+
5+
from pants.engine.rules import DeleteRule, collect_rules, rule
6+
from pants.testutil.rule_runner import QueryRule, RuleRunner
7+
8+
9+
@dataclass(frozen=True)
10+
class IntRequest:
11+
pass
12+
13+
14+
@rule
15+
async def original_rule(request: IntRequest) -> int:
16+
return 0
17+
18+
19+
@rule
20+
def new_rule(request: IntRequest) -> int:
21+
return 42
22+
23+
24+
def test_delete() -> None:
25+
rule_runner = RuleRunner(
26+
target_types=[],
27+
rules=[
28+
*collect_rules(
29+
{
30+
"original_rule": original_rule,
31+
}
32+
),
33+
QueryRule(int, [IntRequest]),
34+
],
35+
)
36+
37+
result = rule_runner.request(int, [IntRequest()])
38+
assert result == 0
39+
40+
rule_runner = RuleRunner(
41+
target_types=[],
42+
rules=[
43+
*collect_rules(
44+
{
45+
"original_rule": original_rule,
46+
"new_rule": new_rule,
47+
}
48+
),
49+
DeleteRule.create(original_rule),
50+
QueryRule(int, [IntRequest]),
51+
],
52+
)
53+
54+
result = rule_runner.request(int, [IntRequest()])
55+
assert result == 42

src/python/pants/engine/rules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ class RuleIndex:
538538
union_rules: FrozenOrderedSet[UnionRule]
539539

540540
@classmethod
541-
def create(cls, rule_entries: Iterable[Rule | UnionRule]) -> RuleIndex:
541+
def create(cls, rule_entries: Iterable[Rule | UnionRule | DeleteRule]) -> RuleIndex:
542542
"""Creates a RuleIndex with tasks indexed by their output type."""
543543
rules: OrderedSet[TaskRule] = OrderedSet()
544544
delete_rules: OrderedSet[DeleteRule] = OrderedSet()

0 commit comments

Comments
 (0)