Rearranged test suite environment variables so that individual tests
authorDavid Levine <levinedl@acm.org>
Fri, 17 Feb 2012 03:30:43 +0000 (21:30 -0600)
committerDavid Levine <levinedl@acm.org>
Fri, 17 Feb 2012 03:30:43 +0000 (21:30 -0600)
can now be run standalone (outside of make).  But see WARNING in
test/README about how it's better to use "make check" because that
ensures that the current code in your workspace is tested.  Also, the
clean script no longer needs to call setup_test.

25 files changed:
Makefile.am
test/README
test/bad-input/test-header
test/cleanup
test/common.sh.in
test/folder/test-create
test/folder/test-total
test/format/test-localmbox
test/format/test-myhost
test/format/test-mymbox
test/format/test-myname
test/inc/test-deb359167
test/inc/test-eom-align
test/manpages/test-manpages
test/mhbuild/test-forw
test/mhshow/test-cte-binary
test/mhshow/test-qp
test/mhshow/test-subpart
test/new/test-basic
test/pick/test-stderr
test/repl/test-if-str
test/scan/test-scan
test/whatnow/test-attach-detach
test/whatnow/test-cd
test/whatnow/test-ls

index 5b473c3..2a986b0 100644 (file)
@@ -34,10 +34,10 @@ auxexecdir = @libdir@
 ## nmh _does_ have a test suite!
 ##
 
-TESTS_ENVIRONMENT = MH_TEST_DIR=`pwd`/test/testdir \
-                   MH_TEST_COMMON=`pwd`/test/common.sh \
-                   MH_OBJ_DIR=`pwd` mandir=$(mandir) bindir=$(bindir) \
-                   sysconfdir=$(sysconfdir) auxexecdir=$(auxexecdir)
+TESTS_ENVIRONMENT = MH_OBJ_DIR=@abs_srcdir@ \
+                   MH_TEST_DIR=@abs_srcdir@/test/testdir \
+                   auxexecdir=$(auxexecdir) bindir=$(bindir) \
+                   mandir=$(mandir) sysconfdir=$(sysconfdir)
 ##
 ## Important note: the "cleanup" test should always be last
 ##
index 3d7d478..9f890e2 100644 (file)
@@ -17,18 +17,27 @@ designed to work with Automake.  To run these tests you can do "make check"
 via the top-level Makefile.  This is also done automatically via
 "make distcheck".
 
-If you wish to write a new test, here are the steps:
+WARNING:  The test suite installs nmh and run the tests on that test
+installation.  If you run tests individually, they will not remove
+that test installation or check to see if it remains up to date with
+your nmh workspace.  You can run test/clean after a test to remove the
+test installation.  "make check" will do that, so it is best to use
+it.
 
