X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/ebd71fa45bb0538e65e3106de57a04ae6c70abae..079b426e4e813191dedbf8ba4aa454adf2f0a46d:/test/mhfixmsg/test-mhfixmsg?ds=sidebyside diff --git a/test/mhfixmsg/test-mhfixmsg b/test/mhfixmsg/test-mhfixmsg index 709a4062..d60b9d76 100755 --- a/test/mhfixmsg/test-mhfixmsg +++ b/test/mhfixmsg/test-mhfixmsg @@ -14,22 +14,30 @@ fi . "${srcdir}/test/post/test-post-common.sh" - expected="$MH_TEST_DIR/test-mhfixmsg$$.expected" expected_err="$MH_TEST_DIR/test-mhfixmsg$$.expected_err" actual="$MH_TEST_DIR/test-mhfixmsg$$.actual" actual_err="$MH_TEST_DIR/test-mhfixmsg$$.actual_err" -set +e +#### Make sure that html-to-text conversion is what we expect. +LC_ALL=en_US.UTF-8; export LC_ALL + if grep mhfixmsg-format-text/html "${MH_TEST_DIR}/Mail/mhn.defaults" \ >/dev/null; then can_reformat_texthtml=1 + if grep 'mhfixmsg-format-text/html.*w3m' "${MH_TEST_DIR}/Mail/mhn.defaults" \ + >/dev/null; then + #### w3m uses $HOME/.w3m/, and creates it if it doesn't exist. To + #### support testing with non-writeable $HOME, and to not leave + #### relics from this test if it is writeable but doesn't already + #### have a .w3m, and to not depend on whatever is in that if it + #### does already exist, overwrite $HOME if using w3m. + HOME="$MHTMPDIR"; export HOME + fi else - echo "$0: skipping -reformat check because - mhfixmsg-format-text/html is not available" + echo "$0: skipping -reformat check because no text browser was found" can_reformat_texthtml=0 fi -set -e # check -help @@ -39,8 +47,9 @@ Usage: mhfixmsg [+folder] [msgs] [switches] switches are: -decodetext 8bit|7bit -nodecodetext - -[no]textcodeset + -[no]textcharset -[no]reformat + -[no]replacetextplain -[no]fixboundary -[no]fixcte -file file @@ -52,7 +61,7 @@ Usage: mhfixmsg [+folder] [msgs] [switches] -help EOF -mhfixmsg -help >"$actual" 2>&1 +run_prog mhfixmsg -help >"$actual" 2>&1 check "$expected" "$actual" @@ -177,7 +186,7 @@ check "$MH_TEST_DIR"/Mail/inbox/,11 "$MH_TEST_DIR"/Mail/inbox/11.original # check -reformat (enabled by default): addition of text/plain part # to solitary text/html part # -cat >"$expected" <"$expected" <"$expected.err" - #### lynx inserts multiple blank lines, so use uniq to squeeze them. - mhfixmsg last -outfile - -verbose 2>"$actual.err" | uniq >"$actual" - check "$expected" "$actual" + #### lynx inserts multiple blank lines, so squeeze them. + run_prog mhfixmsg last -outfile - -verbose 2>"$actual.err" | \ + squeeze_lines >"$actual" + check "$expected" "$actual" 'ignore space' check "$expected.err" "$actual.err" +else + rm -f "$expected" fi +# check implicit -file with absolute pathname +run_test "mhfixmsg `mhpath last` -outfile /dev/null" '' + + # check handling of boundary string that appears in message body # -cat >"$expected" <"$expected" <"$expected.err" - #### lynx inserts multiple blank lines, so use uniq to squeeze them. - mhfixmsg last -outfile - -verbose 2>"$actual.err" | uniq >"$actual" - check "$expected" "$actual" + #### lynx inserts multiple blank lines, so squeeze them. + run_prog mhfixmsg last -outfile - -verbose 2>"$actual.err" | \ + squeeze_lines >"$actual" + check "$expected" "$actual" 'ignore space' check "$expected.err" "$actual.err" +else + rm -f "$expected" fi # check -nodecode -cat >"$expected" <"$expected" <"$expected.err" - #### lynx inserts multiple blank lines, so use uniq to squeeze them. - mhfixmsg last -nodecode -outfile - -verbose 2>"$actual.err" | uniq >"$actual" - check "$expected" "$actual" + #### lynx inserts multiple blank lines, so squeeze them. + run_prog mhfixmsg last -nodecode -outfile - -verbose 2>"$actual.err" | \ + squeeze_lines >"$actual" + check "$expected" "$actual" 'ignore space' check "$expected.err" "$actual.err" +else + rm -f "$expected" fi @@ -409,8 +431,7 @@ This is a text/plain part. ------- =_aaaaaaaaaa0-- EOF -msgfile=`mhpath new` -cat >$msgfile <`mhpath new` <$msgfile <`mhpath new` <$msgfile <`mhpath new` <"$expected" <<'EOF' +MIME-Version: 1.0 +Date: Thu, 11 Apr 2013 02:47:08 -0700 +To: +From: +Subject: body requires binary encoding +Content-Type: multipart/alternative; boundary="----=_nmh-multipart" + +------=_nmh-multipart +Content-Type: text/plain; charset="ISO-8859-1" +Content-Transfer-Encoding: 8bit + +Mile $0.00 +Time $78.71 +State Tax $5.90 +Vehicle License Fee $1.84 +State Txn Tax $6.00 + +------=_nmh-multipart +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: quoted-printable + + +EOF + +cat >`mhpath new` <<'EOF' +MIME-Version: 1.0 +Content-Type: text/html; charset="ISO-8859-1" +Content-Transfer-Encoding: quoted-printable +Date: Thu, 11 Apr 2013 02:47:08 -0700 +To: +From: +Subject: body requires binary encoding + + + +  + + + +EOF + +if [ $can_reformat_texthtml -eq 1 ]; then + #### lynx inserts multiple blank lines, so squeeze them. + #### Truncate to avoid comparing the html portion because it can + #### get reformatted. + run_prog mhfixmsg last -outfile - | squeeze_lines | head -22 >"$actual" + check "$expected" "$actual" 'ignore space' +else + cp -p "$MH_TEST_DIR/Mail/inbox/15" "$MH_TEST_DIR/Mail/inbox/15.backup" + rm -f "$expected" +fi + + +# check -textcharset # Also checks preservation of attributes after one (charset) that is # modified. cat >"$expected" <$msgfile <`mhpath new` <"$actual.err" -if grep "mhfixmsg: Can't convert .* to .* without iconv" "$actual.err" \ - >/dev/null; then - echo skipping -textcodeset check because nmh was built without iconv - set +e - rm -f "$expected" "$actual" "$actual.err" -else - set +e +if test "$ICONV_ENABLED" -eq 1; then + run_prog mhfixmsg last -textcharset utf-8 -outfile "$actual" 2>&1 check "$expected" "$actual" - rm "$actual.err" +else + echo "$0: skipping -textcharset check because nmh was built without iconv" + rm -f "$expected" fi @@ -664,11 +749,11 @@ EOF cp -p `mhpath last` `mhpath new` run_test 'mhfixmsg last -nofixboundary' '' -check "$MH_TEST_DIR"/Mail/inbox/16 "$MH_TEST_DIR"/Mail/inbox/17 'keep first' +check "$MH_TEST_DIR"/Mail/inbox/17 "$MH_TEST_DIR"/Mail/inbox/18 'keep first' # check that message is not output when fed through stdin -mhfixmsg -file - -verbose <`mhpath last` >"$actual" 2>"$actual.err" +run_prog mhfixmsg -file - -verbose <`mhpath last` >"$actual" 2>"$actual.err" check "$expected" "$actual" if grep "mhfixmsg: $MH_TEST_DIR/Mail/.*, fix multipart boundary" \ "$actual.err" >/dev/null; then @@ -685,7 +770,7 @@ fi cat >"$expected" < @@ -703,12 +788,12 @@ The boundaries of this part don't match the header boundary. EOF run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \ - "mhfixmsg: 16, fix multipart boundary" + "mhfixmsg: 17, fix multipart boundary" check "$expected" "$actual" # check that text/plain part is added to lone text/html in multipart/related -cat >"$expected" <"$expected" <"$actual" - check "$expected" "$actual" + #### lynx inserts multiple blank lines, so squeeze them. + run_prog mhfixmsg last -outfile - | squeeze_lines >"$actual" + check "$expected" "$actual" 'ignore space' else rm -f "$expected" fi + # check handling of rfc822 message type cat >"$expected" < @@ -846,30 +932,162 @@ run_test 'mhfixmsg last -outfile '"$actual" '' check "$expected" "$actual" +# check stripping of CRs from ASCII text context +cat >"$expected" <`mhpath new` <<'EOF' +MIME-Version: 1.0 +From: sender@example.com +To: recipient@example.com +Subject: message with CR's +Date: Mon, 29 Apr 2013 11:51:45 -0400 + +There are two CR-LF pairs at the end of this sentence. + +EOF + +run_prog mhfixmsg last -outfile "$actual" +check "$expected" "$actual" + + +# check -replacetextplain +prepare_space >"$expected" < +eticket + + + Yes, the text/plain part really was empty. + + + +------=_Part_876302-- +EOF + +cat >`mhpath new` <<'EOF' +To: recipient@example.com +From: sender@example.com +Subject: mhfixmsg replacement of bad text/plain part test +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary="----=_Part_876302" + +------=_Part_876302 +Content-Type: text/plain; charset="iso-8859-15" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + + + +------=_Part_876302 +Content-Type: text/html; charset="UTF-8" +Content-Transfer-Encoding: 8bit +Content-Disposition: inline + + +eticket + + + Yes, the text/plain part really was empty. + + + +------=_Part_876302-- +EOF + +if [ $can_reformat_texthtml -eq 1 ]; then + #### lynx inserts multiple blank lines, so squeeze them. + run_prog mhfixmsg last -replacetextplain -outfile - | \ + squeeze_lines > "$actual" + check "$expected" "$actual" 'ignore space' +else + rm -f "$expected" +fi + + +# check -noreplacetextplain +cat >"$expected" < +eticket + + + Yes, the text/plain part really was empty. + + + +------=_Part_876302-- +EOF + +run_prog mhfixmsg last -replacetextplain -noreplacetextplain -outfile "$actual" +check "$expected" "$actual" + + # check rmmproc cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF' mv "$1" "$1.backup" EOF chmod a+x "${MH_TEST_DIR}/Mail/rmmproc" echo "rmmproc: ${MH_TEST_DIR}/Mail/rmmproc" >>"$MH" -cp "${MH_TEST_DIR}/Mail/inbox/14" "${MH_TEST_DIR}/Mail/inbox/14.original" +cp "${MH_TEST_DIR}/Mail/inbox/15" "${MH_TEST_DIR}/Mail/inbox/15.original" -run_test 'mhfixmsg 14' '' -check "${MH_TEST_DIR}/Mail/inbox/14.backup" \ - "${MH_TEST_DIR}/Mail/inbox/14.original" +run_test 'mhfixmsg 15' '' +check "${MH_TEST_DIR}/Mail/inbox/15.backup" \ + "${MH_TEST_DIR}/Mail/inbox/15.original" # check -normmproc -cp "${MH_TEST_DIR}/Mail/inbox/18" "${MH_TEST_DIR}/Mail/inbox/19" +cp "${MH_TEST_DIR}/Mail/inbox/19" "${MH_TEST_DIR}/Mail/inbox/20" -run_test 'mhfixmsg 18 -normmproc' -check "${MH_TEST_DIR}/Mail/inbox/19" \ - "${MH_TEST_DIR}/Mail/inbox/,18" 'keep first' +run_test 'mhfixmsg 19 -normmproc' +check "${MH_TEST_DIR}/Mail/inbox/20" \ + "${MH_TEST_DIR}/Mail/inbox/,19" 'keep first' # check -rmmproc -run_test 'mhfixmsg 19 -rmmproc true' -if test -f '${MH_TEST_DIR}/Mail/inbox/19.backup'; then +run_test 'mhfixmsg 20 -rmmproc true' +if test -f '${MH_TEST_DIR}/Mail/inbox/20.backup'; then echo check of mhfixmsg -rmmproc FAILED, should not have created backup file failed=`expr ${failed:-0} + 1` fi
Mile $0.00
Time$78.71
<= +font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D"2">State Tax $5.90
Vehicle License Fee $1.84
State Txn Tax $6.00