AtlatestRepositorysigil-wm
1
#!/usr/bin/env bash2
set -euo pipefail3
cd "$(dirname "$0")/.."4
make -j2 all build/x11-client5
runtime_dir=$(mktemp -d /tmp/sigil-wm-pixel-input.XXXXXX)6
export XDG_RUNTIME_DIR=$runtime_dir7
export WLR_BACKENDS=headless WLR_RENDERER=pixman WLR_HEADLESS_OUTPUTS=18
export SIGIL_WM_REPL="$runtime_dir/repl"9
server_pid= client_pid=10
cleanup() {11
for child in "$client_pid" "$server_pid"; do12
[[ -z $child ]] || kill "$child" 2>/dev/null || true13
[[ -z $child ]] || wait "$child" 2>/dev/null || true14
done15
rm -rf "$runtime_dir"16
}17
trap cleanup EXIT18
value() {19
local result20
result=$(bash scripts/msg "$SIGIL_WM_REPL" "$1") || return21
printf '%s\n' "$result"22
[[ $result != *'(error '* ]]23
}24
wait_value() {25
for ((attempt=0; attempt<100; attempt++)); do26
if value "$1" | grep -q '(value #t)'; then return; fi27
sleep 0.0528
done29
cat build/receipts/pixel-input.log >&230
return 131
}32
timeout 180 bash scripts/run-sigil -L src -L .deps eval -f test/pixel-input.sgl > build/receipts/pixel-input.log 2>&1 &33
server_pid=$!34
for ((attempt=0; attempt<600; attempt++)); do35
if grep -q '^X_DISPLAY=:' build/receipts/pixel-input.log; then break; fi36
sleep 0.137
done38
grep -q '^X_DISPLAY=:' build/receipts/pixel-input.log || { cat build/receipts/pixel-input.log >&2; exit 1; }39
export DISPLAY40
DISPLAY=$(sed -n 's/^X_DISPLAY=//p' build/receipts/pixel-input.log | head -1)41
timeout 150 build/x11-client normal > build/receipts/pixel-input-client.log 2>&1 &42
client_pid=$!43
wait_value '(and managed #t)'44
value '(begin (show-overlay! #f) (emulate-motion! host 1 80 100) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'45
wait_value '(equal? button-targets (list (list (quote window) managed) (list (quote window) managed)))'46
value '(begin (set! button-targets (quote ())) (show-overlay! #t) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'47
wait_value '(equal? button-targets (quote ((pixel 500) (pixel 500))))'48
value '(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)))'49
wait_value '(= (dict-ref (car (dict-ref (host-snapshot host) outputs:)) x:) 10)'50
value '(begin (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'51
wait_value '(equal? button-targets (list (list (quote window) managed) (list (quote window) managed)))'52
value '(begin (show-overlay! #t) (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'53
wait_value '(= (length button-targets) 4)'54
wait_value '(equal? (car (reverse button-targets)) (list (quote window) managed))'55
value '(begin (set! output-box (rect x: 10 y: 0 width: 960 height: 640)) (show-overlay! #t) (set! button-targets (quote ())))'56
value '(begin (emulate-button! host 1 272 #t) (emulate-button! host 1 272 #f))'57
wait_value '(equal? button-targets (quote ((pixel 500) (pixel 500))))'58
value '(begin (remove-pixels! host 500) (destroy-text-image! overlay) (close-window! host managed))'59
wait "$client_pid"60
client_pid=61
wait_value '(null? windows)'62
value '(stop-host! host)'63
wait "$server_pid"64
server_pid=65
if grep -q 'event handler failed' build/receipts/pixel-input.log; then cat build/receipts/pixel-input.log >&2; exit 1; fi66
echo 'PIXEL_INPUT=PASS client pass-through opt-in hit scoped invalidation stale rejection refresh teardown'