Files
Panama/tests/quickshell/focus-session-contract.sh
T

46 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
fail() {
printf 'focus-session contract: %s\n' "$1" >&2
exit 1
}
read_prop() {
qs ipc call focus status | jq -r ".${1}"
}
qs ipc show | rg -q '^target focus$' || fail 'focus IPC target is missing'
# Keep this contract reversible even if an assertion fails halfway through.
cleanup() {
qs ipc call focus end >/dev/null 2>&1 || true
}
trap cleanup EXIT
qs ipc call focus start >/dev/null
[[ "$(read_prop active)" == "true" ]] || fail 'start did not activate a session'
[[ "$(read_prop paused)" == "false" ]] || fail 'new session started paused'
[[ "$(read_prop workspaceId)" =~ ^[1-9][0-9]*$ ]] || fail 'session did not bind a positive workspace'
qs ipc call focus dismiss >/dev/null
[[ "$(read_prop capsuleVisible)" == "false" ]] || fail 'dismiss did not hide the capsule'
qs ipc call focus pause >/dev/null
[[ "$(read_prop paused)" == "true" ]] || fail 'pause did not freeze the session'
qs ipc call focus reveal >/dev/null
[[ "$(read_prop capsuleVisible)" == "true" ]] || fail 'reveal did not show the capsule'
qs ipc call focus overview >/dev/null
sleep 0.2
hyprctl layers | rg -q 'namespace: qs-overview' || fail 'focus overview did not map Mission Control'
qs ipc call overview close >/dev/null
qs ipc call focus end >/dev/null
[[ "$(read_prop active)" == "false" ]] || fail 'end did not clear the session'
trap - EXIT
printf 'focus-session contract: PASS\n'