Skip to content

Commit 1b29a69

Browse files
committed
making use of the expected property of RuleTest
1 parent c06b6c4 commit 1b29a69

File tree

2 files changed

+64
-14
lines changed

2 files changed

+64
-14
lines changed

tests/test_testing.py

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,47 @@ def test_raises_invalid_with_count(self):
6565
with pytest.raises(
6666
AssertionError,
6767
match=(
68-
"Rule 'force-title': test_invalid_1:"
68+
"Rule 'force-title': test_invalid_0:"
6969
" expected one problem, but got no problems."
7070
),
7171
):
7272
tester.run(
7373
"force-title",
7474
ForceTitle,
7575
invalid=[
76-
RuleTest(dataset=INVALID_DATASET_1, expected=1),
7776
RuleTest(dataset=VALID_DATASET_1, expected=1),
7877
],
7978
)
8079

81-
def test_raises_invalid_with_message(self):
80+
def test_raises_valid_with_count(self):
8281
tester = RuleTester(rules={"testing/force-title": "error"})
8382
with pytest.raises(
8483
AssertionError,
8584
match=(
86-
"Rule 'force-title': test_invalid_1:"
85+
"Rule 'force-title':"
86+
" test_invalid_raises_valid_with_count:"
87+
" expected one problem, but got no problems."
88+
),
89+
):
90+
tester.run(
91+
"force-title",
92+
ForceTitle,
93+
invalid=[
94+
RuleTest(
95+
dataset=VALID_DATASET_1,
96+
expected=1,
97+
name="raises_valid_with_count",
98+
),
99+
],
100+
)
101+
102+
def test_raises_invalid_with_matching_message(self):
103+
tester = RuleTester(rules={"testing/force-title": "error"})
104+
with pytest.raises(
105+
AssertionError,
106+
match=(
107+
"Rule 'force-title':"
108+
" test_invalid_raises_invalid_with_matching_message:"
87109
" expected one problem, but got no problems:\n"
88110
"Expected message:\n"
89111
" 0: Datasets must have a title"
@@ -94,11 +116,34 @@ def test_raises_invalid_with_message(self):
94116
ForceTitle,
95117
invalid=[
96118
RuleTest(
97-
dataset=INVALID_DATASET_1,
119+
dataset=VALID_DATASET_1,
98120
expected=["Datasets must have a title"],
121+
name="raises_invalid_with_matching_message",
99122
),
123+
],
124+
)
125+
126+
def test_raises_invalid_with_mismatching_message(self):
127+
tester = RuleTester(rules={"testing/force-title": "error"})
128+
with pytest.raises(
129+
AssertionError,
130+
match=(
131+
"Rule 'force-title':"
132+
" test_invalid_raises_invalid_with_mismatching_message:"
133+
" got one error as expected, but encountered message mismatch:\n"
134+
"Message 0:\n"
135+
" Expected: Batasets bust bave a bitle\n"
136+
" Actual: Datasets must have a title"
137+
),
138+
):
139+
tester.run(
140+
"force-title",
141+
ForceTitle,
142+
invalid=[
100143
RuleTest(
101-
dataset=VALID_DATASET_1, expected=["Datasets must have a title"]
144+
dataset=INVALID_DATASET_1,
145+
expected=["Batasets bust bave a bitle"],
146+
name="raises_invalid_with_mismatching_message",
102147
),
103148
],
104149
)

xrlint/testing.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ def _test_rule(
222222
lines.append(f" Actual: {result_text}")
223223
if all_ok:
224224
return None
225+
225226
else:
226227
if expected_messages:
227228
lines.append(
@@ -234,14 +235,18 @@ def _test_rule(
234235
for i, text in enumerate(map(_get_message_text, result.messages)):
235236
lines.append(f" {i}: {text}")
236237

237-
actual = format_problems(result.error_count, result.warning_count)
238-
expected = format_count(expected_message_count, "problem")
239-
messages = "\n".join(lines)
240-
messages = (":\n" + messages) if messages else "."
241-
return (
242-
f"Rule {rule_name!r}: {test_id}:"
243-
f" expected {expected}, but got {actual}{messages}"
244-
)
238+
result_text = format_problems(result.error_count, result.warning_count)
239+
if expected_message_count == result_message_count:
240+
problem_text = (
241+
f"got {result_text} as expected, but encountered message mismatch"
242+
)
243+
else:
244+
expected_text = format_count(expected_message_count, "problem")
245+
problem_text = f"expected {expected_text}, but got {result_text}"
246+
247+
messages_text = "\n".join(lines)
248+
messages_text = (":\n" + messages_text) if messages_text else "."
249+
return f"Rule {rule_name!r}: {test_id}: {problem_text}{messages_text}"
245250

246251

247252
def _format_test_id(

0 commit comments

Comments
 (0)