#!/bin/sh ###################################################### # # Test mhfixmsg # ###################################################### set -e if test -z "${MH_OBJ_DIR}"; then srcdir=`dirname $0`/../.. MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR 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 if grep mhfixmsg-format-text/html "${MH_TEST_DIR}/Mail/mhn.defaults" \ >/dev/null; then can_reformat_texthtml=1 else echo "$0: skipping -reformat check because mhfixmsg-format-text/html is not available" can_reformat_texthtml=0 fi set -e # check -help # Verified behavior consistent with compiled sendmail. cat >"$expected" <"$actual" 2>&1 check "$expected" "$actual" # check -version # Verified same behavior as compiled mhfixmsg. case `mhfixmsg -version` in mhfixmsg\ --*) ;; *) printf '%s: mhfixmsg -version generated unexpected output\n' "$0" >&2 failed=`expr ${failed:-0} + 1`;; esac # check that non-MIME messages aren't modified # check -outfile run_test 'mhfixmsg first -outfile '"$actual" '' check "`mhpath first`" "$actual" 'keep first' # check that non-MIME messages with no bodies aren't modified # check -outfile cat >`mhpath new` < To: Some User Date: Fri, 29 Sep 2006 00:00:00 Message-Id: @test.nmh Subject: message with no body EOF run_test 'mhfixmsg last -outfile '"$actual" '' check "`mhpath last`" "$actual" # check -nofixcte cat >"$MH_TEST_DIR"/Mail/inbox/11 <"$expected" </dev/null run_test 'mhfixmsg' '' check "$expected" "$MH_TEST_DIR"/Mail/inbox/11 'keep first' cp "$MH_TEST_DIR"/Mail/inbox/11.original "$MH_TEST_DIR"/Mail/inbox/11 check "$MH_TEST_DIR"/Mail/inbox/,11 "$MH_TEST_DIR"/Mail/inbox/11.original # check backup with -file cp "$MH_TEST_DIR"/Mail/inbox/11 "$MH_TEST_DIR"/Mail/inbox/11.original folder last >/dev/null run_test 'mhfixmsg -file '"$MH_TEST_DIR"/Mail/inbox/11 '' check "$MH_TEST_DIR"/Mail/inbox/11 "$expected" 'keep first' 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" <
Need to go! Need ... to ... go!
------=_nmh-multipart-- EOF cat >"$MH_TEST_DIR"/Mail/inbox/12 <
Need to go! Need ... to ... go!
EOF if [ $can_reformat_texthtml -eq 1 ]; then printf '%s\n' "mhfixmsg: 12, insert text/plain part mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \ >"$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" check "$expected.err" "$actual.err" fi # check handling of boundary string that appears in message body # cat >"$expected" < ------=_nmh-multipart
------=_nmh-multipart-1
------=_nmh-multipart-2
------=_nmh-multipart-3-- EOF cat >"$MH_TEST_DIR"/Mail/inbox/12 < ------=3D_nmh-multipart
------=3D_nmh-multipart-1
------=3D_nmh-multipart-2
EOF if [ $can_reformat_texthtml -eq 1 ]; then printf '%s\n' "mhfixmsg: 12, insert text/plain part mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \ >"$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" check "$expected.err" "$actual.err" fi # check -nodecode cat >"$expected" <
Need to go! Need ... to ... go!
------=_nmh-multipart-- EOF cat >"$MH_TEST_DIR"/Mail/inbox/12 <
Need to go! Need ... to ... go!
EOF if [ $can_reformat_texthtml -eq 1 ]; then printf '%s\n' 'mhfixmsg: 12, insert text/plain part' >"$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" check "$expected.err" "$actual.err" fi # check -decode (enabled by default) cat >"$expected" <$msgfile <$expected <$msgfile <$msgfile <"$expected" ## output_content() in mhoutsbr.c can't handle binary content. ## mhfixmsg last -decodetext binary -outfile "$actual" ## check "$expected" "$actual" rm -f "$expected" rmm last # check -textcodeset # Also checks preservation of attributes after one (charset) that is # modified. cat >"$expected" <$msgfile <"$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 check "$expected" "$actual" rm "$actual.err" fi # check -nofixboundary cat >"$expected" <`mhpath new` < To: Subject: mhfixmsg bad boundary test This is a multi-part message in MIME format. ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4 Content-Type: text/plain The boundaries of this part don't match the header boundary. ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4-- 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 that message is not output when fed through stdin 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 rm -f "$actual.err" else echo "$0: test failed, output is in $actual.err." failed=`expr ${failed:-0} + 1` fi # check fixup of erroneous boundary in multipart (-fixboundary, # enabled by default) # check -verbose cat >"$expected" < To: Subject: mhfixmsg bad boundary test This is a multi-part message in MIME format. ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4 Content-Type: text/plain The boundaries of this part don't match the header boundary. ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4-- EOF run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \ "mhfixmsg: 16, fix multipart boundary" check "$expected" "$actual" # check that text/plain part is added to lone text/html in multipart/related cat >"$expected" < HTML Content This is the real content. ------=_nmh-multipart1-- ------=_Part_90310_101292502.1 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Your email client does not support HTML messages ------=_Part_90310_101292502.1-- EOF cat >`mhpath new` < HTML Content This is the real content. ------=_Part_90310_101292502.1 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Your email client does not support HTML messages ------=_Part_90310_101292502.1-- EOF if [ $can_reformat_texthtml -eq 1 ]; then #### lynx inserts multiple blank lines, so use uniq to squeeze them. mhfixmsg last -outfile - | uniq >"$actual" check "$expected" "$actual" else rm -f "$expected" fi # check handling of rfc822 message type cat >"$expected" < To: Some User Date: Fri, 29 Sep 2006 00:00:00 Message-Id: @test.nmh Subject: message with message/rfc822 attachment MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0" and some garbage before the attachment ------- =_aaaaaaaaaa0 Content-Type: message/rfc822; name="1552"; charset="us-ascii" Content-Description: 1552 Content-Disposition: attachment; filename="1552" From: Test To: Date: Thu, 28 Sep 2006 00:00:00 Message-Id: @test.nmh Subject: message/rfc822 attachment This is an RFC-822 message. ------- =_aaaaaaaaaa0-- and some garbage at the end EOF cat >`mhpath new` < To: Some User Date: Fri, 29 Sep 2006 00:00:00 Message-Id: @test.nmh Subject: message with message/rfc822 attachment MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaa0" and some garbage before the attachment ------- =_aaaaaaaaaa0 Content-Type: message/rfc822; name="1552"; charset="us-ascii" Content-Description: 1552 Content-Disposition: attachment; filename="1552" From: Test To: Date: Thu, 28 Sep 2006 00:00:00 Message-Id: @test.nmh Subject: message/rfc822 attachment This is an RFC-822 message. ------- =_aaaaaaaaaa0-- and some garbage at the end EOF run_test 'mhfixmsg last -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" run_test 'mhfixmsg 14' '' check "${MH_TEST_DIR}/Mail/inbox/14.backup" \ "${MH_TEST_DIR}/Mail/inbox/14.original" # make sure there are no tmp files left over find "$MH_TEST_DIR/Mail" \( -name 'mhfix*' -o -name ',mhfix*' \) -print \ >"$actual" cat >"$expected" <