`scan -format '%{x}'' fails to find single-character header `x' in some
cases, depending on the position of the header in the file. Add a
simple test case, scan/test-header-parsing, for this that fails. Alter
the test harness to allow a test to indicate it expects to fail. When
it does, that's ignored. If it passes, that's then an error instead.
Did this because I don't know if or when it will be fixed and didn't
want it to be forgotten in the meantime. When it is fixed, the test can
be enhanced to cover many more possibilities. First noticed it with ad
hoc testing of my fewer-lseek change, but it is present in the released
1.6.
test/rcv/test-rcvtty test/refile/test-refile test/repl/test-convert \
test/repl/test-if-str test/repl/test-trailing-newline \
test/repl/test-multicomp test/repl/test-repl \
test/rcv/test-rcvtty test/refile/test-refile test/repl/test-convert \
test/repl/test-if-str test/repl/test-trailing-newline \
test/repl/test-multicomp test/repl/test-repl \
+ test/scan/test-header-parsing \
test/scan/test-scan test/scan/test-scan-multibyte \
test/sequences/test-flist test/sequences/test-mark \
test/sequences/test-out-of-range \
test/scan/test-scan test/scan/test-scan-multibyte \
test/sequences/test-flist test/sequences/test-mark \
test/sequences/test-out-of-range \
#### '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.
#### '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() {
#### ':' <test name> -- will print '<test name>' in the failure message,
#### to make it easier to tell which of multiple tests has failed.
check() {
second=$1; shift
keepfirst=
ignorespace=
second=$1; shift
keepfirst=
ignorespace=
label=test
while [ $# -gt 0 ]; do
case $1 in
'keep first') keepfirst=1 ;;
'ignore space') ignorespace=1 ;;
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
':') shift; label=\'"$*"\'; break ;;
*) echo "$0: invalid check() argument \"$1\" in test suite" >&2 ;;
esac
if [ "$success" ]; then
[ "$keepfirst" ] || rm -f "$first"
rm -f "$second"
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."
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
--- /dev/null
+#!/bin/sh
+
+set -e
+
+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
+
+mail="$MH_TEST_DIR/$$.mail"
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/$$.actual"
+
+cat >"$mail" <<\E
+a:b
+cd:ef
+ghi:jkl
+mnop:rstu
+E
+sed 's/.*://' "$mail" >"$expected"
+f="`sed 's/:.*/}/; s/^/%{/' "$mail"`"
+run_prog scan -forma "$f" -file "$mail" >"$actual" ||
+exit 1
+check "$expected" "$actual" expectfail
+
+exit $failed