mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-22 08:25:21 +08:00
Merge pull request #2705 from langbot-app/test/required-contract-suites
test(ci): decouple required suites from test names and counts
This commit is contained in:
@@ -1,39 +0,0 @@
|
||||
"""Fail closed when a provisioned dependency-contract lane skips or loses tests."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
|
||||
def verify_report(path: Path, expected_module: str, expected_tests: int, name_prefix: str = '') -> int:
|
||||
cases = list(ET.parse(path).getroot().iter('testcase'))
|
||||
if len(cases) != expected_tests:
|
||||
raise ValueError(f'Expected {expected_tests} tests, found {len(cases)} in {path}')
|
||||
for case in cases:
|
||||
if case.get('classname') != expected_module:
|
||||
raise ValueError(f'Unexpected test module: {case.get("classname")!r}')
|
||||
if not case.get('name', '').startswith(name_prefix):
|
||||
raise ValueError(f'Unexpected test name: {case.get("name")!r}')
|
||||
for outcome in ('skipped', 'failure', 'error'):
|
||||
if case.find(outcome) is not None:
|
||||
raise ValueError(f'Required test {case.get("name")!r} reported {outcome}')
|
||||
return len(cases)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('report', type=Path)
|
||||
parser.add_argument('--module', required=True)
|
||||
parser.add_argument('--expected-tests', type=int, required=True)
|
||||
parser.add_argument('--name-prefix', default='')
|
||||
args = parser.parse_args()
|
||||
if args.expected_tests < 1:
|
||||
parser.error('--expected-tests must be positive')
|
||||
count = verify_report(args.report, args.module, args.expected_tests, args.name_prefix)
|
||||
print(f'{args.module}: {count} required tests passed, 0 skipped')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user