]> diplodocus.org Git - nmh/blobdiff - test/common.sh.in
Put parameter names in h/utils.h memory function prototypes.
[nmh] / test / common.sh.in
index 7a4fc7aad0af8d07e52ae9bd1db85cdfef70fc78..4734612c7fd666aba9f0a45fc26c17f96d3f8556 100644 (file)
@@ -36,8 +36,15 @@ test -z "$HOME"  &&  HOME=$MH_TEST_DIR
 HOME=$MH_TEST_DIR
 export HOME
 
+#### If w3m is used, HOME needs to be set, assuming default w3m config.
+#### So make sure that HOME is set to avoid run-time warning about not
+#### being able to create config directory.
+test -z "$HOME"  &&  HOME=$MH_TEST_DIR
+HOME=$MH_TEST_DIR
+export HOME
+
 unset MAILDROP MHBUILD MHCONTEXT MHMTSUSERCONF MHN MHSHOW MHSTORE
-unset MHLDEBUG MHPDEBUG MHWDEBUG PAGER
+unset MHLDEBUG MHPDEBUG MHWDEBUG PAGER XOAUTH SMTPUTF8
 #### Set LC_ALL in individual tests as needed.  Unset these so
 #### that we don't depend on user's settings in other tests.
 unset LANG LC_ALL LC_CTYPE
@@ -103,10 +110,15 @@ require_prog ()
 }
 
 # Skip test if none of the offered locales are supported.
+# As side effect, use the first locale that is found.  Note that
+# some platforms allow, by way of example, en_US.UTF-8 to be used
+# even though en_US.UTF8 is listed by locale -a.  But by setting
+# LC_ALL here, we don't rely on that.
 require_locale ()
 {
   for locale in "$@"; do
     if locale -a | grep -i "$locale" >/dev/null; then
+        LC_ALL="$locale"; export LC_ALL
         return
     fi
   done
@@ -186,6 +198,8 @@ prepare_space() {
 ####   'ignore space' -- spacing differences will not be considered
 ####        significant, emulating GNU diff -w.  It is assumed that the
 ####        first file has already been run through prepare_space.
+####   'expectfail' -- The test is expected to fail, e.g. due to a code
+####        bug, but the test should run as a placeholder for the fix.
 ####   ':' <test name> -- will print '<test name>' in the failure message,
 ####        to make it easier to tell which of multiple tests has failed.
 check() {
@@ -193,11 +207,13 @@ check() {
     second=$1; shift
     keepfirst=
     ignorespace=
+    expectfail=false
     label=test
     while [ $# -gt 0 ]; do
         case $1 in
             'keep first')   keepfirst=1 ;;
             'ignore space') ignorespace=1 ;;
+            expectfail) expectfail=true;;
            ':') shift; label=\'"$*"\'; break ;;
             *) echo "$0: invalid check() argument \"$1\" in test suite" >&2 ;;
         esac
@@ -215,15 +231,25 @@ check() {
     if [ "$success" ]; then
         [ "$keepfirst" ]  ||  rm -f "$first"
         rm -f "$second"
+        if $expectfail; then
+            echo "$0: expected test to fail, but it passed"
+            failed=`expr ${failed:-0} + 1`
+            #### Set return status of the function.
+            [ $failed -eq 0 ]
+        fi
     else
         echo
         #### POSIX diff should support -c.
         diff -c "$first" "$second" || true
         echo
         echo "$0: $label failed, outputs are in $first and $second."
-        failed=`expr ${failed:-0} + 1`
-        #### Set return status of the function.
-        [ $failed -eq 0 ]
+        if $expectfail; then
+            echo "$0: $label expected to fail, ignoring"
+        else
+            failed=`expr ${failed:-0} + 1`
+            #### Set return status of the function.
+            [ $failed -eq 0 ]
+        fi
     fi
 }
 
@@ -301,13 +327,18 @@ cleanup() {
 
 #### Function to set the test name, and whatever the future brings.
 start_test() {
-    nmh_tests_testname="$1"
+    #### run_test disables exit on non-zero status, but does increment
+    #### failed.  Don't overwrite nmh_tests_testname if there was a
+    #### failure; remember the first test that failed.
+    [ ${failed:-0} -eq 0 ]  &&  nmh_tests_testname="$1"
 }
 
 #### Corresponding function to indicate that the test has finished.  It need
 #### not be called after each test, just the last one in a file.
 finish_test() {
-    unset nmh_tests_testname
+    #### run_test disables exit on non-zero status, but does increment
+    #### failed.  Don't unset nmh_tests_testname if there was a failure.
+    [ ${failed:-0} -eq 0 ]  &&  unset nmh_tests_testname
 }
 
 setup_test ()
@@ -382,6 +413,10 @@ EOF
   fi
 
   folder -create +inbox > /dev/null
+  #### Suppress warnings about a new version.
+  #### mhparam version includes the nmh- prefix, so be consistent with that.
+  printf 'Version: nmh-%s\n' "${MH_VERSION}" >> "${MH_TEST_DIR}"/Mail/context
+
   # create 10 basic messages
   for i in 1 2 3 4 5 6 7 8 9 10;
   do