Skip to content

Commit e8b4120

Browse files
committed
test: update --precision & --fail-under tests to really test the fix from #1317
1 parent 73bb553 commit e8b4120

File tree

1 file changed

+51
-38
lines changed

1 file changed

+51
-38
lines changed

tests/test_cmdline.py

Lines changed: 51 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,9 +1077,9 @@ def test_exit(self):
10771077

10781078

10791079
class CoverageReportingFake:
1080-
"""A fake Coverage.coverage test double."""
1080+
"""A fake Coverage.coverage test double for FailUnderTest methods."""
10811081
# pylint: disable=missing-function-docstring
1082-
def __init__(self, report_result, html_result, xml_result, json_report, lcov_result):
1082+
def __init__(self, report_result, html_result=0, xml_result=0, json_report=0, lcov_result=0):
10831083
self.config = CoverageConfig()
10841084
self.report_result = report_result
10851085
self.html_result = html_result
@@ -1111,39 +1111,52 @@ def json_report(self, *args_unused, **kwargs_unused):
11111111
def lcov_report(self, *args_unused, **kwargs_unused):
11121112
return self.lcov_result
11131113

1114-
@pytest.mark.parametrize("results, fail_under, cmd, ret", [
1115-
# Command-line switch properly checks the result of reporting functions.
1116-
((20, 30, 40, 50, 60), None, "report --fail-under=19", 0),
1117-
((20, 30, 40, 50, 60), None, "report --fail-under=21", 2),
1118-
((20, 30, 40, 50, 60), None, "html --fail-under=29", 0),
1119-
((20, 30, 40, 50, 60), None, "html --fail-under=31", 2),
1120-
((20, 30, 40, 50, 60), None, "xml --fail-under=39", 0),
1121-
((20, 30, 40, 50, 60), None, "xml --fail-under=41", 2),
1122-
((20, 30, 40, 50, 60), None, "json --fail-under=49", 0),
1123-
((20, 30, 40, 50, 60), None, "json --fail-under=51", 2),
1124-
((20, 30, 40, 50, 60), None, "lcov --fail-under=59", 0),
1125-
((20, 30, 40, 50, 60), None, "lcov --fail-under=61", 2),
1126-
# Configuration file setting properly checks the result of reporting.
1127-
((20, 30, 40, 50, 60), 19, "report", 0),
1128-
((20, 30, 40, 50, 60), 21, "report", 2),
1129-
((20, 30, 40, 50, 60), 29, "html", 0),
1130-
((20, 30, 40, 50, 60), 31, "html", 2),
1131-
((20, 30, 40, 50, 60), 39, "xml", 0),
1132-
((20, 30, 40, 50, 60), 41, "xml", 2),
1133-
((20, 30, 40, 50, 60), 49, "json", 0),
1134-
((20, 30, 40, 50, 60), 51, "json", 2),
1135-
((20, 30, 40, 50, 60), 59, "lcov", 0),
1136-
((20, 30, 40, 50, 60), 61, "lcov", 2),
1137-
# Command-line overrides configuration.
1138-
((20, 30, 40, 50, 60), 19, "report --fail-under=21", 2),
1139-
# Precision defined
1140-
((20, 30, 40, 50, 60), None, "report --fail-under=20.1 --precision=1", 2),
1141-
((20, 30, 40, 50, 60), None, "report --fail-under=19.9 --precision=1", 0),
1142-
])
1143-
def test_fail_under(results, fail_under, cmd, ret):
1144-
cov = CoverageReportingFake(*results)
1145-
if fail_under is not None:
1146-
cov.set_option("report:fail_under", fail_under)
1147-
with mock.patch("coverage.cmdline.Coverage", lambda *a,**kw: cov):
1148-
ret_actual = command_line(cmd)
1149-
assert ret_actual == ret
1114+
1115+
class FailUnderTest(CoverageTest):
1116+
"""Tests of the --fail-under handling in cmdline.py."""
1117+
1118+
@pytest.mark.parametrize("results, fail_under, cmd, ret", [
1119+
# Command-line switch properly checks the result of reporting functions.
1120+
((20, 30, 40, 50, 60), None, "report --fail-under=19", 0),
1121+
((20, 30, 40, 50, 60), None, "report --fail-under=21", 2),
1122+
((20, 30, 40, 50, 60), None, "html --fail-under=29", 0),
1123+
((20, 30, 40, 50, 60), None, "html --fail-under=31", 2),
1124+
((20, 30, 40, 50, 60), None, "xml --fail-under=39", 0),
1125+
((20, 30, 40, 50, 60), None, "xml --fail-under=41", 2),
1126+
((20, 30, 40, 50, 60), None, "json --fail-under=49", 0),
1127+
((20, 30, 40, 50, 60), None, "json --fail-under=51", 2),
1128+
((20, 30, 40, 50, 60), None, "lcov --fail-under=59", 0),
1129+
((20, 30, 40, 50, 60), None, "lcov --fail-under=61", 2),
1130+
# Configuration file setting properly checks the result of reporting.
1131+
((20, 30, 40, 50, 60), 19, "report", 0),
1132+
((20, 30, 40, 50, 60), 21, "report", 2),
1133+
((20, 30, 40, 50, 60), 29, "html", 0),
1134+
((20, 30, 40, 50, 60), 31, "html", 2),
1135+
((20, 30, 40, 50, 60), 39, "xml", 0),
1136+
((20, 30, 40, 50, 60), 41, "xml", 2),
1137+
((20, 30, 40, 50, 60), 49, "json", 0),
1138+
((20, 30, 40, 50, 60), 51, "json", 2),
1139+
((20, 30, 40, 50, 60), 59, "lcov", 0),
1140+
((20, 30, 40, 50, 60), 61, "lcov", 2),
1141+
# Command-line overrides configuration.
1142+
((20, 30, 40, 50, 60), 19, "report --fail-under=21", 2),
1143+
])
1144+
def test_fail_under(self, results, fail_under, cmd, ret):
1145+
cov = CoverageReportingFake(*results)
1146+
if fail_under is not None:
1147+
cov.set_option("report:fail_under", fail_under)
1148+
with mock.patch("coverage.cmdline.Coverage", lambda *a,**kw: cov):
1149+
self.command_line(cmd, ret)
1150+
1151+
@pytest.mark.parametrize("result, cmd, ret, msg", [
1152+
(20.5, "report --fail-under=20.4 --precision=1", 0, ""),
1153+
(20.5, "report --fail-under=20.6 --precision=1", 2,
1154+
"Coverage failure: total of 20.5 is less than fail-under=20.6\n"),
1155+
(20.12345, "report --fail-under=20.1235 --precision=5", 2,
1156+
"Coverage failure: total of 20.12345 is less than fail-under=20.12350\n"),
1157+
])
1158+
def test_fail_under_with_precision(self, result, cmd, ret, msg):
1159+
cov = CoverageReportingFake(report_result=result)
1160+
with mock.patch("coverage.cmdline.Coverage", lambda *a,**kw: cov):
1161+
self.command_line(cmd, ret)
1162+
assert self.stdout() == msg

0 commit comments

Comments
 (0)