X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/2e768e3cc0ce768373d3320eca4cdd08b8cf646a..43a65e9777214029046fe7a1427493e6e503a717:/test/common.sh.in diff --git a/test/common.sh.in b/test/common.sh.in index 2264d469..6c9652ce 100644 --- a/test/common.sh.in +++ b/test/common.sh.in @@ -13,6 +13,7 @@ test -z "$auxexecdir" && auxexecdir="@libdir@" test -z "$bindir" && bindir="@bindir@" test -z "$mandir" && mandir="@mandir@" test -z "$sysconfdir" && sysconfdir="@sysconfdir@" +test -z "$supported_locks" && supported_locks="@supported_locks@" test -z "$MULTIBYTE_ENABLED" && MULTIBYTE_ENABLED="@MULTIBYTE_ENABLED@" test -z "$ICONV_ENABLED" && ICONV_ENABLED="@ICONV_ENABLED@" export MH_TEST_DIR auxexecdir bindir mandir sysconfdir @@ -34,7 +35,7 @@ output_md5() #### the same line, the caller needs to add it. This avoids #### differences due to a leading '*' binary file indicator, for #### text files, on some platforms (Cygwin). - @MD5SUM@ $* | @MD5FMT@ | cut -d ' ' -f 1 + @MD5SUM@ $* | @MD5FMT@ | awk '{print $1}' } #### Use built-in $((...)) in test suite if shell supports it. @@ -125,23 +126,62 @@ check_for_hard_links () { set -e } +#### 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' +} + #### check() requires two arguments, each the name of a file to be #### diff'ed. #### If the same, the second file is removed. And the first file is -#### removed unless the optional third argument has a value of +#### removed unless there's an optional argument with a value of #### 'keep first'. #### If different, global variable "failed" is incremented. +#### If there's an optional 'ignore space' argument, spacing differences +#### will not be considered signficant, emulating GNU diff -w. It +#### is assumed that the first file has already been run through +#### prepare_space. check() { - #### POSIX diff should support -c. - if cmp -s "$1" "$2"; then - test $# -lt 3 -o "$3" != 'keep first' && rm -f "$1" - rm -f "$2" + first=$1; shift + second=$1; shift + keepfirst= + ignorespace= + while [ $# -gt 0 ]; do + case $1 in + 'keep first') keepfirst=1 ;; + 'ignore space') ignorespace=1 ;; + *) echo "$0: invalid check() argument \"$1\" in test suite" >&2 ;; + esac + shift + done + + success= + if [ "$ignorespace" ]; then + #### POSIX diff should support -b. + prepare_space <"$second" | diff -b "$first" - >/dev/null && success=1 + else + cmp -s "$first" "$second" && success=1 + fi + + if [ "$success" ]; then + [ "$keepfirst" ] || rm -f "$first" + rm -f "$second" else - echo - diff -c "$1" "$2" || true - echo - echo "$0: test failed, outputs are in $1 and $2." - failed=`expr ${failed:-0} + 1` + echo + #### POSIX diff should support -c. + diff -c "$first" "$second" || true + echo + echo "$0: test failed, outputs are in $first and $second." + failed=`expr ${failed:-0} + 1` + #### Set return status of the function. + [ $failed -eq 0 ] fi }