Source code for cocotb_tools.check_results
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause
"""Checks if a JUnit results file exists and whether there was failing tests."""
import argparse
import sys
from pathlib import Path
from typing import Tuple
from xml.etree import ElementTree
[docs]
def get_results(results_xml_file: Path) -> Tuple[int, int]:
"""Return number of tests and fails in *results_xml_file*.
Returns:
Tuple of number of tests and number of fails.
Raises:
RuntimeError: If *results_xml_file* is non-existent.
"""
__tracebackhide__ = True # Hide the traceback when using PyTest.
if not results_xml_file.is_file():
raise RuntimeError(
f"ERROR: Simulation terminated abnormally. Results file {results_xml_file} not found."
)
num_tests = 0
num_failed = 0
tree = ElementTree.parse(results_xml_file)
for ts in tree.iter("testsuite"):
for tc in ts.iter("testcase"):
num_tests += 1
for _ in tc.iter("failure"):
num_failed += 1
return (num_tests, num_failed)
def _get_parser() -> argparse.ArgumentParser:
"""Return the cmdline parser"""
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"results_file", help="Path to XML file holding JUnit test results.", type=Path
)
return parser
def main() -> int:
parser = _get_parser()
args = parser.parse_args()
try:
(_, num_failed) = get_results(args.results_file)
except RuntimeError:
return 1
return num_failed
if __name__ == "__main__":
rc = main()
sys.exit(rc)