Added mhbuild: -nocontentid to profile used for tests, to simplify
[mmh] / test / common.sh.in
index 7c38d7d..be97b1a 100644 (file)
@@ -14,11 +14,15 @@ test -z "$bindir"  &&  bindir="@bindir@"
 test -z "$mandir"  &&  mandir="@mandir@"
 test -z "$sysconfdir"  &&  sysconfdir="@sysconfdir@"
 test -z "$pagerpath"  &&  pagerpath="@pagerpath@"
+test -z "$MULTIBYTE_ENABLED"  &&  MULTIBYTE_ENABLED="@MULTIBYTE_ENABLED@"
 export MH_TEST_DIR auxexecdir bindir mandir sysconfdir pagerpath
+export MULTIBYTE_ENABLED
 
-test -z "$MH_INST_DIR"  &&  MH_INST_DIR=${MH_TEST_DIR}/inst
+test -z "$MH_INST_DIR"  &&  MH_INST_DIR="${MH_TEST_DIR}/inst"
 export MH_INST_DIR
 
+unset MHBUILD MHCONTEXT MHMTSUSERCONF MHN MHSHOW MHSTORE MHTMPDIR
+unset MHLDEBUG MHPDEBUG MHWDEBUG MM_CHARSET
 
 output_md5()
 {
@@ -29,6 +33,17 @@ output_md5()
   @MD5SUM@ $* | @MD5FMT@ | cut -d ' ' -f 1
 }
 
+#### Use built-in $((...)) in test suite if shell supports it.
+#### Borrowed from configure's as_fn_arith.  The result is placed
+#### in global arith_val.
+#### Detected at run-time instead of by configure to allow testing
+#### with different shells.
+if (eval "test \$(( 1 + 1 )) = 2" 2>/dev/null); then
+  eval 'arith_eval () { arith_val=$(( $* )); }'
+else
+  arith_eval () { arith_val=`expr "$@" || test $? -eq 1`; }
+fi
+
 test_skip ()
 {
   WHY="$1"
@@ -57,7 +72,7 @@ findprog()
 
 require_prog ()
 {
-  if [ -z "$(findprog $1)" ]; then
+  if [ -z "`findprog $1`" ]; then
     test_skip "missing $1"
   fi
 }
@@ -68,10 +83,10 @@ progress_update ()
   THIS="$1"
   FIRST="$2"
   LAST="$3"
-  RANGE="$(($LAST - $FIRST))"
-  PROG="$(($THIS - $FIRST))"
+  arith_eval $LAST - $FIRST; RANGE=$arith_val
+  arith_eval $THIS - $FIRST; PROG=$arith_val
   # this automatically rounds to nearest integer
-  PERC="$(((100 * $PROG) / $RANGE))"
+  arith_eval 100 \* $PROG / $RANGE; PERC=$arith_val
   # note \r so next update will overwrite
   printf "%3d%%\r" $PERC
 }
@@ -104,8 +119,9 @@ check() {
 #### an error message is printed and global variable "failed" is incremented;
 #### if there is an optional third argument, it is used in the error message.
 run_test() {
-  #### Invert exit status to prevent triggering immediate exit due to set -e.
-  ! actual_output="`$1 2>&1`"
+  set +e
+  actual_output=`$1 2>&1`
+  set -e
   if test x"$actual_output" != x"$2"; then
     echo "$0: ${3:-\"$1\"} expected:" 1>&2
     echo "    '$2'" 1>&2
@@ -117,28 +133,43 @@ run_test() {
 
 setup_test ()
 {
-  export MH=${MH_TEST_DIR}/Mail/.mh_profile
-  export MHMTSCONF=${MH_INST_DIR}${sysconfdir}/mts.conf
-  export PATH=${MH_INST_DIR}${bindir}:${PATH}
-  export MH_LIB_DIR=${MH_INST_DIR}${auxexecdir}
+  MH="${MH_TEST_DIR}/Mail/.mh_profile"
+  MHMTSCONF="${MH_INST_DIR}${sysconfdir}/mts.conf"
+  PATH="${MH_INST_DIR}${bindir}:${PATH}"
+  MH_LIB_DIR="${MH_INST_DIR}${auxexecdir}"
+  export MH MHMTSCONF MH_LIB_DIR PATH
 
   #
   # Only install once
   #
-  if [ ! -d ${MH_INST_DIR}${bindir} ]; then
-    (cd ${MH_OBJ_DIR} && make DESTDIR=${MH_INST_DIR} install) || exit 1
+  if [ -d "${MH_INST_DIR}${bindir}" ]; then
+    :
+  else
+    (cd "${MH_OBJ_DIR}" &&
+      make DESTDIR="${MH_INST_DIR}" SETGID_MAIL= install) ||
+      exit 1
+
+    #### Don't test with sendmail because it would really send the
+    #### mail.  If configured to use sendmail, change to smtp instead
+    #### so that we use fakesmtp.
+    sed -e 's/mts: *.*/mts: smtp/' "${MHMTSCONF}" >"${MHMTSCONF}.new"
+    mv -f "${MHMTSCONF}.new" "${MHMTSCONF}"
   fi
 
   # clean old test data
-  trap "rm -rf $MH_TEST_DIR/Mail; exit \$status" 0
+  trap "rm -rf '$MH_TEST_DIR/Mail'" 0
   # setup test data
-  mkdir $MH_TEST_DIR/Mail || exit 1
-  cat > $MH <<EOF || exit 1
+  mkdir "$MH_TEST_DIR/Mail" || exit 1
+  cat > "$MH" <<EOF || exit 1
 Path: ${MH_TEST_DIR}/Mail
+buildmimeproc: ${MH_INST_DIR}${bindir}/mhbuild
+fileproc: ${MH_INST_DIR}${bindir}/refile
+libdir: ${MH_LIB_DIR}
+mhbuild: -nocontentid
 mhlproc: ${MH_LIB_DIR}/mhl
-showproc: ${MH_LIB_DIR}/mhl
+moreproc: cat
 postproc: ${MH_LIB_DIR}/post
-fileproc: ${MH_INST_DIR}${bindir}/refile
+showproc: ${MH_LIB_DIR}/mhl
 EOF
 
   for f in MailAliases components digestcomps distcomps forwcomps mhl.body \
@@ -147,7 +178,7 @@ EOF
            scan.YYYYMMDD scan.default scan.mailx scan.nomime scan.size \
            scan.time scan.timely scan.unseen
   do
-    cp ${MH_INST_DIR}${sysconfdir}/${f} ${MH_TEST_DIR}/Mail || exit 1
+    cp "${MH_INST_DIR}${sysconfdir}/${f}" "${MH_TEST_DIR}/Mail" || exit 1
   done
 
   folder -create +inbox > /dev/null