AtlatestRepositorysigil-wm

sigil-wm / tree / scriptstest-window-hints

1#!/usr/bin/env bash
2set -euo pipefail
3cd "$(dirname "$0")/.."
4make -j2 all build/protocol-client
5out=$PWD/build/receipts/window-hints
6mkdir -p "$out"
7runtime_dir=$(mktemp -d /tmp/sigil-wm-window-hints.XXXXXX)
8export XDG_RUNTIME_DIR=$runtime_dir WLR_BACKENDS=headless WLR_RENDERER=pixman WLR_HEADLESS_OUTPUTS=1
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 exec 3>&- || true
16 rm -rf -- "$runtime_dir"
18trap cleanup EXIT
19timeout 60 bash scripts/run-sigil -L src eval -f test/window-hints.sgl > "$out/server.log" 2>&1 &
20server_pid=$!
21await_line() {
22 for ((attempt=0; attempt<800; attempt++)); do
23 grep -q "$1" "$out/server.log" && return
24 kill -0 "$server_pid"
25 sleep 0.05
26 done
27 cat "$out/server.log"
28 return 1
30await_line '^WAYLAND_SOCKET='
31export WAYLAND_DISPLAY
32WAYLAND_DISPLAY=$(sed -n 's/^WAYLAND_SOCKET=//p' "$out/server.log")
33mkfifo "$runtime_dir/control"
34exec 3<> "$runtime_dir/control"
35SIGIL_WM_CLIENT_FIXED=1 SIGIL_WM_CLIENT_CONTROL=1 SIGIL_WM_CLIENT_SIZE_CONTROL=1 timeout 50 build/protocol-client green 36000 3>&- < "$runtime_dir/control" > "$out/client.log" 2>&1 &
36client_pid=$!
37await_line '^WINDOW_HINTS_READY$'
38printf b >&3
39wait "$server_pid"
40server_pid=
41cat "$out/server.log"
42grep -q '^WINDOW_HINTS=PASS ' "$out/server.log"