scopedvr-map-editor/tools/run_suites.py

34 lines
No EOL
1.4 KiB
Python

#!/usr/bin/env python3
"""Run all Godot -s test suites and summarize (Karte t_eaccbfed)."""
import subprocess, re, sys
GODOT = "/opt/data/home/bin/godot4"
suites = sorted(__import__("glob").glob("tests/test_*.gd"))
results = []
for path in suites:
name = path.split("/")[-1][:-3]
proc = subprocess.run([GODOT, "--headless", "--path", ".", "-s", path],
capture_output=True, text=True, timeout=600)
out = proc.stdout + "\n" + proc.stderr
# Fehler-Erkennung NUR auf echte Godot-Fehlerzeilen: ^SCRIPT ERROR: am
# Zeilenanfang (Zeile 73 "ok: Parse Error wird erkannt ..." muss NICHT
# treffen — die Suite testet die False-Positive-Erkennung und druckt den
# Phrase-Text). "\n" dazwischen: stdout+stderr dürfen nicht verkleben,
# sonst verliert der ^-Anker die erste stderr-Zeile.
if re.search(r"^SCRIPT ERROR:|^Parse Error:", out, re.MULTILINE):
st = "SCRIPT_ERROR"
elif re.search(r"FAILURES: [1-9]|FAILED|TEST_FAIL", out):
st = "FAIL"
else:
st = "OK"
summary = ""
for line in out.splitlines():
if re.search(r"ALL OK|CHECKS:|FAILED:", line):
summary = line.strip()
results.append((name, st, summary))
print(f"{name}: {st} | {summary}", flush=True)
ok = sum(1 for _, s, _ in results if s == "OK")
print(f"\nSUITEN_TOTAL={len(results)} GRUEN={ok} ROT={len(results)-ok}")
sys.exit(0 if ok == len(results) else 1)