From 82798b5ab598c014e35bcdbfc180a887a621a7d9 Mon Sep 17 00:00:00 2001 From: Patrick Roy Date: Wed, 23 Oct 2024 07:31:44 +0100 Subject: [PATCH] fix: report line coverage instead of function coverage It seems that the raw output of llvm-cov changed at some point, and we ended upcomparing functoin coverage instead of line coverage. Fix this by instead using the new json output, which will hopefully prevent such goofs in the future. Fixes #170 Signed-off-by: Patrick Roy --- integration_tests/test_coverage.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/integration_tests/test_coverage.py b/integration_tests/test_coverage.py index 9ca62c7..767a304 100644 --- a/integration_tests/test_coverage.py +++ b/integration_tests/test_coverage.py @@ -77,7 +77,7 @@ def _get_current_coverage(coverage_config, no_cleanup, test_scope): shutil.rmtree(cov_build_dir, ignore_errors=True) llvm_cov_command = ( - f"CARGO_TARGET_DIR={cov_build_dir} cargo llvm-cov test --summary-only" + f"CARGO_TARGET_DIR={cov_build_dir} cargo llvm-cov test --json --summary-only" ) additional_exclude_path = coverage_config["exclude_path"] @@ -97,13 +97,8 @@ def _get_current_coverage(coverage_config, no_cleanup, test_scope): llvm_cov_command, shell=True, check=True, input=b"", stdout=subprocess.PIPE ) - summary = result.stdout.split(b"\n")[-2] - # Output of llvm-cov is like - # TOTAL 743 153 79.41% 185 50 72.97% 1531 125 91.84% 0 0 - - # where the first three numbers are related to region coverage, and next three to line coverage (what we want) - # and the last three to branch coverage (which is not yet supported). Below grabs the line coverage, and strips - # off the '%'. - coverage = float(summary.split()[6][:-1]) + summary = json.loads(result.stdout); + coverage = summary['data'][0]['totals']['lines']['percent'] shutil.rmtree(cov_build_dir, ignore_errors=True)