@@ -1077,9 +1077,9 @@ def test_exit(self):
10771077
10781078
10791079class 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