diff --git a/regress/cfg-client-free.sh b/regress/cfg-client-free.sh new file mode 100644 index 000000000..9069163f6 --- /dev/null +++ b/regress/cfg-client-free.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +# a client lost while the configuration is loading is freed + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) + +TMPDIR=$(mktemp -d) || exit 1 +TMUX="$TEST_TMUX -S$TMPDIR/tmux.sock" + +cleanup() +{ + touch $TMPDIR/go + $TMUX kill-server 2>/dev/null + rm -rf "$TMPDIR" +} +trap cleanup 0 1 15 + +# Poll until a command succeeds. +wait_for() +{ + i=0 + while ! "$@"; do + [ $i -eq 100 ] && exit 1 + i=$((i + 1)) + sleep 0.1 + done +} + +# The run-shell holds the configuration until the go file exists. +cat <$TMPDIR/conf +new-session -d -s keep +run-shell 'touch $TMPDIR/started; i=0; while [ ! -f $TMPDIR/go ] && [ \$i -lt 100 ]; do sleep 0.1; i=\$((i + 1)); done' +EOF + +cd $TMPDIR || exit 1 +$TMUX -v -f$TMPDIR/conf new-session -d -s first : [cfg_done/" not in contents, contents + finally: + go.touch() + server.terminate() + try: + server.wait(timeout=3) + except subprocess.TimeoutExpired: + server.kill() + server.wait() +PY diff --git a/regress/cfg-load-once.sh b/regress/cfg-load-once.sh new file mode 100644 index 000000000..b9f4289e1 --- /dev/null +++ b/regress/cfg-load-once.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# the configuration is loaded once if the client that started it is lost, and +# the next client still waits for it to finish + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) + +TMPDIR=$(mktemp -d) || exit 1 +TMUX="$TEST_TMUX -S$TMPDIR/tmux.sock" + +cleanup() +{ + touch $TMPDIR/go + $TMUX kill-server 2>/dev/null + rm -rf "$TMPDIR" +} +trap cleanup 0 1 15 + +# Poll until a command succeeds. +wait_for() +{ + i=0 + while ! "$@"; do + [ $i -eq 100 ] && exit 1 + i=$((i + 1)) + sleep 0.1 + done +} + +# The run-shell holds the configuration until the go file exists. +cat <$TMPDIR/conf +set -ga @runs x +new-session -d -s keep +run-shell 'touch $TMPDIR/started; i=0; while [ ! -f $TMPDIR/go ] && [ \$i -lt 100 ]; do sleep 0.1; i=\$((i + 1)); done' +set -g @late 1 +EOF + +cd $TMPDIR || exit 1 +$TMUX -v -f$TMPDIR/conf new-session -d -s first $TMPDIR/out & +pid=$! +wait_for grep -q "name is client-$pid\$" $log +touch $TMPDIR/go +wait $pid || exit 1 + +[ "$(cat $TMPDIR/out)" = "x 1" ] || exit 1 + +exit 0 diff --git a/regress/swap-pane-zoom-error.sh b/regress/swap-pane-zoom-error.sh new file mode 100644 index 000000000..0d85f72f1 --- /dev/null +++ b/regress/swap-pane-zoom-error.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +# swap-pane refusing a floating pane must leave the zoom alone + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -LtestA$$ -f/dev/null" +$TMUX kill-server 2>/dev/null + +TMP=$(mktemp) +trap "rm -f $TMP; $TMUX kill-server 2>/dev/null" 0 1 15 + +$TMUX new -d +$TMUX splitw -d +$TMUX new-pane -d + +echo $($TMUX lsp -F'#{pane_id}:#{pane_floating_flag}') >$TMP +(echo "%0:0 %1:0 %2:1"|cmp -s - $TMP) || exit 1 + +$TMUX resize-pane -Z -t %0 +[ "$($TMUX display -p '#{window_zoomed_flag}')" = 1 ] || exit 1 + +$TMUX swap-pane -Z -D -t %2 +[ "$?" = 0 ] && exit 1 +[ "$($TMUX display -p '#{window_zoomed_flag}')" = 1 ] || exit 1 + +$TMUX swap-pane -Z -U -t %2 +[ "$?" = 0 ] && exit 1 +[ "$($TMUX display -p '#{window_zoomed_flag}')" = 1 ] || exit 1 + +# A swap that is allowed still happens. +$TMUX swap-pane -D -t %0 || exit 1 +echo $($TMUX lsp -F'#{pane_id}') >$TMP +(echo "%1 %0 %2"|cmp -s - $TMP) || exit 1 + +$TMUX kill-server 2>/dev/null + +exit 0