mirror of
https://github.com/tmux/tmux.git
synced 2026-10-16 16:44:30 +00:00
More tests.
This commit is contained in:
66
regress/format-list-default.sh
Normal file
66
regress/format-list-default.sh
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# A list with default alignment is drawn like an explicitly left-aligned list.
|
||||||
|
|
||||||
|
PATH=/bin:/usr/bin
|
||||||
|
TERM=screen
|
||||||
|
LC_ALL=C.UTF-8
|
||||||
|
export PATH TERM LC_ALL
|
||||||
|
|
||||||
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||||
|
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
|
||||||
|
TMUX2="$TEST_TMUX -LtestB$$ -f/dev/null"
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
$TMUX2 kill-server >/dev/null 2>&1
|
||||||
|
$TMUX kill-server >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
trap cleanup 0 1 15
|
||||||
|
|
||||||
|
check()
|
||||||
|
{
|
||||||
|
$TMUX set -g 'status-format[0]' "$1" || exit 1
|
||||||
|
i=0
|
||||||
|
while [ "$i" -lt 50 ]; do
|
||||||
|
got=$($TMUX2 capture-pane -p -t outer:0.0 | head -n 1)
|
||||||
|
[ "$got" = "$2" ] && return
|
||||||
|
sleep 0.1
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
echo "format '$1': got '$got', expected '$2'" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$TMUX new-session -d -s inner -x 20 -y 8 'sleep 100' || exit 1
|
||||||
|
$TMUX set -g status-position top || exit 1
|
||||||
|
$TMUX2 new-session -d -s outer -x 20 -y 8 'sleep 100' || exit 1
|
||||||
|
$TMUX2 set -g status off || exit 1
|
||||||
|
$TMUX2 respawn-pane -k -t outer:0.0 "$TMUX attach -t inner" || exit 1
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
check '#[list=on]foo#[nolist]' foo
|
||||||
|
check 'pre#[list=on]middle#[nolist]post' premiddlepost
|
||||||
|
|
||||||
|
# The focus and trimming markers must also match explicit left alignment.
|
||||||
|
format='#[list=on]#[list=left-marker]<#[list=right-marker]>'
|
||||||
|
format=$format'#[list=on]0123456789#[list=focus]FOCUS'
|
||||||
|
format=$format'#[list=on]abcdefghij#[nolist]'
|
||||||
|
check "#[align=left]$format" '<3456789FOCUSabcdef>'
|
||||||
|
check "$format" '<3456789FOCUSabcdef>'
|
||||||
|
|
||||||
|
# Window ranges in the list still dispatch status bindings.
|
||||||
|
$TMUX set -g mouse on || exit 1
|
||||||
|
$TMUX set -g @clicked no || exit 1
|
||||||
|
$TMUX bind -n MouseDown1Status set -g @clicked yes || exit 1
|
||||||
|
check '#[list=on]#[range=window|0]foo#[norange]#[nolist]' foo
|
||||||
|
seq=$(printf '\033[<0;2;1M\033[<0;2;1m')
|
||||||
|
$TMUX2 send-keys -t outer:0.0 -l "$seq" || exit 1
|
||||||
|
i=0
|
||||||
|
while [ "$i" -lt 50 ]; do
|
||||||
|
[ "$($TMUX show -gv @clicked)" = yes ] && exit 0
|
||||||
|
sleep 0.1
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
echo 'list window range did not receive click' >&2
|
||||||
|
exit 1
|
||||||
54
regress/status-ignore-size.sh
Normal file
54
regress/status-ignore-size.sh
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# A client attached with ignore-size that is shorter than the status line
|
||||||
|
# must have it turned off rather than kill the server.
|
||||||
|
# Each inner client runs in an outer pane of its size.
|
||||||
|
|
||||||
|
PATH=/bin:/usr/bin
|
||||||
|
TERM=screen
|
||||||
|
LC_ALL=C.UTF-8
|
||||||
|
export PATH TERM LC_ALL
|
||||||
|
|
||||||
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||||
|
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
|
||||||
|
TMUX2="$TEST_TMUX -LtestB$$ -f/dev/null"
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
$TMUX2 kill-server >/dev/null 2>&1
|
||||||
|
$TMUX kill-server >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
trap cleanup 0 1 15
|
||||||
|
|
||||||
|
fail()
|
||||||
|
{
|
||||||
|
echo "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Attach a normal client of size $1 and an ignore-size client of size $2
|
||||||
|
# (WxH) to the inner session.
|
||||||
|
attach()
|
||||||
|
{
|
||||||
|
$TMUX2 kill-server >/dev/null 2>&1
|
||||||
|
$TMUX2 new-session -d -s big -x "${1%x*}" -y "${1#*x}" 'sleep 100' ||
|
||||||
|
exit 1
|
||||||
|
$TMUX2 set -g status off || exit 1
|
||||||
|
$TMUX2 set -g window-size manual || exit 1
|
||||||
|
$TMUX2 new-session -d -s small -x "${2%x*}" -y "${2#*x}" 'sleep 100' ||
|
||||||
|
exit 1
|
||||||
|
$TMUX2 respawn-pane -k -t big:0.0 "$TMUX attach -t inner" || exit 1
|
||||||
|
sleep 0.5
|
||||||
|
$TMUX2 respawn-pane -k -t small:0.0 \
|
||||||
|
"$TMUX attach -f ignore-size -t inner" || exit 1
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$TMUX new-session -d -s inner -x 80 -y 24 'sleep 100' || exit 1
|
||||||
|
|
||||||
|
# A status line taller than the client.
|
||||||
|
$TMUX set -g status 5 || exit 1
|
||||||
|
attach 80x24 80x4
|
||||||
|
$TMUX has-session 2>/dev/null || fail "server exited: status line too tall"
|
||||||
|
|
||||||
|
exit 0
|
||||||
100
regress/tty-clamp.sh
Normal file
100
regress/tty-clamp.sh
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# A client narrower than the window must clamp pane output to its visible
|
||||||
|
# part, including a pane cut off at both sides after panning. Each inner
|
||||||
|
# client runs in an outer pane of its size.
|
||||||
|
|
||||||
|
PATH=/bin:/usr/bin
|
||||||
|
TERM=screen
|
||||||
|
LC_ALL=C.UTF-8
|
||||||
|
export PATH TERM LC_ALL
|
||||||
|
|
||||||
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||||
|
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
|
||||||
|
TMUX2="$TEST_TMUX -LtestB$$ -f/dev/null"
|
||||||
|
|
||||||
|
DIR=$(mktemp -d) || exit 1
|
||||||
|
TRIGGER=$DIR/trigger
|
||||||
|
CAPTURE=$DIR/capture
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
$TMUX2 kill-server >/dev/null 2>&1
|
||||||
|
$TMUX kill-server >/dev/null 2>&1
|
||||||
|
rm -f "$TRIGGER" "$CAPTURE"
|
||||||
|
rmdir "$DIR"
|
||||||
|
}
|
||||||
|
trap cleanup 0 1 15
|
||||||
|
|
||||||
|
fail()
|
||||||
|
{
|
||||||
|
echo "$*" >&2
|
||||||
|
[ -s "$CAPTURE" ] && cat "$CAPTURE" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Start the inner server with one pane running $1.
|
||||||
|
start()
|
||||||
|
{
|
||||||
|
$TMUX kill-server >/dev/null 2>&1
|
||||||
|
$TMUX2 kill-server >/dev/null 2>&1
|
||||||
|
rm -f "$TRIGGER"
|
||||||
|
|
||||||
|
$TMUX new-session -d -s inner -x 200 -y 50 "$1" || exit 1
|
||||||
|
$TMUX set -g status off || exit 1
|
||||||
|
$TMUX set -g automatic-rename off || exit 1
|
||||||
|
$TMUX set -g window-size largest || exit 1
|
||||||
|
}
|
||||||
|
attach()
|
||||||
|
{
|
||||||
|
$TMUX2 new-session -d -s big -x "${1%x*}" -y "${1#*x}" 'sleep 100' ||
|
||||||
|
exit 1
|
||||||
|
$TMUX2 set -g status off || exit 1
|
||||||
|
$TMUX2 set -g window-size manual || exit 1
|
||||||
|
$TMUX2 new-session -d -s small -x "${2%x*}" -y "${2#*x}" 'sleep 100' ||
|
||||||
|
exit 1
|
||||||
|
$TMUX2 respawn-pane -k -t big:0.0 "$TMUX attach -t inner" || exit 1
|
||||||
|
sleep 0.5
|
||||||
|
$TMUX2 respawn-pane -k -t small:0.0 "$TMUX attach -t inner" || exit 1
|
||||||
|
sleep 1
|
||||||
|
$TMUX has-session 2>/dev/null || fail "server exited on attach"
|
||||||
|
SMALL=$($TMUX list-clients -F '#{client_width} #{client_name}' |
|
||||||
|
sort -n | head -n 1 | cut -d' ' -f2)
|
||||||
|
}
|
||||||
|
alive()
|
||||||
|
{
|
||||||
|
$TMUX has-session 2>/dev/null || fail "server exited: $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# A clear below the cursor in a pane wider than the small client's view.
|
||||||
|
start "sh -c 'while [ ! -e $TRIGGER ]; do sleep 0.1; done
|
||||||
|
printf \"\\033[J\"; exec sleep 100'"
|
||||||
|
attach 167x49 40x12
|
||||||
|
: >"$TRIGGER"
|
||||||
|
sleep 1
|
||||||
|
alive "clear in a pane wider than the client"
|
||||||
|
|
||||||
|
# Output in the right pane of a split, cut off on the right.
|
||||||
|
start 'sleep 100'
|
||||||
|
$TMUX split-window -h -d "sh -c 'while [ ! -e $TRIGGER ]; do sleep 0.1; done
|
||||||
|
printf ab; exec sleep 100'" || exit 1
|
||||||
|
attach 120x30 80x30
|
||||||
|
: >"$TRIGGER"
|
||||||
|
sleep 1
|
||||||
|
alive "output in a pane cut off on the right"
|
||||||
|
|
||||||
|
# A nonzero pane offset is clipped at both sides of a panned viewport.
|
||||||
|
start 'sleep 100'
|
||||||
|
$TMUX split-window -h -d -l 100 "sh -c 'while [ ! -e $TRIGGER ]; do sleep 0.1; done
|
||||||
|
printf \"%010d\" 0 | sed s/0/0123456789/g; exec sleep 100'" || exit 1
|
||||||
|
attach 200x30 40x30
|
||||||
|
$TMUX refresh-client -t "$SMALL" -R 120 || exit 1
|
||||||
|
sleep 0.5
|
||||||
|
: >"$TRIGGER"
|
||||||
|
sleep 1
|
||||||
|
alive "panned pane without side status"
|
||||||
|
$TMUX2 capture-pane -p -t small:0.0 >"$CAPTURE" || exit 1
|
||||||
|
row=$(head -n 1 "$CAPTURE")
|
||||||
|
[ "$row" = 0123456789012345678901234567890123456789 ] ||
|
||||||
|
fail "panned row is '$row'"
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user