diff options
Diffstat (limited to 'scripts/theme-studio/run-tests.sh')
| -rwxr-xr-x | scripts/theme-studio/run-tests.sh | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/scripts/theme-studio/run-tests.sh b/scripts/theme-studio/run-tests.sh index 0db7faa0b..f2daa74b5 100755 --- a/scripts/theme-studio/run-tests.sh +++ b/scripts/theme-studio/run-tests.sh @@ -41,11 +41,30 @@ if node --test ./*.mjs >/tmp/ts-node.log 2>&1; then pass_msg "Node unit tests ($(grep -E '^. tests' /tmp/ts-node.log | grep -oE '[0-9]+' | head -1) tests)" else fail_msg "Node unit tests"; grep -E 'not ok|AssertionError|Error' /tmp/ts-node.log | sed 's/^/ /' | head -20; fi +# 3b. ERT tests for the theme-studio Emacs code: build-theme.el (the theme.json +# -> deftheme emitter, tests under the repo's tests/ dir) and face-docs-dump.el +# (the hover-docstring asset generator, test alongside it here). Run them in one +# headless batch. Skip cleanly if no emacs is on PATH (JS/Python gates still run). +BT_TESTS="$HERE/../../tests/test-build-theme.el" +FD_TESTS="$HERE/test-face-docs-dump.el" +NL_TESTS="$HERE/test-nerd-icons-legend-dump.el" +if command -v emacs >/dev/null 2>&1 && [ -f "$BT_TESTS" ]; then + if emacs --batch --no-site-file --no-site-lisp \ + -L "$HERE/../.." -L "$HERE/../../modules" -L "$HERE/../../tests" -L "$HERE/../../themes" \ + -l "$BT_TESTS" -l "$FD_TESTS" -l "$NL_TESTS" -f ert-run-tests-batch-and-exit >/tmp/ts-bt.log 2>&1; then + pass_msg "theme-studio ERT tests ($(grep -oE 'Ran [0-9]+' /tmp/ts-bt.log | awk '{print $2}') tests)" + else fail_msg "theme-studio ERT tests"; grep -E 'FAILED|Error' /tmp/ts-bt.log | sed 's/^/ /' | head -20; fi +else + skip_msg "theme-studio ERT tests (no emacs on PATH)" +fi + # 4. Syntax-check the inlined page script. python3 - <<'PY' && node --check /tmp/ts-script.js >/dev/null 2>&1 && pass_msg "spliced page <script> parses" || fail_msg "spliced page <script> syntax" import re -h = open('theme-studio.html').read() -open('/tmp/ts-script.js', 'w').write(re.search(r'<script>(.*)</script>', h, re.S).group(1)) +with open('theme-studio.html') as src: + h = src.read() +with open('/tmp/ts-script.js', 'w') as out: + out.write(re.search(r'<script>(.*)</script>', h, re.S).group(1)) PY # 5. Browser hash gates. @@ -53,7 +72,9 @@ CHROME="" for c in google-chrome-stable google-chrome chromium chromium-browser; do if command -v "$c" >/dev/null 2>&1; then CHROME="$c"; break; fi done -HASHES="selftest cursortest readouttest deltatest oklchtest planetest locktest sorttest mocktest contrasttest safetest healtest familytest counttest baseedittest roundtriptest beveltest" +# Derive the gate list from the gate blocks themselves so it can't drift: a gate +# added to browser-gates.js runs automatically, and one removed stops being run. +HASHES="$(grep -oE "location\.hash==='#[a-z]+test'" browser-gates.js | sed -E "s/.*#([a-z]+test)'/\1/" | sort -u | tr '\n' ' ')" if [ "$NO_BROWSER" = 1 ]; then skip_msg "browser hash gates (--no-browser)" elif [ -z "$CHROME" ]; then @@ -68,7 +89,7 @@ else upper="$(echo "$t" | tr '[:lower:]' '[:upper:]')" res="$(timeout --kill-after=5 30 "$CHROME" --headless --no-sandbox --disable-gpu --user-data-dir="$PROF" \ --virtual-time-budget=8000 --dump-dom "file://$HERE/theme-studio.html#$t" 2>/dev/null \ - | grep -o "${upper}[^<]*" | head -1)" + | grep -oE "${upper} (PASS|FAIL)[^<]*" | head -1)" case "$res" in *PASS*) pass_msg "#$t" ;; *FAIL*) fail_msg "#$t -> $res" ;; |
