| #!/usr/bin/env python3 |
| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| """Measure unit test coverage of silicon creator code. |
| |
| Given a directory `out_root_dir` the coverage artifacts will be saved in |
| `out_root_dir`/<HEAD_TIMESTAMP>-<HEAD_HASH>/unittest/`. |
| |
| Typical usage: |
| util/coverage/coverage_off_target.py --print-text-report |
| """ |
| |
| from pathlib import ( |
| Path, |
| PurePath, |
| ) |
| from typing import Dict |
| |
| import typer |
| |
| from common import ( |
| CoverageParams, |
| CoverageType, |
| LogLevel, |
| measure_coverage, |
| ) |
| from unittest_coverage import PARAMS as UNITTEST_PARAMS |
| from functest_coverage import PARAMS as FUNCTEST_PARAMS |
| |
| app = typer.Typer(pretty_exceptions_enable=False, add_completion=False) |
| |
| PARAMS: Dict[str, CoverageParams] = { |
| CoverageType.UNITTEST: UNITTEST_PARAMS, |
| CoverageType.FUNCTEST: FUNCTEST_PARAMS, |
| } |
| |
| |
| @app.command() |
| def measure( |
| coverage_type: CoverageType, |
| out_root_dir: Path = Path("coverage"), |
| log_level: LogLevel = LogLevel.NONE, |
| print_text_report: bool = False, |
| ) -> None: |
| """Measures coverage of silicon creator code.""" |
| measure_coverage( |
| log_level=log_level, |
| out_root_dir=out_root_dir, |
| out_sub_dir=PurePath(coverage_type.value), |
| print_text_report=print_text_report, |
| **PARAMS[coverage_type]._asdict(), |
| ) |
| |
| |
| if __name__ == "__main__": |
| app() |