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 <roypat@amazon.co.uk>
This commit is contained in:
Patrick Roy
2024-10-23 07:31:44 +01:00
parent 212241789d
commit 1150c47872

View File

@@ -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)