diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index f144572..9648fa8 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -11,6 +11,7 @@ displaytests = \ e2e-failure.test \ emulation-80th-column.test \ emulation-back-tab.test \ + emulation-cursor-motion.test \ emulation-multiline-scroll.test \ server-network-timeout.test \ server-signal-timeout.test \ diff --git a/src/tests/emulation-cursor-motion.test b/src/tests/emulation-cursor-motion.test new file mode 100755 index 0000000..88a0ed6 --- /dev/null +++ b/src/tests/emulation-cursor-motion.test @@ -0,0 +1,96 @@ +#!/bin/sh + +# +# This test exercises a particular optimization involving small cursor +# motions in Mosh. +# +fail() +{ + printf "$@" 2>&1 + exit 99 +} + + + +PATH=$PATH:.:$srcdir +# Top-level wrapper. +if [ $# -eq 0 ]; then + e2e-test $0 baseline direct verify + exit +fi + +# OK, we have arguments, we're one of the test hooks. +if [ $# -ne 1 ]; then + fail "bad arguments %s\n" "$@" +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 +} + +baseline() +{ + printf '\033[H\033[J' + + while read x y text; do + printf '\033[%d;%dH%s' $y $x $text + sleepf + done <