From cc01e8a74e6326197ae302a81599d32db7399eac Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 17 Aug 2024 13:36:42 +0200 Subject: [PATCH] Tools: support reference data in coverage report This adds initial support for showing the difference between old and new coverage data. The difference is only shown in index.html currently. This is mainly useful when adding new tests right now, to see the impact. To use this, rename the `coverage/analysis` folder in the build directory to `reference`. It will automatically be used by the report script if that reference folder exists. --- tests/coverage/coverage.py | 3 +- .../coverage/coverage_report/build_report.py | 15 ++- .../coverage_report/index_template.html | 107 +++++++++++++----- 3 files changed, 93 insertions(+), 32 deletions(-) diff --git a/tests/coverage/coverage.py b/tests/coverage/coverage.py index f1491b4a9a8..9577f54e927 100755 --- a/tests/coverage/coverage.py +++ b/tests/coverage/coverage.py @@ -62,10 +62,11 @@ def run_report(argv): coverage_dir = build_dir / "coverage" analysis_dir = coverage_dir / "analysis" + reference_dir = coverage_dir / "reference" report_dir = coverage_dir / "report" parse(build_dir, analysis_dir) - report_as_html(analysis_dir, report_dir) + report_as_html(analysis_dir, report_dir, reference_dir=reference_dir) if not args.no_browser: webbrowser.open("file://" + str(report_dir / "index.html")) diff --git a/tests/coverage/coverage_report/build_report.py b/tests/coverage/coverage_report/build_report.py index ccf67227e59..56b12efd587 100644 --- a/tests/coverage/coverage_report/build_report.py +++ b/tests/coverage/coverage_report/build_report.py @@ -19,9 +19,11 @@ index_template_path = Path(__file__).parent / "index_template.html" single_file_template_path = Path(__file__).parent / "single_file_template.html" -def report_as_html(analysis_dir, report_dir): +def report_as_html(analysis_dir, report_dir, *, reference_dir=None): analysis_dir = Path(analysis_dir).absolute() report_dir = Path(report_dir).absolute() + if reference_dir is not None: + reference_dir = Path(reference_dir).absolute() if not analysis_dir.exists(): raise RuntimeError("Missing analysis at: {}".format(analysis_dir)) @@ -31,12 +33,12 @@ def report_as_html(analysis_dir, report_dir): except: pass - build_summary(analysis_dir, report_dir) + build_summary(analysis_dir, report_dir, reference_dir) build_file_pages(analysis_dir, report_dir) print("Report written to {}.".format(report_dir / "index.html")) -def build_summary(analysis_dir, report_dir): +def build_summary(analysis_dir, report_dir, reference_dir): print("Write index...") with open(index_template_path) as f: template = f.read() @@ -47,6 +49,13 @@ def build_summary(analysis_dir, report_dir): zip_file_to_compressed_base64(analysis_dir / "summary.json.zip"), ) + reference_data_str = "" + if reference_dir is not None: + reference_summary_path = reference_dir / "summary.json.zip" + if reference_summary_path.exists(): + reference_data_str = zip_file_to_compressed_base64(reference_summary_path) + result = result.replace("REFERENCE_DATA", reference_data_str) + report_summary_path = report_dir / "index.html" report_summary_path.parent.mkdir(parents=True, exist_ok=True) with open(report_summary_path, "w") as f: diff --git a/tests/coverage/coverage_report/index_template.html b/tests/coverage/coverage_report/index_template.html index eb8bd39ef29..f2517444ea5 100644 --- a/tests/coverage/coverage_report/index_template.html +++ b/tests/coverage/coverage_report/index_template.html @@ -105,6 +105,13 @@ width: 3em; } + .new-lines-row { + display: inline-block; + text-align: right; + width: 7em; + font-size: smaller; + } + .lines-total-row { display: inline-block; text-align: right; @@ -154,11 +161,21 @@