From 68261ea30bdaec3384876f2fe152a377d2d5c0d1 Mon Sep 17 00:00:00 2001 From: Ralph Corderoy Date: Sun, 16 Oct 2016 11:43:45 +0100 Subject: [PATCH] Add failing test case for single-character header parsing. `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. --- Makefile.am | 1 + test/common.sh.in | 20 +++++++++++++++++--- test/scan/test-header-parsing | 30 ++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100755 test/scan/test-header-parsing diff --git a/Makefile.am b/Makefile.am index 2cd95a05..f61643b5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,6 +100,7 @@ TESTS = test/ali/test-ali test/anno/test-anno \ 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 \ diff --git a/test/common.sh.in b/test/common.sh.in index b123aca6..4734612c 100644 --- a/test/common.sh.in +++ b/test/common.sh.in @@ -198,6 +198,8 @@ 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. #### ':' -- will print '' in the failure message, #### to make it easier to tell which of multiple tests has failed. check() { @@ -205,11 +207,13 @@ check() { second=$1; shift keepfirst= ignorespace= + expectfail=false 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 @@ -227,15 +231,25 @@ check() { 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." - 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 fi } diff --git a/test/scan/test-header-parsing b/test/scan/test-header-parsing new file mode 100755 index 00000000..752fdb9e --- /dev/null +++ b/test/scan/test-header-parsing @@ -0,0 +1,30 @@ +#!/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 -- 2.56.0