#!/usr/bin/env bash # Prüflauf: erst der Parse-Vorlauf (Sekunden), dann die Suite. # tests/run.sh voller Lauf # tests/run.sh schnell ohne die langen Simulationen cd "$(dirname "$0")/.." || exit 2 log=${TMPDIR:-/tmp}/traumwandler mkdir -p "$log" if ! timeout 90 godot --headless --path . tests/parse.tscn > "$log/parse.log" 2>&1; then grep -E "SCRIPT ERROR|PARSE FEHLER|Parse-Vorlauf" "$log/parse.log" echo "Parse-Vorlauf fehlgeschlagen" exit 1 fi timeout 600 godot --headless --path . tests/verify.tscn -- "$@" > "$log/suite.log" 2>&1 code=$? if [ -n "${DISPLAY:-}" ] && [ "${1:-}" != "schnell" ]; then # Rauchtest: das echte Spiel mit der echten Aushänge-Datei, ein paar Sekunden timeout 120 godot --path . tests/rauch.tscn > "$log/rauch.log" 2>&1 rauch=$(grep -E "^(SCRIPT )?ERROR:" "$log/rauch.log" | grep -v leaked | sort | uniq -c | sort -rn) if [ -n "$rauch" ] || ! grep -q "RAUCHTEST OK" "$log/rauch.log"; then echo "Rauchtest fehlgeschlagen:"; echo "$rauch" | head -5; grep "RAUCHTEST" "$log/rauch.log"; [ $code -eq 0 ] && code=4 else echo "Rauchtest OK" fi # Flimmer-Probe: stehende Szene, Kamera minimal bewegt, Bilder verglichen timeout 120 godot --path . tests/flimmer.tscn > "$log/flimmer.log" 2>&1 grep "FLIMMERN" "$log/flimmer.log" if ! grep -q "FLIMMERN OK" "$log/flimmer.log"; then [ $code -eq 0 ] && code=5; fi else echo "Rauchtest und Flimmer-Probe übersprungen (kein Display oder Schnelllauf)" fi echo "OK: $(grep -c ' OK ' "$log/suite.log")" grep -E "FEHLT|Fehlende|SCRIPT ERROR|Parse Error|Langsamste|Schnelllauf" "$log/suite.log" fehler=$(grep -E "^(SCRIPT )?ERROR:" "$log/suite.log" | grep -v "leaked" | sort | uniq -c | sort -rn) if [ -n "$fehler" ]; then echo "Engine-Fehler:"; echo "$fehler" | head -10; [ $code -eq 0 ] && code=3; fi [ $code -eq 124 ] && echo "Timeout -- Log: $log/suite.log" exit $code