#!/usr/bin/env bash set -euo pipefail repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" harness="$repo_dir/config/dot/quickshell/home-brightness-slider-harness.qml" state_home="$(mktemp -d /tmp/panama-home-brightness-slider.XXXXXX)" shell_log="$state_home/quickshell.log" fail() { printf 'Home brightness slider contract: %s\n' "$1" >&2 exit 1 } qs_for_harness() { QS_DISABLE_CRASH_HANDLER=1 XDG_STATE_HOME="$state_home" \ qs -p "$harness" "$@" } cleanup() { qs_for_harness kill >/dev/null 2>&1 || true rm -rf "$state_home" } trap cleanup EXIT start_harness() { qs_for_harness --daemonize >"$shell_log" 2>&1 for _ in $(seq 1 50); do if qs_for_harness ipc show 2>/dev/null \ | rg -q '^target home-brightness-slider-test$'; then return fi sleep 0.1 done sed -n '1,160p' "$shell_log" >&2 fail 'isolated slider harness did not start' } assert_status() { local filter="$1" local message="$2" local status="" status="$(qs_for_harness ipc call home-brightness-slider-test status)" jq -e "$filter" <<<"$status" >/dev/null || { printf 'Slider status: %s\n' "$status" >&2 fail "$message" } } start_harness qs_for_harness ipc call home-brightness-slider-test reset 30 >/dev/null assert_status \ '.accessibleRoleIsSlider == true and .accessibleName == "Desk lamp brightness" and .accessibleDescription == "30 percent, range 0 to 100" and .accessibleFocusable == true' \ 'slider accessibility metadata is incomplete or incorrect' qs_for_harness ipc call home-brightness-slider-test press 140 >/dev/null assert_status \ '.confirmedValue == 30 and .previewValue == 70 and .interactionActive == true and .commitCount == 0 and .accessibleDescription == "70 percent, range 0 to 100"' \ 'pointer press did not remain a local preview' qs_for_harness ipc call home-brightness-slider-test release >/dev/null assert_status \ '.previewValue == 70 and .interactionActive == false and .commitCount == 1 and .lastCommit == 70' \ 'one pointer release did not emit exactly one commit' qs_for_harness ipc call home-brightness-slider-test release >/dev/null assert_status '.commitCount == 1' 'release without an interaction emitted another commit' qs_for_harness ipc call home-brightness-slider-test reset 30 >/dev/null qs_for_harness ipc call home-brightness-slider-test wheel 120 >/dev/null assert_status \ '.previewValue == 35 and .interactionActive == false and .commitCount == 1 and .lastCommit == 35' \ 'one wheel event did not emit exactly one five-point commit' qs_for_harness ipc call home-brightness-slider-test reset 30 >/dev/null qs_for_harness ipc call home-brightness-slider-test press 160 >/dev/null assert_status \ '.previewValue == 80 and .interactionActive == true and .commitCount == 0' \ 'cancellation setup did not enter local preview state' qs_for_harness ipc call home-brightness-slider-test external 45 >/dev/null assert_status \ '.confirmedValue == 45 and .previewValue == 80 and .interactionActive == true and .commitCount == 0' \ 'external confirmed or pending state replaced an active local preview' qs_for_harness ipc call home-brightness-slider-test cancel >/dev/null assert_status \ '.confirmedValue == 45 and .previewValue == 45 and .interactionActive == false and .commitCount == 0 and .lastCommit == -1' \ 'canceled interaction committed or failed to restore the external value' trap - EXIT cleanup printf 'Home brightness slider contract: PASS\n'