46 lines
1.4 KiB
Bash
Executable File
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'
|