]> diplodocus.org Git - nmh/commitdiff
Added start_test() and finish_test() functions to test/common.sh.in.
authorDavid Levine <david.levine@gonift.com>
Sat, 26 Mar 2016 22:59:31 +0000 (18:59 -0400)
committerDavid Levine <david.levine@gonift.com>
Sat, 26 Mar 2016 22:59:31 +0000 (18:59 -0400)
See usage information in the (new) cleanup() function in that file.
This allow us to isolate test failures based on naming of individual
tests within a single test file.  As part of this, added set -e to
setup_test().  This required minor updates to test/new/basic and
test/pick/test-stderr to conform.  So, migrated test/new/test-basic
to start_test()/finish_test().

test/common.sh.in
test/new/test-basic
test/pick/test-stderr

index 5e8d6b3d23fb913edfde179c6b9767fef51b84e2..936b89addefa6a836b0e6ffc8dc49d109aea47e7 100644 (file)
@@ -252,8 +252,51 @@ run_test() {
   fi
 }
 
+#### Function invoked by trap on exit.
+cleanup() {
+    #### Save exit status to use as status for this program.
+    status=$?
+
+    #### Clean up test mail space.
+    #### cd to $MH_TEST_DIR before trying to remove its Mail
+    #### subdirectory.  rm on Solaris won't remove it if it's in the
+    #### path of the current working directory.
+    test -z "$MH_TEST_NOCLEANUP" && (cd $MH_TEST_DIR; rm -rf "$MH_TEST_DIR"/Mail)
+
+    #### Report test name if set, which indicates failure.
+    #### Relies on set -e to invoke the trap which calls
+    #### this function on failure.
+    #### To use:
+    #### 1) Set test name before running the test, use start_test().
+    #### 2) Unset upon successful completion, use finish_test().
+    if test -n "$nmh_tests_testname"; then
+        echo $nmh_tests_testname failed
+    fi
+
+    #### Exit with non-zero status if failure.  Failure is defined as either
+    #### non-empty nmh_tests_testname or non-zero exit status on entry to the
+    #### function.
+    if test -n "$nmh_tests_testname"  -o  $status -ne 0; then
+        test $status -ne 0  &&  exit $status  ||  exit 1
+        test $status -ne 0  &&  exit 0  ||  exit 0
+    fi
+}
+
+#### Function to set the test name, and whatever the future brings.
+start_test() {
+    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
+}
+
 setup_test ()
 {
+  set -e
+
   MH="${MH_TEST_DIR}/Mail/.mh_profile"
   MHMTSCONF="${MH_INST_DIR}${nmhetcdir}/mts.conf"
   MH_LIBEXEC_DIR="${MH_INST_DIR}${nmhlibexecdir}"
@@ -286,8 +329,8 @@ setup_test ()
   PATH="${MH_INST_DIR}${bindir}:${PATH}"
   export PATH
 
-  # clean old test data
-  trap "test -z $MH_TEST_NOCLEANUP && (cd $MH_TEST_DIR; rm -rf '$MH_TEST_DIR/Mail')" 0
+  # clean old test data on exit
+  trap cleanup 0
   # setup test data
   mkdir -p "$MH_TEST_DIR/Mail" || exit 1
   cat > "$MH" <<EOF || exit 1
index 1fba4609fb171d3db942ae2bb474005f30d3a1d1..2fc34dbedf3f0bad4016df79e2844f6399b75b30 100755 (executable)
@@ -29,13 +29,15 @@ foo2
 EOF
 
 # test with no sequence
+start_test 'test with no sequence'
 cat > $expected <<EOF
 new: must specify sequences or set Unseen-Sequence
 EOF
-run_prog new > $actual 2>&1
+run_prog new > $actual 2>&1  ||  true
 check $expected $actual
 
 # test with no desired messages
+start_test 'test with no desired messages'
 cat > $expected <<EOF
  total      0.
 EOF
@@ -45,6 +47,7 @@ run_prog new -folders $folders aseq > $actual 2>&1
 check $expected $actual
 
 # test fnext/fprev with no desired messages
+start_test 'test fnext/fprev with no desired messages'
 cat /dev/null > $expected
 run_prog fnext aseq > $actual 2>&1
 check $expected $actual 'keep first'
@@ -57,6 +60,7 @@ echo 'aseq: 1' > $MH_TEST_DIR/Mail/foo1/.mh_sequences
 echo 'aseq: 1' > $MH_TEST_DIR/Mail/foo2/.mh_sequences
 
 # test with all folders
+start_test 'test with all folders'
 cat > $expected <<EOF
 foo1       1.  1
 foo2       1.  1
@@ -67,6 +71,7 @@ run_prog new aseq > $actual 2>&1
 check $expected $actual
 
 # test with .folders
+start_test 'test with .folders'
 cat > $expected <<EOF
 inbox      1.* 1
 foo2       1.  1
@@ -81,6 +86,7 @@ echo 'bseq: 3-4' >> $MH_TEST_DIR/Mail/foo1/.mh_sequences
 echo 'bseq: 3-4' >> $MH_TEST_DIR/Mail/foo2/.mh_sequences
 
 # test listing aseq and bseq
+start_test 'test listing aseq and bseq'
 cat > $expected <<EOF
 foo1       3.  1 3-4
 foo2       3.  1 3-4
@@ -96,6 +102,7 @@ run_prog new > $actual 2>&1
 check $expected $actual
 
 # test unseen
+start_test 'test unseen'
 cat > $expected <<EOF
 
 3 aseq bseq messages in foo1
@@ -117,48 +124,56 @@ run_prog unseen > $actual 2>&1
 check $expected $actual
 
 # test fnext with the current folder not in the list
+start_test 'test fnext with the current folder not in the list'
 echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
 echo 'inbox  1 3-4' > $expected
 run_prog fnext -folders $folders > $actual 2>&1
 check $expected $actual
 
 # test fprev with the current folder not in the list
+start_test 'test fprev with the current folder not in the list'
 echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
 echo 'inbox  1 3-4' > $expected
 run_prog fprev -folders $folders > $actual 2>&1
 check $expected $actual
 
 # test fnext with current folder in the middle of the list
+start_test 'test fnext with current folder in the middle of the list'
 echo 'Current-Folder: foo2' > $MH_TEST_DIR/Mail/context
 echo 'inbox  1 3-4' > $expected
 run_prog fnext > $actual 2>&1
 check $expected $actual
 
 # test fprev with current folder in the middle of the list
+start_test 'test fprev with current folder in the middle of the list'
 echo 'Current-Folder: foo2' > $MH_TEST_DIR/Mail/context
 echo 'foo1  1 3-4' > $expected
 run_prog fprev > $actual 2>&1
 check $expected $actual
 
 # test fprev with current folder at the beginning of the list
+start_test 'test fprev with current folder at the beginning of the list'
 echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
 echo 'inbox  1 3-4' > $expected
 run_prog fprev > $actual 2>&1
 check $expected $actual
 
 # test fnext with current folder at the end of the list
+start_test 'test fnext with current folder at the end of the list'
 echo 'Current-Folder: inbox' > $MH_TEST_DIR/Mail/context
 echo 'foo1  1 3-4' > $expected
 run_prog fnext > $actual 2>&1
 check $expected $actual
 
 # test fnext with no current folder
+start_test 'test fnext with no current folder'
 rm $MH_TEST_DIR/Mail/context
 echo 'foo1  1 3-4' > $expected
 run_prog fnext > $actual 2>&1
 check $expected $actual
 
 # test fnext with only one folder in the list
+start_test 'test fnext with only one folder in the list'
 cat > $folders <<EOF
 inbox
 EOF
@@ -166,4 +181,6 @@ echo 'inbox  1 3-4' > $expected
 run_prog fnext -folders $folders > $actual 2>&1
 check $expected $actual
 
+finish_test
+
 exit $failed
index 9c1dac3d22c5f26be1225dd9391f7231ad6f8a69..76b899d34e5fa2e9cd4a763591fc5a290918ef4d 100755 (executable)
@@ -28,6 +28,6 @@ EOF
 # Nothing should to go stdout.
 cat /dev/null > $expected_out
 
-run_prog pick -a > $actual_out 2> $actual_err
+run_prog pick -a > $actual_out 2> $actual_err  ||  true
 check "$expected_err" "$actual_err"
 check "$expected_out" "$actual_out"