#!/usr/bin/env python3 """Require real, nonempty JUnit results; a build tool's zero exit is insufficient.""" import argparse from pathlib import Path import xml.etree.ElementTree as ET parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("directory", type=Path) parser.add_argument("--minimum", type=int, required=True) arguments = parser.parse_args() cases = [] for path in arguments.directory.rglob("TEST*.xml"): cases.extend(ET.parse(path).getroot().iter("testcase")) failed = sum(case.find("failure") is not None or case.find("error") is not None for case in cases) skipped = sum(case.find("skipped") is not None for case in cases) print(f"JUnit evidence: {len(cases)} tests, {failed} failures/errors, {skipped} skipped") if len(cases) < arguments.minimum or failed or skipped: raise SystemExit("Incomplete or failing test evidence; do not report this run as passing.")