#!/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}" ;; 'ipc call focus start'|'ipc call focus end') printf '%s\n' "${PANAMA_ACTION_TEST_FOCUS_STATE:-true}" ;; esac if [[ ${PANAMA_ACTION_TEST_FAIL_KILL:-false} == true && ${1:-} == kill ]]; then exit 1 fi [[ ${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" [[ ${PANAMA_ACTION_TEST_FAIL_OSD:-false} != true ]] 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 make_recorder systemd-inhibit <<'EOF' #!/usr/bin/env bash if [[ -n ${PANAMA_ACTION_TEST_INHIBITOR_FILE:-} && -s $PANAMA_ACTION_TEST_INHIBITOR_FILE ]]; then while IFS= read -r pid; do printf 'Panama 1000 gib %s systemd-inhibit sleep:idle Caffeine block\n' "$pid" done <"$PANAMA_ACTION_TEST_INHIBITOR_FILE" exit 0 fi if [[ ${PANAMA_ACTION_TEST_CONFIRMED_STATE:-${PANAMA_ACTION_TEST_STATE:-true}} == true ]]; then printf 'Panama 1000 gib 42 systemd-inhibit sleep:idle Caffeine block\n' fi EOF make_recorder kill <<'EOF' #!/usr/bin/env bash printf 'kill' >>"$PANAMA_ACTION_TEST_LOG" printf ' <%s>' "$@" >>"$PANAMA_ACTION_TEST_LOG" printf '\n' >>"$PANAMA_ACTION_TEST_LOG" if [[ -n ${PANAMA_ACTION_TEST_INHIBITOR_FILE:-} ]]; then : >"$PANAMA_ACTION_TEST_INHIBITOR_FILE" fi EOF make_recorder pgrep <<'EOF' #!/usr/bin/env bash [[ ${PANAMA_ACTION_TEST_CONFIRMED_STATE:-${PANAMA_ACTION_TEST_STATE:-true}} == true ]] EOF make_recorder id <<'EOF' #!/usr/bin/env bash printf '1000\n' EOF run_action() { : >"$command_log" HOME="$work/home" PATH="$fake_bin:$PATH" \ PANAMA_ACTION_HELPER_DIR="$fake_bin" \ PANAMA_ACTION_KILL_COMMAND="$fake_bin/kill" \ PANAMA_ACTION_CONFIRM_ATTEMPTS=1 \ PANAMA_ACTION_CONFIRM_DELAY=0 \ 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 ' run_action notifications assert_commands 'qs ' run_action calendar assert_commands 'qs ' run_action clipboard assert_commands 'qs ' run_action overview assert_commands 'qs ' run_action settings assert_commands 'qs ' run_action dnd assert_commands $'qs \npanama-osd ' PANAMA_ACTION_TEST_STATE=false run_action caffeine assert_commands $'qs \npanama-osd ' printf '4242\n' >"$work/inhibitors" PANAMA_ACTION_TEST_STATE=false PANAMA_ACTION_TEST_INHIBITOR_FILE="$work/inhibitors" run_action caffeine assert_commands $'qs \nkill <4242>\npanama-osd ' run_action night-light assert_commands $'qs \npanama-osd ' run_action focus-start assert_commands $'qs \npanama-osd ' run_action focus-end assert_commands $'qs \npanama-osd ' PANAMA_ACTION_TEST_FOCUS_STATE=false run_action focus-end assert_commands $'qs \npanama-osd ' run_action capture assert_commands 'qs ' run_action intelligence assert_commands 'qs ' run_action screenshot assert_commands 'qs ' run_action microphone assert_commands 'panama-osd ' run_action gallery assert_commands 'panama-prism-gallery' run_action restart-shell assert_commands $'qs \nquickshell <--daemonize>\nqs \npanama-osd ' PANAMA_ACTION_TEST_FAIL_KILL=true run_action restart-shell assert_commands $'qs \nquickshell <--daemonize>\nqs \npanama-osd ' if HOME="$work/home" PATH="$fake_bin:$PATH" PANAMA_ACTION_HELPER_DIR="$fake_bin" \ PANAMA_ACTION_CONFIRM_ATTEMPTS=1 PANAMA_ACTION_CONFIRM_DELAY=0 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_HELPER_DIR="$fake_bin" PANAMA_ACTION_CONFIRM_ATTEMPTS=1 \ PANAMA_ACTION_CONFIRM_DELAY=0 PANAMA_ACTION_TEST_LOG="$command_log" \ "$dispatcher" control-center >/dev/null 2>&1; then fail 'failed shell action returned success' fi assert_commands $'qs \nnotify-send <-a> <-i> ' : >"$command_log" if PANAMA_ACTION_TEST_FAIL_OSD=true HOME="$work/home" PATH="$fake_bin:$PATH" \ PANAMA_ACTION_HELPER_DIR="$fake_bin" PANAMA_ACTION_CONFIRM_ATTEMPTS=1 \ PANAMA_ACTION_CONFIRM_DELAY=0 PANAMA_ACTION_TEST_LOG="$command_log" \ "$dispatcher" microphone >/dev/null 2>&1; then fail 'failed Prism OSD delivery returned success' fi assert_commands $'panama-osd \nnotify-send <-a> <-i> ' : >"$command_log" if PANAMA_ACTION_TEST_CONFIRMED_STATE=false HOME="$work/home" PATH="$fake_bin:$PATH" \ PANAMA_ACTION_HELPER_DIR="$fake_bin" PANAMA_ACTION_CONFIRM_ATTEMPTS=1 \ PANAMA_ACTION_CONFIRM_DELAY=0 PANAMA_ACTION_TEST_LOG="$command_log" \ "$dispatcher" caffeine >/dev/null 2>&1; then fail 'unconfirmed Caffeine state returned success' fi grep -Fqx 'notify-send <-a> <-i> ' "$command_log" \ || fail 'unconfirmed state did not send a failure notification' printf 'Panama action contract: PASS\n'