Fix spelling and encoding errors in manpages and an error message
[mmh] / test / common.sh
index 0fd3afb..d195a7c 100644 (file)
@@ -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,19 +42,29 @@ 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 ||:)"
+       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()
@@ -54,3 +72,40 @@ 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
+}