Add window resizing test

This commit is contained in:
John Hood
2015-10-07 00:54:17 -04:00
parent 01749be642
commit 3c52091f4d
4 changed files with 139 additions and 3 deletions
+1
View File
@@ -12,6 +12,7 @@ displaytests = \
emulation-80th-column.test \ emulation-80th-column.test \
emulation-back-tab.test \ emulation-back-tab.test \
emulation-multiline-scroll.test \ emulation-multiline-scroll.test \
window-resize.test \
unicode-combine-fallback-assert.test \ unicode-combine-fallback-assert.test \
unicode-later-combining.test unicode-later-combining.test
+8 -2
View File
@@ -77,13 +77,19 @@ actions, which are expected to be different.
`post` is a catchall script hook which allows custom verification `post` is a catchall script hook which allows custom verification
acions to be coded. acions to be coded.
### Client wrapper ### Client wrappers
`tmux` injects a wrapper command into the test command before tmux.
If this is not run, a default command called `hold-stdin` is run
instead. These commands are expected to hold tmux's stdin open,
possibly injecting tmux commands, while the test runs. See
`window-resize.test` for an example of this that manipulates tmux
state. Alternately, this could use expect or something similar.
`client` simply injects a wrapper command into the (long) test command `client` simply injects a wrapper command into the (long) test command
between tmux and mosh. It's expected to interact with its wrapped between tmux and mosh. It's expected to interact with its wrapped
command line as `expect` might do. This is not actually tested yet. command line as `expect` might do. This is not actually tested yet.
## Logging and error reporting ## Logging and error reporting
Each execution action is run, and recorded in Each execution action is run, and recorded in
+8 -1
View File
@@ -135,6 +135,8 @@ for i in $test_args; do
server_tests="$server_tests $i";; server_tests="$server_tests $i";;
verify|same|different) verify|same|different)
compare_tests="$compare_tests $i";; compare_tests="$compare_tests $i";;
tmux)
tmux=1;;
client) client)
client=1;; client=1;;
post) post)
@@ -152,6 +154,11 @@ if [ -n "$client" ]; then
client_wrapper="${test_script} client" client_wrapper="${test_script} client"
fi fi
tmux_stdin="${srcdir}/hold-stdin"
if [ -n "$tmux" ]; then
tmux_stdin="${test_script} tmux"
fi
for run in $server_tests; do for run in $server_tests; do
log "Running server test %s.\n" "$run" log "Running server test %s.\n" "$run"
# XXX need to quote special chars in server pathname here somehow # XXX need to quote special chars in server pathname here somehow
@@ -163,7 +170,7 @@ for run in $server_tests; do
# Actually execute code under test # Actually execute code under test
# XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes # XXX tmux 1.8 requires shell command as a single arg; once we move to 2.0, undo these quotes
# XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X # XXX this ignores $TMPDIR, because it results in an overlong pathname on OS X
if ! ${srcdir}/hold-stdin tmux -S "/tmp/.tmux-mosh-test-$$" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} \"${srcdir}/e2e-test-server\" \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${testarg}\"" > "${test_dir}/${run}.tmux.log"; then if ! ${tmux_stdin} tmux -S "/tmp/.tmux-mosh-test-$$" -C new-session "${srcdir}/print-exitstatus ${client_wrapper} ${sut} \"${srcdir}/e2e-test-server\" \"${PWD}/${test_dir}/${run}\" \"${PWD}/${test_script} ${testarg}\"" > "${test_dir}/${run}.tmux.log"; then
test_error "tmux failure on test %s\n" "$run" test_error "tmux failure on test %s\n" "$run"
fi fi
# Check for mosh failures # Check for mosh failures
+122
View File
@@ -0,0 +1,122 @@
#!/bin/sh
#
# This is a regression test for window resizing in Mosh. Making it
# happen is a little kludgy: we have to create other panes in tmux and
# resize them. But it works!
#
fail()
{
printf "$@" 2>&1
exit 99
}
PATH=$PATH:.:$srcdir
# Top-level wrapper.
if [ $# -eq 0 ]; then
e2e-test $0 tmux baseline
exit
fi
sleepf()
{
(sleep .1 || sleep 1) > /dev/null 2>&1
}
seq()
{
if [ $# -lt 1 -o $# -gt 3 ]; then
echo "bad args" >&2
fi
first=$1
incr=1
last=0
case $# in
3)
incr=$2
last=$3
;;
2)
last=$2
;;
1)
;;
esac
while :; do
printf '%d\n' $first
first=$(expr $first + $incr)
if [ $first -gt $last ]; then
break
fi
done
}
tmux_resize_commands()
{
hv=$1
shrink=$2
grow=$3
# Split the window into two panes.
printf "split-window -${hv}\n"
# Shrink the pane we created
for i in $(seq 1 10); do
sleepf
printf "resize-pane -${shrink}\n"
done
# And grow it
for i in $(seq 1 10); do
sleepf
printf "resize-pane -${grow}\n"
done
sleep 1
# Remove the pane we created.
printf "kill-pane\n"
}
tmux_commands()
{
# An interactive shell is waiting for us in the mosh session.
# Start a full screen application that will redraw on window
# resize.
printf "send-keys 'less /etc/services' 0x0d\n"
sleep 1
# we control the horizontal...
tmux_resize_commands v D U
sleep 1
# and the vertical.
tmux_resize_commands h L R
sleep 1
# Exit less.
printf "send-keys 'q'\n"
sleep 1
# Exit mosh session shell.
printf "send-keys 'exit 0' 0x0d\n"
# need to sleep extra long here, to let child commands complete,
# and not have tmux exit prematurely
sleep 5
}
tmux_stdin()
{
tmux_commands | "$@"
exit
}
baseline()
{
# Just start an interactive shell and wait. The tmux action drives.
sh
}
case $1 in
tmux)
shift;
tmux_stdin "$@";;
baseline)
baseline;;
*)
fail "unknown test argument %s\n" $1;;
esac