# Common helper routines for test shell scripts
# -- intended to be sourced by them
+tmpfile="`mktemp`"
+trap '
+ rm -f "$tmpfile"
+ exit "$failed"
+' 0 1 2 15
+failed=0
+
+
test_skip()
{
- WHY="$1"
- echo "Test $0 SKIP ($WHY)"
- exit 120
+ echo "$0: $1"
+ failed=120
+ exit
}
# portable implementation of 'which' utility
fi
}
+require_locale()
+{
+ for locale in "$@"; do
+ if locale -a | grep -i "$locale" >/dev/null; then
+ return
+ fi
+ done
+ test_skip "no suitable locale available"
+}
+
# Some stuff for doing silly progress indicators
progress_update()
{
- THIS="$1"
- FIRST="$2"
- LAST="$3"
- RANGE="$(expr $LAST - $FIRST ||:)"
- PROG="$(expr $THIS - $FIRST ||:)"
+ test -t 1 || return 0 # suppress progress meter if non-interactive
+ this="$1"
+ first="$2"
+ last="$3"
+ range="$(expr $last - $first ||:)"
+ prog="$(expr $this - $first ||:)"
# this automatically rounds to nearest integer
- PERC="$(expr 100 \* $PROG / $RANGE ||:)"
+ perc="$(expr 100 \* $prog / $range ||:)"
# note \r so next update will overwrite
- printf "%3d%%\r" $PERC
+ printf "%3d%%\r" $perc
}
progress_done()
{
+ test -t 1 || return 0 # suppress progress meter if non-interactive
printf "100%%\n"
}
+
+
+
+#### Filter that squeezes blank lines, partially emulating GNU cat -s,
+#### but sufficient for our purpose.
+#### From http://www-rohan.sdsu.edu/doc/sed.html, compiled by Eric Pement.
+squeeze_lines()
+{
+ sed '/^$/N;/\n$/D'
+}
+
+#### Filter that converts non-breakable space U+00A0 to an ASCII space.
+prepare_space()
+{
+ sed 's/'"`printf '\\302\\240'`"'/ /g'
+}
+
+
+# first argument: command line to run
+# second argument: "normspace" to normalize the whitespace
+# stdin: expected output
+runandcheck()
+{
+ if [ "$2" = "normspace" ]; then
+ eval "$1" 2>&1 | prepare_space >"$tmpfile"
+ diff="`prepare_space | diff -ub - "$tmpfile" || :`"
+ else
+ eval "$1" >"$tmpfile" 2>&1
+ diff="`diff -u - "$tmpfile"`"
+ fi
+
+ if [ "$diff" ]; then
+ echo "$0: $1 failed"
+ echo "$diff"
+ failed=`expr "${failed:-0}" + 1`
+ fi
+}