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