diff --git a/regress/format-no-current-window.sh b/regress/format-no-current-window.sh new file mode 100644 index 000000000..07bec45cc --- /dev/null +++ b/regress/format-no-current-window.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +# active_window_index, last_window_index, session_stack and +# window_active_clients read the session current window. Expanding them must +# not kill the server. Covers the list-sessions, list-windows and list-panes +# -F form, and commands that unlink the current window. + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -LtestA$$ -f/dev/null" +trap '$TMUX kill-server 2>/dev/null' 0 +trap 'exit 1' 1 2 15 + +fail() +{ + echo "$*" + exit 1 +} + +# Formats that read the current window, expanded together. +FMT='#{active_window_index} #{last_window_index} #{session_stack}' +FMT="$FMT #{window_active_clients} #{window_active_clients_list}" + +$TMUX kill-server 2>/dev/null + +# No session: the callbacks have nothing to read and must return empty. +out=$($TMUX start\; display-message -p "$FMT") || fail "display with no session" +[ "$out" = " " ] || fail "no session expanded to '$out'" + +$TMUX new-session -d -s src -n one -- sleep 30 || fail "new-session src" +[ "$($TMUX display-message -t src -p '#{active_window_index}')" = 0 ] || + fail "active window index" +[ "$($TMUX display-message -t src -p '#{last_window_index}')" = 0 ] || + fail "last window index" +[ "$($TMUX display-message -t src -p '#{session_stack}')" = 0 ] || + fail "session stack" + +$TMUX new-window -d -t src -n two -- sleep 30 || fail "new-window" +[ "$($TMUX display-message -t src -p '#{active_window_index}')" = 0 ] || + fail "active window index after new-window" +[ "$($TMUX display-message -t src -p '#{last_window_index}')" = 1 ] || + fail "last window index after new-window" + +$TMUX new-session -d -s dst -n only -- sleep 30 || fail "new-session dst" + +# Replace and relink the current window, then expand again. +$TMUX set-hook -g window-linked "list-sessions -F '$FMT'" || fail "set-hook" +$TMUX new-window -k -t src:one -n replaced -- sleep 30 || fail "new-window -k" +$TMUX link-window -k -s src:two -t dst:only || fail "link-window -k" + +[ "$($TMUX display-message -t src -p '#{active_window_index}')" = 0 ] || + fail "active window index after replace" +[ "$($TMUX display-message -t src -p '#{last_window_index}')" = 1 ] || + fail "last window index after replace" +[ "$($TMUX display-message -t dst -p '#{active_window_index}')" = 0 ] || + fail "active window index after link" +[ "$($TMUX display-message -t dst -p '#{window_active_clients}')" = 0 ] || + fail "window active clients" + +$TMUX list-sessions -F "$FMT" >/dev/null || fail "list-sessions" +$TMUX list-windows -a -F "$FMT" >/dev/null || fail "list-windows" +$TMUX list-panes -a -F "$FMT" >/dev/null || fail "list-panes" +$TMUX has-session -t src || fail "src session gone" +$TMUX has-session -t dst || fail "dst session gone" + +exit 0 diff --git a/regress/list-keys-sort-name.sh b/regress/list-keys-sort-name.sh new file mode 100644 index 000000000..ed8555e1b --- /dev/null +++ b/regress/list-keys-sort-name.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +# list-keys -O name orders by table name, then by key within each table + +PATH=/bin:/usr/bin +TERM=screen + +[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux) +TMUX="$TEST_TMUX -LtestLKSN$$ -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 || exit 1 + +F='#{key_table} #{key_string}' + +# Expected: each table in name order, keys in the table's own (key) order. +for t in $($TMUX list-keys -F '#{key_table}' | LC_ALL=C sort -fu); do + $TMUX list-keys -T $t -F "$F" +done >$TMP.exp +[ -s $TMP.exp ] || exit 1 + +$TMUX list-keys -O name -F "$F" >$TMP.out +cmp -s $TMP.exp $TMP.out || exit 1 + +# Reversed is the exact reverse. +$TMUX list-keys -O name -r -F "$F" | + awk '{ l[NR] = $0 } END { for (i = NR; i > 0; i--) print l[i] }' \ + >$TMP.out +cmp -s $TMP.exp $TMP.out || exit 1 + +exit 0