Skip to content

Commit 576cb3e

Browse files
committed
feat: JSON report now has an explicit format version indicator coveragepy#1732
1 parent 2bbcb06 commit 576cb3e

3 files changed

Lines changed: 15 additions & 5 deletions

File tree

‎CHANGES.rst‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ development at the same time, such as 4.5.x and 5.0.
2020
Unreleased
2121
----------
2222

23-
Nothing yet.
23+
- Fix: the JSON report now includes an explicit format version number, closing
24+
`issue 1732`_.
25+
26+
.. _issue 1732: https://github.com/nedbat/coveragepy/issues/1732
2427

2528

2629
.. scriv-start-here

‎coverage/jsonreport.py‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
from coverage.data import CoverageData
2222

2323

24+
# "Version 1" had no format number at all.
25+
# 2: add the meta.format field.
26+
FORMAT_VERSION = 2
27+
2428
class JsonReporter:
2529
"""A reporter for writing JSON coverage results."""
2630

@@ -44,6 +48,7 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float:
4448
coverage_data = self.coverage.get_data()
4549
coverage_data.set_query_contexts(self.config.report_contexts)
4650
self.report_data["meta"] = {
51+
"format": FORMAT_VERSION,
4752
"version": __version__,
4853
"timestamp": datetime.datetime.now().isoformat(),
4954
"branch_coverage": coverage_data.has_arcs(),

‎tests/test_json.py‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import coverage
1515
from coverage import Coverage
16+
from coverage.jsonreport import FORMAT_VERSION
1617

1718
from tests.coveragetest import UsingModulesMixin, CoverageTest
1819

@@ -26,7 +27,7 @@ def _assert_expected_json_report(
2627
expected_result: Dict[str, Any],
2728
) -> None:
2829
"""
29-
Helper for tests that handles the common ceremony so the tests can be clearly show the
30+
Helper that handles common ceremonies so tests can clearly show the
3031
consequences of setting various arguments.
3132
"""
3233
self.make_file("a.py", """\
@@ -49,13 +50,16 @@ def _assert_expected_json_report(
4950
datetime.strptime(parsed_result['meta']['timestamp'], "%Y-%m-%dT%H:%M:%S.%f")
5051
)
5152
del (parsed_result['meta']['timestamp'])
53+
expected_result["meta"].update({
54+
"format": FORMAT_VERSION,
55+
"version": coverage.__version__,
56+
})
5257
assert parsed_result == expected_result
5358

5459
def test_branch_coverage(self) -> None:
5560
cov = coverage.Coverage(branch=True)
5661
expected_result = {
5762
'meta': {
58-
"version": coverage.__version__,
5963
"branch_coverage": True,
6064
"show_contexts": False,
6165
},
@@ -107,7 +111,6 @@ def test_simple_line_coverage(self) -> None:
107111
cov = coverage.Coverage()
108112
expected_result = {
109113
'meta': {
110-
"version": coverage.__version__,
111114
"branch_coverage": False,
112115
"show_contexts": False,
113116
},
@@ -152,7 +155,6 @@ def run_context_test(self, relative_files: bool) -> None:
152155
cov = coverage.Coverage(context="cool_test", config_file="config")
153156
expected_result = {
154157
'meta': {
155-
"version": coverage.__version__,
156158
"branch_coverage": False,
157159
"show_contexts": True,
158160
},

0 commit comments

Comments
 (0)