mirror of
https://github.com/tmux/tmux.git
synced 2026-03-06 15:55:33 +00:00
Add regression test from Ilya Grigoriev, GitHub issue 4818.
This commit is contained in:
70
regress/session-group-resize.sh
Executable file
70
regress/session-group-resize.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Test that window-size=latest resizes windows correctly when switching
|
||||
# windows in session groups. When a client switches to a window, it should
|
||||
# resize immediately to match that client's size.
|
||||
#
|
||||
# Tests both switch-client and select-window, which use different code paths.
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
TMUX="$TEST_TMUX -Ltest"
|
||||
$TMUX kill-server 2>/dev/null
|
||||
|
||||
TMP1=$(mktemp)
|
||||
TMP2=$(mktemp)
|
||||
TMP3=$(mktemp)
|
||||
trap "rm -f $TMP1 $TMP2 $TMP3" 0 1 15
|
||||
|
||||
# Create a session with two windows, staying on window 0.
|
||||
$TMUX -f/dev/null new -d -s test -x 20 -y 6 || exit 1
|
||||
$TMUX neww -t test || exit 1
|
||||
$TMUX selectw -t test:0 || exit 1
|
||||
|
||||
# Attach a small 20x6 client in control-mode and have it select window 1. This makes
|
||||
# the small client the "latest" for window 1. The sleep keeps stdin open so the
|
||||
# control client stays attached.
|
||||
(echo "refresh-client -C 20,6"; echo "selectw -t :1"; sleep 5) |
|
||||
$TMUX -f/dev/null -C attach -t test >$TMP1 2>&1 &
|
||||
|
||||
# Wait for small client to be on window 1.
|
||||
n=0
|
||||
while [ $n -lt 20 ]; do
|
||||
$TMUX lsc -F '#{client_name} #{window_index}' 2>/dev/null | grep -q " 1$" && break
|
||||
sleep 0.1
|
||||
n=$((n + 1))
|
||||
done
|
||||
|
||||
# Create a grouped session with a larger 30x10 client, also in control mode. It
|
||||
# starts on window 0 (inherited), then switches to window 1 with
|
||||
# `switch-client`.
|
||||
(echo "refresh-client -C 30,10"; echo "switch-client -t :=1"; sleep 5) |
|
||||
$TMUX -f/dev/null -C new -t test -x 30 -y 10 >$TMP2 2>&1 &
|
||||
|
||||
# Wait briefly for the switch-client command to execute, then check.
|
||||
# The resize should happen immediately (within 0.2s).
|
||||
sleep 0.2
|
||||
OUT1=$($TMUX display -t test:1 -p '#{window_width}x#{window_height}' 2>/dev/null)
|
||||
|
||||
# Also test selectw (select-window) which uses a different code path.
|
||||
# Create a third grouped session with a 25x8 client, switch to window 1
|
||||
# using selectw instead of switch-client.
|
||||
(echo "refresh-client -C 25,8"; echo "selectw -t :1"; sleep 5) |
|
||||
$TMUX -f/dev/null -C new -t test -x 25 -y 8 >$TMP3 2>&1 &
|
||||
|
||||
sleep 0.2
|
||||
OUT2=$($TMUX display -t test:1 -p '#{window_width}x#{window_height}' 2>/dev/null)
|
||||
|
||||
# Clean up - kill server (terminates clients). Don't wait for background
|
||||
# sleeps; they'll be orphaned but harmless.
|
||||
$TMUX kill-server 2>/dev/null
|
||||
|
||||
# Window 1 should have resized to 30x10 (the second client's size).
|
||||
[ "$OUT1" = "30x10" ] || { echo "switch-client resize failed: $OUT1"; exit 1; }
|
||||
|
||||
# Window 1 should have resized to 25x8 (the third client's size).
|
||||
[ "$OUT2" = "25x8" ] || { echo "selectw resize failed: $OUT2"; exit 1; }
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user