27 lines
1.4 KiB
Bash
Executable file
27 lines
1.4 KiB
Bash
Executable file
#!/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"<pre id=\"" + part + r"\">(.*?)</pre>", 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"
|