Files
Panama/tests/quickshell/panama-action-contract.sh
T

153 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
dispatcher="$repo_dir/config/dot/quickshell/scripts/panama-action"
work="$(mktemp -d /tmp/panama-action.XXXXXX)"
fake_bin="$work/bin"
command_log="$work/commands.log"
fail() {
printf 'Panama action contract: %s\n' "$1" >&2
exit 1
}
cleanup() {
rm -rf "$work"
}
trap cleanup EXIT
[[ -x "$dispatcher" ]] || fail 'dispatcher is missing or not executable'
mkdir -p "$fake_bin" "$work/home/.config/quickshell/scripts"
make_recorder() {
local command_name="$1"
cp /dev/stdin "$fake_bin/$command_name"
chmod +x "$fake_bin/$command_name"
}
make_recorder qs <<'EOF'
#!/usr/bin/env bash
printf 'qs' >>"$PANAMA_ACTION_TEST_LOG"
printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG"
printf '\n' >>"$PANAMA_ACTION_TEST_LOG"
case "$*" in
'ipc call notifications dnd'|'ipc call caffeine toggle'|'ipc call night-light toggle')
printf '%s\n' "${PANAMA_ACTION_TEST_STATE:-true}"
;;
esac
[[ ${PANAMA_ACTION_TEST_FAIL_QS:-false} != true ]]
EOF
make_recorder quickshell <<'EOF'
#!/usr/bin/env bash
printf 'quickshell' >>"$PANAMA_ACTION_TEST_LOG"
printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG"
printf '\n' >>"$PANAMA_ACTION_TEST_LOG"
EOF
make_recorder panama-osd <<'EOF'
#!/usr/bin/env bash
printf 'panama-osd' >>"$PANAMA_ACTION_TEST_LOG"
printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG"
printf '\n' >>"$PANAMA_ACTION_TEST_LOG"
EOF
make_recorder panama-prism-gallery <<'EOF'
#!/usr/bin/env bash
printf 'panama-prism-gallery' >>"$PANAMA_ACTION_TEST_LOG"
if (( $# > 0 )); then
printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG"
fi
printf '\n' >>"$PANAMA_ACTION_TEST_LOG"
EOF
make_recorder notify-send <<'EOF'
#!/usr/bin/env bash
printf 'notify-send' >>"$PANAMA_ACTION_TEST_LOG"
printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG"
printf '\n' >>"$PANAMA_ACTION_TEST_LOG"
EOF
run_action() {
: >"$command_log"
HOME="$work/home" PATH="$fake_bin:$PATH" \
PANAMA_ACTION_TEST_LOG="$command_log" \
"$dispatcher" "$1"
}
assert_commands() {
local expected="$1"
local actual
actual="$(cat "$command_log")"
[[ "$actual" == "$expected" ]] \
|| fail "wrong command sequence; expected [$expected], got [$actual]"
}
run_action control-center
assert_commands 'qs <ipc> <call> <quicksettings> <open>'
run_action notifications
assert_commands 'qs <ipc> <call> <notifications> <open>'
run_action calendar
assert_commands 'qs <ipc> <call> <calendar-agenda> <open>'
run_action clipboard
assert_commands 'qs <ipc> <call> <clipboard> <open>'
run_action overview
assert_commands 'qs <ipc> <call> <overview> <open>'
run_action settings
assert_commands 'qs <ipc> <call> <settings> <open>'
run_action dnd
assert_commands $'qs <ipc> <call> <notifications> <dnd>\npanama-osd <message> <notifications-disabled-symbolic> <Do Not Disturb On>'
PANAMA_ACTION_TEST_STATE=false run_action caffeine
assert_commands $'qs <ipc> <call> <caffeine> <toggle>\npanama-osd <message> <weather-clear-night-symbolic> <Caffeine Off>'
run_action night-light
assert_commands $'qs <ipc> <call> <night-light> <toggle>\npanama-osd <message> <night-light-symbolic> <Night Light On>'
run_action focus-start
assert_commands $'qs <ipc> <call> <focus> <start>\npanama-osd <message> <preferences-system-time-symbolic> <Focus Session Started>'
run_action focus-end
assert_commands $'qs <ipc> <call> <focus> <end>\npanama-osd <message> <media-playback-stop-symbolic> <Focus Session Ended>'
run_action capture
assert_commands 'qs <ipc> <call> <capture> <open>'
run_action intelligence
assert_commands 'qs <ipc> <call> <screen-intelligence> <open>'
run_action screenshot
assert_commands 'qs <ipc> <call> <capture> <screenNow>'
run_action microphone
assert_commands 'panama-osd <microphone> <toggle>'
run_action gallery
assert_commands 'panama-prism-gallery'
run_action restart-shell
assert_commands $'qs <kill>\nquickshell <--daemonize>'
if HOME="$work/home" PATH="$fake_bin:$PATH" PANAMA_ACTION_TEST_LOG="$command_log" \
"$dispatcher" definitely-not-an-action >/dev/null 2>&1; then
fail 'unknown action was accepted'
fi
: >"$command_log"
if PANAMA_ACTION_TEST_FAIL_QS=true HOME="$work/home" PATH="$fake_bin:$PATH" \
PANAMA_ACTION_TEST_LOG="$command_log" "$dispatcher" control-center >/dev/null 2>&1; then
fail 'failed shell action returned success'
fi
assert_commands $'qs <ipc> <call> <quicksettings> <open>\nnotify-send <-a> <Panama> <-i> <dialog-error-symbolic> <Panama action failed> <The “control center” action could not be completed.>'
printf 'Panama action contract: PASS\n'