mirror of
https://github.com/tmux/tmux.git
synced 2026-07-10 03:19:31 +00:00
173 lines
3.8 KiB
Bash
173 lines
3.8 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
|
|
}
|
|
|
|
reject_for()
|
|
{
|
|
pattern=$1
|
|
timeout=${2:-3}
|
|
i=0
|
|
|
|
while [ "$i" -lt "$timeout" ]; do
|
|
if grep -F -- "$pattern" "$OUT" >/dev/null 2>&1; then
|
|
echo "unexpected: $pattern"
|
|
cat "$OUT"
|
|
return 1
|
|
fi
|
|
sleep 1
|
|
i=$((i + 1))
|
|
done
|
|
return 0
|
|
}
|
|
|
|
wait_tmux()
|
|
{
|
|
target=$1
|
|
timeout=${2:-6}
|
|
i=0
|
|
|
|
while [ "$i" -lt "$timeout" ]; do
|
|
if $TMUX display-message -p -t "$target" '#{window_id}' \
|
|
>/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
sleep 1
|
|
i=$((i + 1))
|
|
done
|
|
return 1
|
|
}
|
|
|
|
window_fields()
|
|
{
|
|
$TMUX display-message -p -t "$1" '#{window_id} #{window_index}'
|
|
}
|
|
|
|
pane_fields()
|
|
{
|
|
$TMUX display-message -p -t "$1" '#{window_id} #{window_index} #{pane_id}'
|
|
}
|
|
|
|
send()
|
|
{
|
|
printf '%s\n' "$*" >&3
|
|
}
|
|
|
|
$TMUX kill-server 2>/dev/null
|
|
$TMUX new-session -d -s subs -x 80 -y 24 || exit 1
|
|
sid=$($TMUX display-message -p -t subs '#{session_id}')
|
|
|
|
mkfifo "$IN"
|
|
: >"$OUT"
|
|
$TMUX -C attach-session -t subs <"$IN" >"$OUT" 2>&1 &
|
|
PID=$!
|
|
exec 3>"$IN"
|
|
|
|
send 'display-message -p ready'
|
|
wait_for 'ready' 3 || exit 1
|
|
|
|
send "refresh-client -B 'sw::#{session_windows}'"
|
|
wait_for "%subscription-changed sw $sid - - - : 1" || exit 1
|
|
|
|
send 'new-window'
|
|
wait_for "%subscription-changed sw $sid - - - : 2" || exit 1
|
|
|
|
send 'refresh-client -B sw'
|
|
send 'new-window'
|
|
reject_for "%subscription-changed sw $sid - - - : 3" || exit 1
|
|
|
|
send 'new-window -n pane-test'
|
|
wait_tmux subs:pane-test || exit 1
|
|
set -- $(pane_fields subs:pane-test)
|
|
wid=$1
|
|
widx=$2
|
|
pane=$3
|
|
|
|
send "refresh-client -B 'ap:%*:#{pane_id}'"
|
|
wait_for "%subscription-changed ap $sid $wid $widx $pane : $pane" || exit 1
|
|
|
|
send 'split-window -t subs:pane-test'
|
|
i=0
|
|
while [ "$i" -lt 6 ]; do
|
|
[ "$($TMUX list-panes -t subs:pane-test | wc -l)" -eq 2 ] && break
|
|
sleep 1
|
|
i=$((i + 1))
|
|
done
|
|
[ "$i" -lt 6 ] || exit 1
|
|
newpane=$($TMUX list-panes -t subs:pane-test -F '#{pane_id}' | tail -n 1)
|
|
wait_for "%subscription-changed ap $sid $wid $widx $newpane : $newpane" ||
|
|
exit 1
|
|
|
|
$TMUX new-session -d -s other || exit 1
|
|
$TMUX link-window -s subs:pane-test -t other:1 || exit 1
|
|
|
|
send "refresh-client -B 'sp:$newpane:#{pane_id}:#{window_id}'"
|
|
wait_for "%subscription-changed sp $sid $wid $widx $newpane : $newpane:$wid" ||
|
|
exit 1
|
|
|
|
send "refresh-client -B 'cw:$wid:#{window_id}:#{window_index}'"
|
|
wait_for "%subscription-changed cw $sid $wid $widx - : $wid:$widx" ||
|
|
exit 1
|
|
|
|
send "refresh-client -B 'aw:@*:#{window_id}'"
|
|
send 'new-window -n window-test'
|
|
wait_tmux subs:window-test || exit 1
|
|
set -- $(window_fields subs:window-test)
|
|
awid=$1
|
|
awidx=$2
|
|
wait_for "%subscription-changed aw $sid $awid $awidx - : $awid" || exit 1
|
|
|
|
send "refresh-client -B 'dup::#{session_windows}'"
|
|
wcount=$($TMUX display-message -p -t subs '#{session_windows}')
|
|
wait_for "%subscription-changed dup $sid - - - : $wcount" || exit 1
|
|
send "refresh-client -B 'dup::#{session_name}'"
|
|
wait_for "%subscription-changed dup $sid - - - : subs" || exit 1
|
|
send 'new-window -n dup-test'
|
|
wait_tmux subs:dup-test || exit 1
|
|
wcount=$($TMUX display-message -p -t subs '#{session_windows}')
|
|
reject_for "%subscription-changed dup $sid - - - : $wcount" || exit 1
|
|
|
|
send "refresh-client -B 'missing-pane:%999999:#{pane_id}'"
|
|
send "refresh-client -B 'missing-window:@999999:#{window_id}'"
|
|
reject_for '%subscription-changed missing-pane' || exit 1
|
|
reject_for '%subscription-changed missing-window' || exit 1
|
|
|
|
exit 0
|