112 lines
3.2 KiB
Bash
Executable File
112 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
helper="$repo_dir/config/dot/quickshell/scripts/panama-osd"
|
|
scratch="$(mktemp -d)"
|
|
trap 'rm -rf "$scratch"' EXIT
|
|
|
|
mkdir -p "$scratch/bin"
|
|
log="$scratch/calls"
|
|
|
|
cat >"$scratch/bin/wpctl" <<'SH'
|
|
#!/bin/bash
|
|
printf 'wpctl' >>"$OSD_TEST_LOG"
|
|
printf ' <%s>' "$@" >>"$OSD_TEST_LOG"
|
|
printf '\n' >>"$OSD_TEST_LOG"
|
|
if [[ $1 == "get-volume" ]]; then
|
|
printf '%s\n' "${WPCTL_OUTPUT:-Volume: 0.58}"
|
|
fi
|
|
SH
|
|
|
|
cat >"$scratch/bin/brightnessctl" <<'SH'
|
|
#!/bin/bash
|
|
printf 'brightnessctl' >>"$OSD_TEST_LOG"
|
|
printf ' <%s>' "$@" >>"$OSD_TEST_LOG"
|
|
printf '\n' >>"$OSD_TEST_LOG"
|
|
if [[ " $* " == *" -m "* && " $* " != *" set "* ]]; then
|
|
printf '%s\n' "${BRIGHTNESS_OUTPUT:-intel_backlight,backlight,500,1000,50%}"
|
|
fi
|
|
SH
|
|
|
|
cat >"$scratch/bin/playerctl" <<'SH'
|
|
#!/bin/bash
|
|
printf 'playerctl' >>"$OSD_TEST_LOG"
|
|
printf ' <%s>' "$@" >>"$OSD_TEST_LOG"
|
|
printf '\n' >>"$OSD_TEST_LOG"
|
|
if [[ $1 == "metadata" ]]; then
|
|
printf '%s\n' "${PLAYER_OUTPUT:-Horizon — Tycho}"
|
|
elif [[ $1 == "status" ]]; then
|
|
printf '%s\n' "${PLAYER_STATUS:-Playing}"
|
|
fi
|
|
SH
|
|
|
|
cat >"$scratch/bin/qs" <<'SH'
|
|
#!/bin/bash
|
|
printf 'qs' >>"$OSD_TEST_LOG"
|
|
printf ' <%s>' "$@" >>"$OSD_TEST_LOG"
|
|
printf '\n' >>"$OSD_TEST_LOG"
|
|
[[ ${OSD_TEST_FAIL_QS:-false} != true ]]
|
|
SH
|
|
|
|
chmod +x "$scratch/bin/"*
|
|
|
|
run_helper() {
|
|
PATH="$scratch/bin:$PATH" OSD_TEST_LOG="$log" \
|
|
OSD_TEST_FAIL_QS="${OSD_TEST_FAIL_QS:-false}" \
|
|
PANAMA_OSD_STRICT="${PANAMA_OSD_STRICT:-false}" \
|
|
"$helper" "$@"
|
|
}
|
|
|
|
assert_line() {
|
|
local expected="$1"
|
|
grep -Fqx -- "$expected" "$log" || {
|
|
printf 'osd helper contract: missing call\n%s\nactual:\n' "$expected" >&2
|
|
cat "$log" >&2
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
: >"$log"
|
|
run_helper volume up 6
|
|
assert_line 'wpctl <set-volume> <-l> <1> <@DEFAULT_AUDIO_SINK@> <6%+>'
|
|
assert_line 'wpctl <get-volume> <@DEFAULT_AUDIO_SINK@>'
|
|
assert_line 'qs <ipc> <call> <osd> <progress> <volume> <58> <100> <58%>'
|
|
|
|
: >"$log"
|
|
WPCTL_OUTPUT='Volume: 0.58 [MUTED]' run_helper volume toggle
|
|
assert_line 'wpctl <set-mute> <@DEFAULT_AUDIO_SINK@> <toggle>'
|
|
assert_line 'qs <ipc> <call> <osd> <progress> <volume-muted> <58> <100> <Muted>'
|
|
|
|
: >"$log"
|
|
WPCTL_OUTPUT='Volume: 0.72 [MUTED]' run_helper microphone toggle
|
|
assert_line 'wpctl <set-mute> <@DEFAULT_AUDIO_SOURCE@> <toggle>'
|
|
assert_line 'qs <ipc> <call> <osd> <progress> <microphone-muted> <72> <100> <Muted>'
|
|
|
|
: >"$log"
|
|
run_helper brightness up 5
|
|
assert_line 'brightnessctl <-e4> <-n2> <set> <5%+>'
|
|
assert_line 'brightnessctl <-m> <-c> <backlight>'
|
|
assert_line 'qs <ipc> <call> <osd> <progress> <brightness> <50> <100> <50%>'
|
|
|
|
: >"$log"
|
|
run_helper media next
|
|
assert_line 'playerctl <next>'
|
|
assert_line 'qs <ipc> <call> <osd> <message> <media-next> <Horizon — Tycho>'
|
|
|
|
: >"$log"
|
|
run_helper message notifications-disabled-symbolic 'Do Not Disturb On'
|
|
assert_line 'qs <ipc> <call> <osd> <message> <notifications-disabled-symbolic> <Do Not Disturb On>'
|
|
|
|
: >"$log"
|
|
if OSD_TEST_FAIL_QS=true PANAMA_OSD_STRICT=1 run_helper message dialog-error-symbolic 'Strict failure'; then
|
|
printf 'osd helper contract: strict delivery swallowed an IPC failure\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
: >"$log"
|
|
OSD_TEST_FAIL_QS=true run_helper message dialog-information-symbolic 'Best effort'
|
|
|
|
printf 'osd helper contract: PASS\n'
|