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}"
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
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
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'
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
check $expected $actual
# test with .folders
+start_test 'test with .folders'
cat > $expected <<EOF
inbox 1.* 1
foo2 1. 1
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
check $expected $actual
# test unseen
+start_test 'test unseen'
cat > $expected <<EOF
3 aseq bseq messages in foo1
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
run_prog fnext -folders $folders > $actual 2>&1
check $expected $actual
+finish_test
+
exit $failed