34 lines
No EOL
1.4 KiB
Python
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) |