#!/usr/bin/env bash # Prüft das CSS-Framework unter der strengen CSP von Hugin (→ KONZEPT.md 16.4): # zählt CSP-Verstöße der Demo und klickt alle data-action-Aktionen durch. # Braucht Google Chrome (headless). set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" CH="${CHROME:-/Applications/Google Chrome.app/Contents/MacOS/Google Chrome}" PORT="${PORT:-8813}" PROFILE="$(mktemp -d)" python3 -I "$ROOT/scripts/csp/server.py" "$ROOT/static/css-framework/${FOLDER:-.}" "$PORT" 1 "$ROOT/scripts/csp/actions.js" & SERVER=$! # Rückgabewert des Tests bewahren; wait auf den beendeten Server würde ihn überschreiben trap 'rc=$?; kill $SERVER 2>/dev/null; wait $SERVER 2>/dev/null || true; rm -rf "$PROFILE"; exit $rc' EXIT sleep 1 # Chrome endet nach dem Zeitbudget mit 143; bewertet wird nur die ausgegebene Seite "$CH" --headless=new --disable-gpu --user-data-dir="$PROFILE" --virtual-time-budget=6000 \ --dump-dom "http://127.0.0.1:$PORT/index.html" >"$PROFILE/page.html" 2>/dev/null || true python3 -I -c ' import html, re, sys t = sys.stdin.read() failed = 0 for part in ("actions", "csp-result"): m = re.search(r"
(.*?)", t, re.S) text = html.unescape(m.group(1)) if m else part + ": kein Ergebnis" print(text) failed += (not m) or ("FEHL" in text) or (part == "csp-result" and not text.startswith("VIOLATIONS 0")) sys.exit(1 if failed else 0)' <"$PROFILE/page.html"