Add Panama commands to the launcher
This commit is contained in:
Executable
+152
@@ -0,0 +1,152 @@
|
||||
#!/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'
|
||||
Reference in New Issue
Block a user