X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=test%2Fcommon.sh;h=d195a7cf5d24b35d81c0b6e5e18ccc06602f4473;hp=7f09867ea9e744df8ae592c0234e6206391cd932;hb=88b2142594d5ea1e8385dae5eca81eed1018c555;hpb=92009746ef66e8a9a9dc6643845e839e0debaf18 diff --git a/test/common.sh b/test/common.sh index 7f09867..d195a7c 100644 --- a/test/common.sh +++ b/test/common.sh @@ -1,11 +1,19 @@ # 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 @@ -34,21 +42,70 @@ require_prog() 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 # supress 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 # supress 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 +}