#!/bin/bash # # Copyright (C) 2026 Danilo M. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # The one runnable check for notify-sound. A fake paplay first on PATH # records what it was asked to play, and XDG_RUNTIME_DIR is a temporary # directory, so no sound plays and the live quiet mode is untouched. # # Usage: ./test-notify-sound.sh (exit 0 = all passed) set -u here="$(cd "$(dirname "$0")" && pwd)" tmp="$(mktemp -d)" trap 'rm -rf "$tmp"' EXIT export XDG_RUNTIME_DIR="$tmp" export NOTIFY_SOUND_DIR="/sounds" mkdir "$tmp/bin" printf '#!/bin/sh\nprintf "%%s\\n" "$1" >> "%s/played"\n' "$tmp" > "$tmp/bin/paplay" chmod +x "$tmp/bin/paplay" export PATH="$tmp/bin:$PATH" pass=0 fail=0 check() { local label="$1" want="$2" got="$3" if [[ "$want" == "$got" ]]; then printf 'ok %s\n' "$label" pass=$((pass + 1)) else printf 'FAIL %s: want %q, got %q\n' "$label" "$want" "$got" fail=$((fail + 1)) fi } play() { rm -f "$tmp/played" "$here/notify-sound" "$@" cat "$tmp/played" 2>/dev/null } check "claude" "/sounds/claude-attention.opus" "$(play claude)" check "permission" "/sounds/opencode-perms.opus" "$(play permission)" check "complete" "/sounds/opencode-attention.opus" "$(play complete)" check "error" "/sounds/opencode-attention.opus" "$(play error)" check "question" "/sounds/opencode-attention.opus" "$(play question)" check "an event with no sound" "" "$(play session_started)" check "no argument" "" "$(play)" "$here/statusctl" quiet set 1 check "quiet mutes claude" "" "$(play claude)" check "quiet mutes permission" "" "$(play permission)" "$here/statusctl" quiet set 0 check "quiet off plays again" "/sounds/claude-attention.opus" "$(play claude)" printf '\n%d passed, %d failed\n' "$pass" "$fail" [[ "$fail" -eq 0 ]]