X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5682db8c0089c419257c612b167771e1685f683e..b0aa8cdb1c264e42d4931ca24968689c73381278:/test/mhfixmsg/test-mhfixmsg diff --git a/test/mhfixmsg/test-mhfixmsg b/test/mhfixmsg/test-mhfixmsg index 522c0b89..8d7a3a85 100755 --- a/test/mhfixmsg/test-mhfixmsg +++ b/test/mhfixmsg/test-mhfixmsg @@ -17,8 +17,7 @@ fi setup_test #### Make sure that html-to-text conversion is what we expect. -require_locale en_US.utf-8 en_US.utf8 -LC_ALL=en_US.UTF-8; export LC_ALL +require_locale en_US.UTF-8 en_US.UTF8 en_US.utf-8 en_US.utf8 expected="$MH_TEST_DIR/test-mhfixmsg$$.expected" expected_err="$MH_TEST_DIR/test-mhfixmsg$$.expected_err" @@ -46,12 +45,14 @@ fi # check -help +start_test "-help" cat >"$expected" <"$actual" 2>&1 +#### Skip nmh intro text. +run_prog mhfixmsg -help | sed '/^$/,$d' >"$actual" 2>&1 check "$expected" "$actual" # check -version +start_test "-version" case `mhfixmsg -version` in mhfixmsg\ --*) ;; *) printf '%s: mhfixmsg -version generated unexpected output\n' "$0" >&2 @@ -82,12 +85,14 @@ esac # check that non-MIME messages aren't modified # check -outfile +start_test "that non-MIME messages aren't modified, and -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 +start_test "that non-MIME messages with no bodies aren't modified, and -outfile" cat >`mhpath new` < To: Some User @@ -101,6 +106,7 @@ check "`mhpath last`" "$actual" # check -nofixcte +start_test "-nofixcte" cat >"$MH_TEST_DIR"/Mail/inbox/11 <"$expected" </dev/null run_test 'mhfixmsg' '' @@ -182,6 +190,7 @@ check "$MH_TEST_DIR"/Mail/inbox/,11 "$MH_TEST_DIR"/Mail/inbox/11.original # check backup with -file +start_test "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 '' @@ -191,7 +200,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 -# +start_test "-reformat (enabled by default): addition of text/plain part" prepare_space >"$expected" < @@ -265,11 +274,12 @@ fi # check implicit -file with absolute pathname +start_test "implicit -file with absolute pathname" run_test "mhfixmsg `mhpath last` -outfile /dev/null" '' # check handling of boundary string that appears in message body -# +start_test "handling of boundary string that appears in message body" prepare_space >"$expected" < @@ -347,6 +357,7 @@ fi # check -nodecode +start_test "-nodecode" prepare_space >"$expected" <"$expected" <$expected <`mhpath new` <998 characters) text +start_test "for successful decode of a different part with attempted -decodetext" +cat >$expected <`mhpath new` <998 characters) text +start_test "for successful decode of a different part with -decodetext of binary" +cat >$expected <long lineThis line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. This line is greater than 998 characters in length, so this part should not be decoded. + +------- =_aaaaaaaaaa0-- +EOF + +run_prog mhfixmsg -noreformat -decodetext binary last +check `mhpath last` "$expected" + + +# check -decodetext of binary (containing ASCII NUL) text +start_test "-decodetext of binary (containing ASCII NUL) text" +printf "%s\275\262=\274\000%s" "To: recipient@example.com From: sender@example.com Subject: mhfixmsg binary decode test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=\"----- =_aaaaaaaaaa0\" +Content-Transfer-Encoding: binary ------- =_aaaaaaaaaa0 -Content-Type: text/plain; charset=\"iso-8859-1\"; name=\"nul+square.txt\" +Content-Type: text/plain; charset=\"UTF-8\"; name=\"nul+square.txt\" Content-Transfer-Encoding: binary " " ------- =_aaaaaaaaaa0-- " >"$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 +mhfixmsg last -decodetext binary -outfile "$actual" +check "$expected" "$actual" # check that -reformat succeeds when decode of binary text fails +start_test "that -reformat succeeds when decode of binary text fails" prepare_space >"$expected" <<'EOF' MIME-Version: 1.0 Date: Thu, 11 Apr 2013 02:47:08 -0700 @@ -617,7 +751,7 @@ Content-Type: multipart/alternative; boundary="----=_nmh-multipart" ------=_nmh-multipart Content-Type: text/plain; charset="ISO-8859-1" -Content-Transfer-Encoding: 8bit +Content-Transfer-Encoding: 7bit Mile $0.00 Time $78.71 @@ -681,12 +815,14 @@ fi # check -textcharset # Also checks preservation of attributes after one (charset) that is # modified. +start_test "-textcharset" cat >"$expected" <`mhpath new` <"$expected" <"$actual" 2>"$actual.err" check "$expected" "$actual" if grep "mhfixmsg: $MH_TEST_DIR/Mail/.*, fix multipart boundary" \ @@ -771,6 +909,7 @@ fi # check fixup of erroneous boundary in multipart (-fixboundary, # enabled by default) # check -verbose +start_test "fixup of erroneous boundary in multipart (-fixboundary, enabled by default)" 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 boundary below doesn't match the header boundary. + +------=_ +NextPart_000_1781A1A_01CC1147.81EBA8D4-- +EOF + +cp -p `mhpath last` "$expected" +run_test "mhfixmsg last -outfile $actual" '' check "$expected" "$actual" # check that text/plain part is not added to text/html in multipart/related # when it shouldn't be +start_test "that text/plain part is not added to text/html in multipart/related when it shouldn't be" cat >`mhpath new` <"$expected" <"$expected" < To: Some User @@ -963,7 +1133,8 @@ run_test 'mhfixmsg last -outfile '"$actual" '' check "$expected" "$actual" -# check stripping of CRs from ASCII text context +# check not stripping of CRs from ASCII text context (default) +start_test "not stripping of CRs from ASCII text context (default)" cat >"$expected" <`mhpath new` <<'EOF' @@ -990,7 +1161,36 @@ run_prog mhfixmsg last -outfile "$actual" check "$expected" "$actual" +# check stripping of CRs from ASCII text context +start_test "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 were two CR-LF pairs at the end of this sentence. + +EOF + +run_prog mhfixmsg last -outfile "$actual" -nocrlflinebreaks +check "$expected" "$actual" + + # check -replacetextplain +start_test "-replacetextplain" prepare_space >"$expected" < @@ -1036,7 +1235,6 @@ Content-Disposition: inline ------=_Part_876302 Content-Type: text/html; charset="UTF-8" -Content-Transfer-Encoding: 8bit Content-Disposition: inline @@ -1061,6 +1259,7 @@ fi # check -noreplacetextplain +start_test "-noreplacetextplain" cat >"$expected" < @@ -1096,6 +1294,7 @@ check "$expected" "$actual" # check removal of extraneous trailing semicolon from header parameter list +start_test "removal of extraneous trailing semicolon from header parameter list" cat >"$expected" <"$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/15" "${MH_TEST_DIR}/Mail/inbox/15.original" +cp "${MH_TEST_DIR}/Mail/inbox/16" "${MH_TEST_DIR}/Mail/inbox/16.original" -run_test 'mhfixmsg 15' '' -check "${MH_TEST_DIR}/Mail/inbox/15.backup" \ - "${MH_TEST_DIR}/Mail/inbox/15.original" +run_test 'mhfixmsg 16' '' +check "${MH_TEST_DIR}/Mail/inbox/16.backup" \ + "${MH_TEST_DIR}/Mail/inbox/16.original" # check -normmproc -cp "${MH_TEST_DIR}/Mail/inbox/19" "${MH_TEST_DIR}/Mail/inbox/20" +start_test "-normmproc" +cp "${MH_TEST_DIR}/Mail/inbox/21" "${MH_TEST_DIR}/Mail/inbox/22" -run_test 'mhfixmsg 19 -normmproc' -check "${MH_TEST_DIR}/Mail/inbox/20" \ - "${MH_TEST_DIR}/Mail/inbox/,19" 'keep first' +run_test 'mhfixmsg 21 -normmproc' +check "${MH_TEST_DIR}/Mail/inbox/22" \ + "${MH_TEST_DIR}/Mail/inbox/,21" 'keep first' # check -rmmproc -run_test 'mhfixmsg 20 -rmmproc true' -if test -f '${MH_TEST_DIR}/Mail/inbox/20.backup'; then +start_test "-rmmproc" +run_test 'mhfixmsg 21 -rmmproc true' +if test -f '${MH_TEST_DIR}/Mail/inbox/22.backup'; then echo check of mhfixmsg -rmmproc FAILED, should not have created backup file failed=`expr ${failed:-0} + 1` fi # check -fixtype +start_test "-fixtype" cat >"$expected" <$expected < - This is the text/html part. + This was the text/html part. @@ -1258,20 +1462,21 @@ Content-Transfer-Encoding: quoted-printable This is the text/plain part. ------- =_aaaaaaaaaa0 -Content-Type: text/plain; charset="iso-8859-1"; name="test2.txt" +Content-Type: text/html; charset="iso-8859-1"; name="test2.txt" Content-Disposition: attachment; filename="test2.txt" Content-Transfer-Encoding: base64 -PGh0bWw+CjxoZWFkPgogICAgVGhpcyBpcyB0aGUgdGV4dC9odG1sIHBhcnQuCjwvaGVhZD4KPC9i -b2R5Pgo8L2h0bWw+Cg== +PGh0bWw+CjxoZWFkPgogICAgVGhpcyB3YXMgdGhlIHRleHQvaHRtbCBwYXJ0Lgo8L2hlYWQ+Cjwv +Ym9keT4KPC9odG1sPgo= ------- =_aaaaaaaaaa0-- EOF -run_prog mhfixmsg last -outfile "$actual" +run_prog mhfixmsg last -outfile "$actual" -noreformat check "$expected" "$actual" # check -decodetypes text/plain +start_test "-decodetypes text/plain" cat >$expected <`mhpath new` <$expected <`mhpath new` <$expected <`mhpath new` <"$expected.err" <`mhpath new` <"$actual.err" +set -e +#### Expected output is identical to the input message. +check `mhpath last` "$actual" 'keep first' +check "$expected.err" "$actual.err" + + +# check that input is passed through to output when there's a parse error +# (the charset string is missing its closing quote) with -outfile, and +# input from stdin. Don't check err output, because it contains the name +# of a tmp file. It's similar to that of the previous check. +start_test "that input is passed through to output when there's a parse error" +set +e +run_prog mhfixmsg -file - -outfile - <`mhpath last` >"$actual" 2>/dev/null +set -e +#### Expected output is identical to the input message. +check `mhpath last` "$actual" + + +start_test "fix RFC 2047 encoded header parameters" +#### Also, add C-T-E:8bit to the message headers. +cat >"$expected" <`mhpath new` <"$actual" 2>/dev/null check "$expected" "$actual" @@ -1346,5 +1776,5 @@ EOF check "$expected" "$actual" - +finish_test exit $failed