Files
tmux/regress/control-notify-events.sh
2026-07-13 10:23:38 +01:00

103 lines
1.9 KiB
Bash

#!/bin/sh
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
LANG=C.UTF-8
export TERM LC_ALL LANG
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
TMPDIR=$(mktemp -d)
IN="$TMPDIR/in"
OUT="$TMPDIR/out"
PID=
cleanup()
{
[ -n "$PID" ] && kill "$PID" 2>/dev/null
$TMUX kill-server 2>/dev/null
rm -rf "$TMPDIR"
}
trap cleanup EXIT
wait_for()
{
pattern=$1
timeout=${2:-6}
i=0
while [ "$i" -lt "$timeout" ]; do
if grep -F -- "$pattern" "$OUT" >/dev/null 2>&1; then
return 0
fi
sleep 1
i=$((i + 1))
done
echo "missing: $pattern"
cat "$OUT"
return 1
}
wait_for_count()
{
pattern=$1
expected=$2
timeout=${3:-6}
i=0
while [ "$i" -lt "$timeout" ]; do
count=$(grep -F -- "$pattern" "$OUT" 2>/dev/null | wc -l)
if [ "$count" -ge "$expected" ]; then
return 0
fi
sleep 1
i=$((i + 1))
done
echo "missing count $expected for: $pattern"
cat "$OUT"
return 1
}
send()
{
printf '%s\n' "$*" >&3
}
$TMUX kill-server 2>/dev/null
$TMUX new-session -d -s notify -x 80 -y 24 || exit 1
wid=$($TMUX display-message -p -t notify:0 '#{window_id}') || exit 1
pane=$($TMUX display-message -p -t notify:0.0 '#{pane_id}') || exit 1
mkfifo "$IN"
: >"$OUT"
$TMUX -C attach-session -t notify <"$IN" >"$OUT" 2>&1 &
PID=$!
exec 3>"$IN"
send 'display-message -p ready'
wait_for 'ready' 3 || exit 1
send 'rename-window notify-renamed'
wait_for "%window-renamed $wid notify-renamed" || exit 1
send 'split-window -h'
wait_for "%layout-change $wid " || exit 1
send 'select-pane -t:.0'
wait_for "%window-pane-changed $wid $pane" || exit 1
send 'copy-mode -t:.0'
wait_for "%pane-mode-changed $pane" || exit 1
sessions_changed=$(grep -F -- '%sessions-changed' "$OUT" 2>/dev/null | \
wc -l)
send 'new-session -d -s notify-extra'
wait_for_count '%sessions-changed' $((sessions_changed + 1)) || exit 1
send 'kill-session -t notify-extra'
wait_for_count '%sessions-changed' $((sessions_changed + 2)) || exit 1
exit 0