From 2fecb93c8847fb5d34b580f5386327957fef5c76 Mon Sep 17 00:00:00 2001 From: Daniel Torres Date: Mon, 12 Feb 2024 00:54:42 +0000 Subject: [PATCH 1/3] Fix: total report values when an ignore regex is applied --- pycobertura/cobertura.py | 45 ++++++++++++++++++++++++++-------------- pycobertura/reporters.py | 12 ++++++++--- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/pycobertura/cobertura.py b/pycobertura/cobertura.py index d558502..5dab495 100644 --- a/pycobertura/cobertura.py +++ b/pycobertura/cobertura.py @@ -102,21 +102,23 @@ def version(self): """Return the version number of the coverage report.""" return self.xml.get("version") - def line_rate(self, filename=None): + def line_rate(self, filename=None, ignore_regex=None): """ Return the global line rate of the coverage report. If the `filename` file is given, return the line rate of the file. """ - if filename is None: + if filename is None and ignore_regex is None: return float(self.xml.get("line-rate")) - elements = self._class_elements_by_file_name[filename] - if len(elements) == 1: - return float(elements[0].get("line-rate")) - else: - total = self.total_statements(filename) - return float(self.total_hits(filename) / total) if total != 0 else 0 + if ignore_regex is None: + elements = self._class_elements_by_file_name[filename] + if len(elements) == 1: + return float(elements[0].get("line-rate")) + total = self.total_statements(filename, ignore_regex) + return ( + float(self.total_hits(filename, ignore_regex) / total) if total != 0 else 0 + ) def branch_rate(self, filename=None): """ @@ -209,7 +211,7 @@ def file_source(self, filename): return lines - def total_misses(self, filename=None): + def total_misses(self, filename=None, ignore_regex=None): """ Return the total number of uncovered statements for the file `filename`. If `filename` is not given, return the total @@ -218,9 +220,14 @@ def total_misses(self, filename=None): if filename is not None: return len(self.missed_statements(filename)) - return sum([len(self.missed_statements(filename)) for filename in self.files()]) + return sum( + [ + len(self.missed_statements(filename)) + for filename in self.files(ignore_regex) + ] + ) - def total_hits(self, filename=None): + def total_hits(self, filename=None, ignore_regex=None): """ Return the total number of covered statements for the file `filename`. If `filename` is not given, return the total @@ -228,10 +235,14 @@ def total_hits(self, filename=None): """ if filename is not None: return len(self.hit_statements(filename)) + return sum( + [ + len(self.hit_statements(filename)) + for filename in self.files(ignore_regex) + ] + ) - return sum([len(self.hit_statements(filename)) for filename in self.files()]) - - def total_statements(self, filename=None): + def total_statements(self, filename=None, ignore_regex=None): """ Return the total number of statements for the file `filename`. If `filename` is not given, return the total @@ -239,9 +250,11 @@ def total_statements(self, filename=None): """ if filename is not None: return len(self._get_lines_by_filename(filename)) - return sum( - [len(self._get_lines_by_filename(filename)) for filename in self.files()] + [ + len(self._get_lines_by_filename(filename)) + for filename in self.files(ignore_regex) + ] ) @memoize diff --git a/pycobertura/reporters.py b/pycobertura/reporters.py index 7af4a26..dc923e9 100644 --- a/pycobertura/reporters.py +++ b/pycobertura/reporters.py @@ -45,9 +45,15 @@ def get_report_lines(self): ], } lines["Filename"].append("TOTAL") - lines["Stmts"] += [self.cobertura.total_statements()] - lines["Miss"] += [self.cobertura.total_misses()] - lines["Cover"] += [self.format_line_rate(self.cobertura.line_rate())] + lines["Stmts"] += [ + self.cobertura.total_statements(ignore_regex=self.ignore_regex) + ] + lines["Miss"] += [self.cobertura.total_misses(ignore_regex=self.ignore_regex)] + lines["Cover"] += [ + self.format_line_rate( + self.cobertura.line_rate(ignore_regex=self.ignore_regex) + ) + ] lines["Missing"].append("") return lines From 7a87aa10be1ab5ee88e9d9fd14f30447a32c6828 Mon Sep 17 00:00:00 2001 From: Daniel Torres Date: Mon, 12 Feb 2024 01:22:36 +0000 Subject: [PATCH 2/3] Add test to test_reports --- tests/test_reporters.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_reporters.py b/tests/test_reporters.py index 4217c32..5e16494 100644 --- a/tests/test_reporters.py +++ b/tests/test_reporters.py @@ -43,6 +43,20 @@ def test_text_report__with_missing_range(): TOTAL 6 2 66.67%""" +def test_text_report__with_ignore_regex(): + from pycobertura.reporters import TextReporter + + cobertura = make_cobertura() + report = TextReporter(cobertura, ".*Main.java|.*ISortedArraySearch.java") + + assert report.generate() == """\ +Filename Stmts Miss Cover Missing +------------------------ ------- ------ ------- --------- +search/BinarySearch.java 12 1 91.67% 24 +search/LinearSearch.java 7 2 71.43% 19-24 +TOTAL 19 3 84.21%""" + + def test_text_report_delta__no_diff(): from pycobertura.reporters import TextReporterDelta From aa11c4b7bcc072f43d64d805a706bfa416091da5 Mon Sep 17 00:00:00 2001 From: Daniel Torres Date: Mon, 12 Feb 2024 01:27:54 +0000 Subject: [PATCH 3/3] Update CHANGES.md --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index efbbf57..0c88109 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,8 @@ # Release Notes ## Unreleased +* Fix total stmts, miss and cover values in the coverage report when an ignore + regex is passed. Thanks @danctorres ## 3.3.0 (2024-01-14)