#!/usr/bin/env python3 import os import logging import argparse import webbrowser _LOGGER = logging.getLogger() def generate_cov_report(open_report: bool, format: str, package: str): logging.basicConfig(level=logging.INFO) os.environ["RUSTFLAGS"] = "-Cinstrument-coverage" os.environ["LLVM_PROFILE_FILE"] = "target/coverage/%p-%m.profraw" _LOGGER.info("Executing tests with coverage") os.system(f"cargo test -p {package}") out_path = "./target/debug/coverage" if format == "lcov": out_path = "./target/debug/lcov.info" grcov_cmd = ( f"grcov . -s . --binary-path ./target/debug/ -t {format} --branch --ignore-not-existing " f"-o {out_path}" ) print(f"Running: {grcov_cmd}") os.system(grcov_cmd) if format == "lcov": lcov_cmd = ( "genhtml -o ./target/debug/coverage/ --show-details --highlight --ignore-errors source " "--legend ./target/debug/lcov.info" ) print(f"Running: {lcov_cmd}") os.system(lcov_cmd) if open_report: coverage_report_path = os.path.abspath("./target/debug/coverage/index.html") webbrowser.open_new_tab(coverage_report_path) _LOGGER.info("Done") def main(): parser = argparse.ArgumentParser( description="Generate coverage report and optionally open it in a browser" ) parser.add_argument( "--open", action="store_true", help="Open the coverage report in a browser" ) parser.add_argument( "-p", "--package", choices=["satrs", "satrs-minisim", "satrs-example"], default="satrs", help="Choose project to generate coverage for", ) parser.add_argument( "--format", choices=["html", "lcov"], default="html", help="Choose report format (html or lcov)", ) args = parser.parse_args() generate_cov_report(args.open, args.format, args.package) if __name__ == "__main__": main()