X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=test%2Fcommon.sh;h=805afeafcc8e059c54e702b1a1f1b39dd9f71275;hp=0fd3afb9ed3c3f4ae94148c279f3a82c92f6315e;hb=18591f8e001ecedbee48a51c1d1f08ebaa1c15c8;hpb=c3ed524435c792523deeb78f3a6936b7ded0393e diff --git a/test/common.sh b/test/common.sh index 0fd3afb..805afea 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,23 +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() { - 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 ||:)" + 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 # supress progress meter if non-interactive + 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 +}