summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2022-12-31 20:10:18 -0500
committerNed Batchelder <ned@nedbatchelder.com>2022-12-31 20:39:09 -0500
commit3760b9876cc837f7d5d22fbadf6a0da51eb9cec5 (patch)
treee0e43663b1ad5448c295e3961bf017f5800e3915
parent586726322069bab62f33dccab70101ca76f595c2 (diff)
downloadpython-coveragepy-git-3760b9876cc837f7d5d22fbadf6a0da51eb9cec5.tar.gz
fix: lcov command didn't report a total, so --fail-under didn't work
-rw-r--r--CHANGES.rst3
-rw-r--r--coverage/lcovreport.py7
-rw-r--r--tests/test_lcov.py19
3 files changed, 22 insertions, 7 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index d8d36442..352ddb65 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -30,6 +30,9 @@ Unreleased
- Fix: adjusted how decorators are traced on PyPy 7.3.10, fixing `issue 1515`_.
+- Fix: the ``coverage lcov`` report did not properly implement the
+ ``--fail-under=MIN`` option. This has been fixed.
+
- Refactor: a number of refactorings internally due to adding type annotations.
This should not affect outward behavior, but they were a bit invasive in some
places.
diff --git a/coverage/lcovreport.py b/coverage/lcovreport.py
index 4dc73c29..10d2f51c 100644
--- a/coverage/lcovreport.py
+++ b/coverage/lcovreport.py
@@ -8,6 +8,7 @@ import base64
from hashlib import md5
from coverage.report import get_analysis_to_report
+from coverage.results import Analysis, Numbers
class LcovReporter:
@@ -17,7 +18,7 @@ class LcovReporter:
def __init__(self, coverage):
self.coverage = coverage
- self.config = self.coverage.config
+ self.total = Numbers(self.coverage.config.precision)
def report(self, morfs, outfile=None):
"""Renders the full lcov report.
@@ -33,12 +34,16 @@ class LcovReporter:
for fr, analysis in get_analysis_to_report(self.coverage, morfs):
self.get_lcov(fr, analysis, outfile)
+ return self.total.n_statements and self.total.pc_covered
+
def get_lcov(self, fr, analysis, outfile=None):
"""Produces the lcov data for a single file.
This currently supports both line and branch coverage,
however function coverage is not supported.
"""
+ self.total += analysis.numbers
+
outfile.write("TN:\n")
outfile.write(f"SF:{fr.relative_filename()}\n")
source_lines = fr.source().splitlines()
diff --git a/tests/test_lcov.py b/tests/test_lcov.py
index ed7706fb..6c9605ca 100644
--- a/tests/test_lcov.py
+++ b/tests/test_lcov.py
@@ -3,6 +3,7 @@
"""Test LCOV-based summary reporting for coverage.py."""
+import math
import textwrap
from tests.coveragetest import CoverageTest
@@ -75,7 +76,8 @@ class LcovTest(CoverageTest):
self.assert_doesnt_exist(".coverage")
cov = coverage.Coverage(source=["."])
self.start_import_stop(cov, "main_file")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert pct == 50.0
actual_result = self.get_lcov_report_content()
assert expected_result == actual_result
@@ -87,7 +89,8 @@ class LcovTest(CoverageTest):
self.make_file(".coveragerc", "[lcov]\noutput = data.lcov\n")
cov = coverage.Coverage(source=".")
self.start_import_stop(cov, "test_file")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert pct == 50.0
self.assert_exists("data.lcov")
expected_result = textwrap.dedent("""\
TN:
@@ -130,7 +133,8 @@ class LcovTest(CoverageTest):
self.assert_doesnt_exist(".coverage")
cov = coverage.Coverage(branch=True, source=".")
self.start_import_stop(cov, "main_file")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert math.isclose(pct, 16.666666666666668)
self.assert_exists("coverage.lcov")
expected_result = textwrap.dedent("""\
TN:
@@ -177,7 +181,8 @@ class LcovTest(CoverageTest):
self.assert_doesnt_exist(".coverage")
cov = coverage.Coverage(branch=True, source=".")
self.start_import_stop(cov, "test_file")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert math.isclose(pct, 41.666666666666664)
self.assert_exists("coverage.lcov")
expected_result = textwrap.dedent("""\
TN:
@@ -225,7 +230,8 @@ class LcovTest(CoverageTest):
self.assert_doesnt_exist(".coverage")
cov = coverage.Coverage(branch=True, source=".")
self.start_import_stop(cov, "main_file")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert math.isclose(pct, 66.66666666666667)
self.assert_exists("coverage.lcov")
expected_result = textwrap.dedent("""\
TN:
@@ -259,7 +265,8 @@ class LcovTest(CoverageTest):
self.assert_doesnt_exist(".coverage")
cov = coverage.Coverage(branch=True, source=".")
self.start_import_stop(cov, "__init__")
- cov.lcov_report()
+ pct = cov.lcov_report()
+ assert pct == 0.0
self.assert_exists("coverage.lcov")
# Newer Pythons have truly empty empty files.
if env.PYBEHAVIOR.empty_is_empty: