AtlatestRepositorysigil-wm

sigil-wm / tree / scriptstest-pixel-input

1#!/usr/bin/env bash
2set -euo pipefail
3cd "$(dirname "$0")/.."
4make -j2 all build/x11-client
5runtime_dir=$(mktemp -d /tmp/sigil-wm-pixel-input.XXXXXX)
6export XDG_RUNTIME_DIR=$runtime_dir
7export WLR_BACKENDS=headless WLR_RENDERER=pixman WLR_HEADLESS_OUTPUTS=1
8export SIGIL_WM_REPL="$runtime_dir/repl"
9server_pid= client_pid=
10cleanup() {
11 for child in "$client_pid" "$server_pid"; do
12 [[ -z $child ]] || kill "$child" 2>/dev/null || true
13 [[ -z $child ]] || wait "$child" 2>/dev/null || true
14 done
15 rm -rf "$runtime_dir"
17trap cleanup EXIT
18value() {
19 local result
20 result=$(bash scripts/msg "$SIGIL_WM_REPL" "$1") || return
21 printf '%s\n' "$result"
22 [[ $result != *'(error '* ]]
24wait_value() {
25 for ((attempt=0; attempt<100; attempt++)); do
26 if value "$1" | grep -q '(value #t)'; then return; fi
27 sleep 0.05
28 done
29 cat build/receipts/pixel-input.log >&2
30 return 1
32timeout 180 bash scripts/run-sigil -L src -L .deps eval -f test/pixel-input.sgl > build/receipts/pixel-input.log 2>&1 &
33server_pid=$!
34for ((attempt=0; attempt<600; attempt++)); do
35 if grep -q '^X_DISPLAY=:' build/receipts/pixel-input.log; then break; fi
36 sleep 0.1
37done
38grep -q '^X_DISPLAY=:' build/receipts/pixel-input.log || { cat build/receipts/pixel-input.log >&2; exit 1; }
39export DISPLAY
40DISPLAY=$(sed -n 's/^X_DISPLAY=//p' build/receipts/pixel-input.log | head -1)
41timeout 150 build/x11-client normal > build/receipts/pixel-input-client.log 2>&1 &
42client_pid=$!
43wait_value '(and managed #t)'
44value '(begin (show-overlay! #f) (emulate-motion! host 1 80 100) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'
45wait_value '(equal? button-targets (list (list (quote window) managed) (list (quote window) managed)))'
46value '(begin (set! button-targets (quote ())) (show-overlay! #t) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'
47wait_value '(equal? button-targets (quote ((pixel 500) (pixel 500))))'
48value '(begin (set! button-targets (quote ())) (configure-output! host output-id (dict enabled: #t x: 10 y: 0 scale: 1 transform: 0 mode: -1 width: 960 height: 640 refresh: 60000)))'
49wait_value '(= (dict-ref (car (dict-ref (host-snapshot host) outputs:)) x:) 10)'
50value '(begin (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'
51wait_value '(equal? button-targets (list (list (quote window) managed) (list (quote window) managed)))'
52value '(begin (show-overlay! #t) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'
53wait_value '(= (length button-targets) 4)'
54wait_value '(equal? (car (reverse button-targets)) (list (quote window) managed))'
55value '(begin (set! output-box (rect x: 10 y: 0 width: 960 height: 640)) (show-overlay! #t) (set! button-targets (quote ())))'
56value '(begin (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'
57wait_value '(equal? button-targets (quote ((pixel 500) (pixel 500))))'
58value '(begin (remove-pixels! host 500) (destroy-text-image! overlay) (close-window! host managed))'
59wait "$client_pid"
60client_pid=
61wait_value '(null? windows)'
62value '(stop-host! host)'
63wait "$server_pid"
64server_pid=
65if grep -q 'event handler failed' build/receipts/pixel-input.log; then cat build/receipts/pixel-input.log >&2; exit 1; fi
66echo 'PIXEL_INPUT=PASS client pass-through opt-in hit scoped invalidation stale rejection refresh teardown'