66 lines
1.9 KiB
Python
Executable File
66 lines
1.9 KiB
Python
Executable File
#!/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()
|