-- Make sure your test script sources common.sh (the location of this script
-  is in the MH_TEST_COMMON environment variable and calls the setup_test
-  shell function (the other scripts have examples of this).
+If you wish to write a new test script, here are the steps:
+
+- Make sure your test script sources $MH_OBJ_DIR/test/common.sh and
+  calls the setup_test shell function (the other scripts have examples
+  of this).
 
 - Your path will be set up to find the locations of the test nmh binaries.
 
 - Add your script to the TESTS variable in the toplevel Makefile.am.
+  By convention, test script names start with "test-", though that
+  is not a requirement.
 
 - If you need additional files for your tests, be sure to add them to
   the EXTRA_DIST variable in Makefile.am.  Note that you should insure
-  that you access these files relative to the ${srcdir} environment variable.
+  that you access these files relative to the $MH_OBJ_DIR environment variable.
 
 - Verify that the test works with both "make check" and "make distcheck".
index 35d680a..71a63a9 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 82b2261..97d8341 100755 (executable)
@@ -5,12 +5,11 @@
 # another "make check", you will get new binaries to test against.
 # 
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
-
-setup_test
+. "$MH_OBJ_DIR/test/common.sh"
 
 rm -rf ${MH_INST_DIR}
index d5a9d7e..7596a48 100644 (file)
@@ -1,6 +1,24 @@
 # Common helper routines for test shell scripts -- intended to be sourced by them
 # @configure_input@
 
+
+#### The following exported variables are set by "make check".  Ensure
+#### that they are set here so that individual tests can be run
+#### outside of make.  Requires that MH_OBJ_DIR be set on entry.
+test -z "$MH_TEST_DIR"  &&  MH_TEST_DIR="$MH_OBJ_DIR/test/testdir"
+test -z "$prefix"  &&  prefix=@prefix@
+test -z "$datarootdir"  &&  datarootdir=@datarootdir@
+test -z "$exec_prefix"  &&  exec_prefix=@exec_prefix@
+test -z "$auxexecdir"  &&  auxexecdir="@libdir@"
+test -z "$bindir"  &&  bindir="@bindir@"
+test -z "$mandir"  &&  mandir="@mandir@"
+test -z "$sysconfdir"  &&  sysconfdir="@sysconfdir@"
+export MH_TEST_DIR auxexecdir bindir mandir sysconfdir
+
+test -z "$MH_INST_DIR"  &&  MH_INST_DIR=${MH_TEST_DIR}/inst
+export MH_INST_DIR
+
+
 output_md5()
 {
   @MD5SUM@ $* | @MD5FMT@
@@ -61,20 +79,13 @@ progress_done ()
 setup_test ()
 {
   export MH=${MH_TEST_DIR}/Mail/.mh_profile
-  export MH_INST_DIR=${MH_TEST_DIR}/inst
   export MHMTSCONF=${MH_INST_DIR}${sysconfdir}/mts.conf
   export PATH=${MH_INST_DIR}${bindir}:${PATH}
   export MH_LIB_DIR=${MH_INST_DIR}${auxexecdir}
 
-  if [ -z "${srcdir}" ]; then
-    echo "srcdir not set; aborting"
-    exit 1
-  fi
-
   #
-  # Only do this once
+  # Only install once
   #
-
   if [ ! -d ${MH_INST_DIR}${bindir} ]; then
     (cd ${MH_OBJ_DIR} && make DESTDIR=${MH_INST_DIR} install) || exit 1
   fi
index a3460ee..2e9e627 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 86b304f..c222792 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 196b03b..8ee6884 100755 (executable)
@@ -4,11 +4,12 @@
 # component functions
 #
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-       echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index d303a8f..c132565 100755 (executable)
@@ -4,11 +4,12 @@
 # the localname entry out of the mts configuration file.
 #
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-       echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 82f0879..5a8ef41 100755 (executable)
@@ -4,11 +4,12 @@
 # a particular email address is "mine" or not
 #
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-       echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 4e1dfaa..97a0539 100755 (executable)
@@ -4,11 +4,12 @@
 # the Signature profile entry, and via SIGNATURE environment variable.
 #
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-       echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 72c6b7f..d2b2302 100755 (executable)
@@ -2,11 +2,16 @@
 # Test a variant of a mailbox which caused debian bug 359167.
 set -e
 
-. ${MH_TEST_COMMON}
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
-THISDIR="${srcdir}/test/inc"
+THISDIR="${MH_OBJ_DIR}/test/inc"
 
 require_prog valgrind
 
index 276d70c..06c972b 100755 (executable)
@@ -4,11 +4,16 @@
 
 set -e
 
-. ${MH_TEST_COMMON}
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
-THISDIR="${srcdir}/test/inc"
+THISDIR="${MH_OBJ_DIR}/test/inc"
 
 if [ ! -z "$VALGRIND_ME" ]; then
     require_prog valgrind
index 7c221ba..7cb7db8 100755 (executable)
@@ -6,7 +6,12 @@
 #
 ######################################################
 
-. ${MH_TEST_COMMON}
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index c92242f..e9a1b2f 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index e5654bb..7d2125d 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 expected=$MH_TEST_DIR/$$.expected
index c19a343..8116b21 100755 (executable)
@@ -7,11 +7,12 @@
 
 set -e
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 9d8fe29..353962d 100755 (executable)
@@ -8,11 +8,12 @@
 
 set -e
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 3b2befd..ca1a4cf 100755 (executable)
@@ -1,10 +1,16 @@
 #!/bin/sh
-
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+######################################################
+#
+# Test many basic nmh capabilities.
+#
+######################################################
+
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 # TODO: Move to a common file tests can source; need more framework...
index f3212da..07a2cf2 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 6bc0e09..2ed4fd0 100755 (executable)
@@ -8,11 +8,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 1b688e0..8e59b96 100755 (executable)
@@ -5,11 +5,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 4314553..5c359de 100755 (executable)
@@ -6,11 +6,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index d92f334..d39d9cf 100755 (executable)
@@ -6,11 +6,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test
 
index 58ee2f6..0504036 100755 (executable)
@@ -6,11 +6,12 @@
 #
 ######################################################
 
-if [ -z "${MH_TEST_COMMON}" ]; then
-    echo "MH_TEST_COMMON not set; try running via 'make check'"
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname $0`/../..
+    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
 fi
 
-. ${MH_TEST_COMMON}
+. "$MH_OBJ_DIR/test/common.sh"
 
 setup_test