1import argparse 2import pytest 3 4class CoverageError(Exception): 5 pass 6 7class PytestCovWarning(pytest.PytestWarning): 8 pass 9 10class CovDisabledWarning(PytestCovWarning): 11 pass 12 13class CovReportWarning(PytestCovWarning): 14 pass 15 16class StoreReport(argparse.Action): 17 def __call__(self, parser, namespace, values, option_string=None): 18 report_type, file = values 19 namespace.cov_report[report_type] = file 20 21def pytest_addoption(parser): 22 group = parser.getgroup('cov', 'coverage reporting') 23 group.addoption( 24 '--cov', 25 action='append', 26 default=[], 27 metavar='SOURCE', 28 nargs='?', 29 const=True, 30 dest='cov_source', 31 ) 32 group.addoption( 33 '--cov-reset', 34 action='store_const', 35 const=[], 36 dest='cov_source', 37 ) 38 group.addoption( 39 '--cov-report', 40 action=StoreReport, 41 default={}, 42 metavar='TYPE', 43 type=lambda x: x.split(":", 1) if ":" in x else (x, None), 44 ) 45 group.addoption( 46 '--cov-config', 47 action='store', 48 default='.coveragerc', 49 metavar='PATH', 50 ) 51 group.addoption( 52 '--no-cov-on-fail', 53 action='store_true', 54 default=False, 55 ) 56 group.addoption( 57 '--no-cov', 58 action='store_true', 59 default=False, 60 ) 61 group.addoption( 62 '--cov-fail-under', 63 action='store', 64 metavar='MIN', 65 type=str, 66 ) 67 group.addoption( 68 '--cov-append', 69 action='store_true', 70 default=False, 71 ) 72 group.addoption( 73 '--cov-branch', 74 action='store_true', 75 default=None, 76 ) 77 group.addoption( 78 '--cov-context', 79 action='store', 80 metavar='CONTEXT', 81 type=str, 82 ) 83 84def pytest_configure(config): 85 config.addinivalue_line('markers', 'no_cover: disable coverage for this test.') 86 87@pytest.fixture 88def no_cover(): 89 pass 90 91@pytest.fixture 92def cov(): 93 pass