]> diplodocus.org Git - nmh/blobdiff - test/mhfixmsg/test-mhfixmsg
mhmisc.c: Indent with "%*s" rather than "%*.*s".
[nmh] / test / mhfixmsg / test-mhfixmsg
index f7f47b9046ab1a664c9e084af46235d3b1784f85..f741d9c6823f2a276f145e9087340b3570fb87ea 100755 (executable)
@@ -16,9 +16,10 @@ fi
 
 setup_test
 
 
 setup_test
 
+check_exit '-eq 1' mhfixmsg -
+
 #### Make sure that html-to-text conversion is what we expect.
 #### 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"
 
 expected="$MH_TEST_DIR/test-mhfixmsg$$.expected"
 expected_err="$MH_TEST_DIR/test-mhfixmsg$$.expected_err"
@@ -27,8 +28,7 @@ actual_err="$MH_TEST_DIR/test-mhfixmsg$$.actual_err"
 
 mhn_defaults="$MH_INST_DIR${nmhetcdir}/mhn.defaults"
 
 
 mhn_defaults="$MH_INST_DIR${nmhetcdir}/mhn.defaults"
 
-if grep mhfixmsg-format-text/html "${mhn_defaults}" \
-  >/dev/null; then
+if grep mhfixmsg-format-text/html "${mhn_defaults}" >/dev/null; then
   can_reformat_texthtml=1
   if grep 'mhfixmsg-format-text/html.*w3m' "${mhn_defaults}" \
     >/dev/null; then
   can_reformat_texthtml=1
   if grep 'mhfixmsg-format-text/html.*w3m' "${mhn_defaults}" \
     >/dev/null; then
@@ -46,11 +46,14 @@ fi
 
 
 # check -help
 
 
 # check -help
+start_test "-help"
 cat >"$expected" <<EOF
 Usage: mhfixmsg [+folder] [msgs] [switches]
   switches are:
 cat >"$expected" <<EOF
 Usage: mhfixmsg [+folder] [msgs] [switches]
   switches are:
-  -decodetext 8bit|7bit
+  -decodetext 8bit|7bit|binary
   -nodecodetext
   -nodecodetext
+  -decodetypes
+  -[no]crlflinebreaks
   -[no]textcharset
   -[no]reformat
   -[no]replacetextplain
   -[no]textcharset
   -[no]reformat
   -[no]replacetextplain
@@ -67,11 +70,13 @@ Usage: mhfixmsg [+folder] [msgs] [switches]
   -help
 EOF
 
   -help
 EOF
 
-run_prog mhfixmsg -help >"$actual" 2>&1
+#### Skip nmh intro text.
+run_prog mhfixmsg -help | sed '/^$/,$d' >"$actual" 2>&1
 check "$expected" "$actual"
 
 
 # check -version
 check "$expected" "$actual"
 
 
 # check -version
+start_test "-version"
 case `mhfixmsg -version` in
   mhfixmsg\ --*) ;;
   *) printf '%s: mhfixmsg -version generated unexpected output\n' "$0" >&2
 case `mhfixmsg -version` in
   mhfixmsg\ --*) ;;
   *) printf '%s: mhfixmsg -version generated unexpected output\n' "$0" >&2
@@ -81,13 +86,15 @@ esac
 
 # check that non-MIME messages aren't modified
 # check -outfile
 
 # check that non-MIME messages aren't modified
 # check -outfile
+start_test "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
 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` <<EOF
+start_test "non-MIME messages with no bodies aren't modified, and -outfile"
+cat >"`mhpath new`" <<EOF
 From: Test <test@example.com>
 To: Some User <user@example.com>
 Date: Fri, 29 Sep 2006 00:00:00
 From: Test <test@example.com>
 To: Some User <user@example.com>
 Date: Fri, 29 Sep 2006 00:00:00
@@ -100,7 +107,8 @@ check "`mhpath last`" "$actual"
 
 
 # check -nofixcte
 
 
 # check -nofixcte
-cat >"$MH_TEST_DIR"/Mail/inbox/11 <<EOF
+start_test "-nofixcte"
+cat >"`mhpath new`" <<EOF
 From: Anon
 To: Mailinglist
 Subject: =?ISO-8859-15?Q?Re=3A_H=E5lla_linuxsystem_uppdaterade?=
 From: Anon
 To: Mailinglist
 Subject: =?ISO-8859-15?Q?Re=3A_H=E5lla_linuxsystem_uppdaterade?=
@@ -136,6 +144,7 @@ check "$MH_TEST_DIR"/Mail/inbox/11 "$MH_TEST_DIR"/Mail/inbox/12 'keep first'
 
 # check -fixcte (enabled by default):  fixup of erroneous C-T-E in multipart
 # check -verbose
 
 # check -fixcte (enabled by default):  fixup of erroneous C-T-E in multipart
 # check -verbose
+start_test "-fixcte (enabled by default):  fixup of erroneous C-T-E in multipart, and -verbose"
 cat >"$expected" <<EOF
 From: Anon
 To: Mailinglist
 cat >"$expected" <<EOF
 From: Anon
 To: Mailinglist
@@ -172,6 +181,7 @@ check "$expected" "$actual" 'keep first'
 
 
 # check with no options:  checks backup
 
 
 # check with no options:  checks backup
+start_test "with no options:  checks backup"
 cp "$MH_TEST_DIR"/Mail/inbox/11 "$MH_TEST_DIR"/Mail/inbox/11.original
 folder last >/dev/null
 run_test 'mhfixmsg' ''
 cp "$MH_TEST_DIR"/Mail/inbox/11 "$MH_TEST_DIR"/Mail/inbox/11.original
 folder last >/dev/null
 run_test 'mhfixmsg' ''
@@ -181,6 +191,7 @@ check "$MH_TEST_DIR"/Mail/inbox/,11 "$MH_TEST_DIR"/Mail/inbox/11.original
 
 
 # check backup with -file
 
 
 # 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 ''
 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 ''
@@ -188,9 +199,15 @@ 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 "$MH_TEST_DIR"/Mail/inbox/,11 "$MH_TEST_DIR"/Mail/inbox/11.original
 
 
+# check -file with directory
+start_test "-file with directory"
+run_test 'mhfixmsg -file /tmp' 'mhfixmsg: /tmp is a directory
+mhfixmsg: unable to parse message from file /tmp'
+
+
 # check -reformat (enabled by default):  addition of text/plain part
 # to solitary text/html part
 # 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" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 prepare_space >"$expected" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
@@ -201,13 +218,13 @@ Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="Windows-1252"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="Windows-1252"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 Need to go! Need ... to ... go!
 
 ------=_nmh-multipart
 Content-Type: text/html; charset="Windows-1252"
 
 Need to go! Need ... to ... go!
 
 ------=_nmh-multipart
 Content-Type: text/html; charset="Windows-1252"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 <html>
 <head>
 
 <html>
 <head>
@@ -224,7 +241,7 @@ Content-Transfer-Encoding: 8bit
 ------=_nmh-multipart--
 EOF
 
 ------=_nmh-multipart--
 EOF
 
-cat >"$MH_TEST_DIR"/Mail/inbox/12 <<EOF
+cat >"`mhpath new`" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
@@ -264,11 +281,12 @@ fi
 
 
 # check implicit -file with absolute pathname
 
 
 # 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
 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" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 prepare_space >"$expected" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
@@ -279,7 +297,7 @@ Content-Type: multipart/alternative; boundary="----=_nmh-multipart-3"
 
 ------=_nmh-multipart-3
 Content-Type: text/plain; charset="Windows-1252"
 
 ------=_nmh-multipart-3
 Content-Type: text/plain; charset="Windows-1252"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 ------=_nmh-multipart
 ------=_nmh-multipart-1
 
 ------=_nmh-multipart
 ------=_nmh-multipart-1
@@ -287,7 +305,7 @@ Content-Transfer-Encoding: 8bit
 
 ------=_nmh-multipart-3
 Content-Type: text/html; charset="Windows-1252"
 
 ------=_nmh-multipart-3
 Content-Type: text/html; charset="Windows-1252"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 <html>
 <head>
 
 <html>
 <head>
@@ -305,7 +323,7 @@ Content-Transfer-Encoding: 8bit
 ------=_nmh-multipart-3--
 EOF
 
 ------=_nmh-multipart-3--
 EOF
 
-cat >"$MH_TEST_DIR"/Mail/inbox/12 <<EOF
+cat >"`mhpath last`" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
@@ -346,6 +364,7 @@ fi
 
 
 # check -nodecode
 
 
 # check -nodecode
+start_test "-nodecode"
 prepare_space >"$expected" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 prepare_space >"$expected" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
@@ -356,7 +375,7 @@ Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="Windows-1252"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="Windows-1252"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 Need to go! Need ... to ... go!
 
 
 Need to go! Need ... to ... go!
 
@@ -418,28 +437,29 @@ else
 fi
 
 
 fi
 
 
-# check -decode (enabled by default)
+# check -decodetext (enabled by default)
+start_test "-decodetext (enabled by default)"
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
-Subject: mhfixmsg decode test
+Subject: mhfixmsg decode test 1
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
 Content-Disposition: attachment; filename="test4.txt"
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
 Content-Disposition: attachment; filename="test4.txt"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 This is a text/plain part.
 
 ------- =_aaaaaaaaaa0--
 EOF
 
 
 This is a text/plain part.
 
 ------- =_aaaaaaaaaa0--
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 From: sender@example.com
 To: recipient@example.com
 From: sender@example.com
-Subject: mhfixmsg decode test
+Subject: mhfixmsg decode test 1
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
@@ -457,7 +477,8 @@ run_prog mhfixmsg last -outfile "$actual"
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
 
-# check -decode with more complicated content structure
+# check -decodetext with more complicated content structure
+start_test "-decodetext with more complicated content structure"
 cat >$expected <<EOF
 To: recipient@example.com
 From: sender@example.com
 cat >$expected <<EOF
 To: recipient@example.com
 From: sender@example.com
@@ -485,7 +506,7 @@ This is additional content after the last subpart of the multipart.
 Content-Type: text/plain; charset="iso-8859-1"
 Content-Disposition: attachment; filename="test2.txt"
 Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
 Content-Type: text/plain; charset="iso-8859-1"
 Content-Disposition: attachment; filename="test2.txt"
 Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 This is the second text/plain part.
 
 
 This is the second text/plain part.
 
@@ -498,7 +519,7 @@ This is the third text/plain part.
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
 Content-Disposition: attachment; filename="test4.txt"
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="iso-8859-1"; name="test4.txt"
 Content-Disposition: attachment; filename="test4.txt"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 This is the fourth text/plain part.
 
 
 This is the fourth text/plain part.
 
@@ -507,7 +528,7 @@ This is the fourth text/plain part.
 This is additional content after the last subpart of the multipart.
 EOF
 
 This is additional content after the last subpart of the multipart.
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test 2
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg decode test 2
@@ -559,53 +580,174 @@ run_prog mhfixmsg last -outfile "$actual"
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
 
-# check attempted -decode of binary text
+# check attempted (default, 8 bit) -decodetext of binary text
 #### Generated the encoded text below with:
 #### Generated the encoded text below with:
-####   $ printf '\x0\xbd\xb2=\xbc\n' | base64
-cat >`mhpath new` <<EOF
+####   $ printf '\275\262=\274\000\n' | base64
+start_test "attempted (default, 8 bit) -decodetext of binary text"
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 From: sender@example.com
 To: recipient@example.com
 From: sender@example.com
-Subject: mhfixmsg attempted binary decode test
+Subject: mhfixmsg binary decode test
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
 ------- =_aaaaaaaaaa0
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 
 ------- =_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: base64
 
 Content-Transfer-Encoding: base64
 
-AL2yPbwK
+vbI9vAAK
 
 ------- =_aaaaaaaaaa0--
 EOF
 
 
 ------- =_aaaaaaaaaa0--
 EOF
 
-cp -p `mhpath last` "$expected"
+cp -p "`mhpath last`" "$expected"
 run_prog mhfixmsg last
 run_prog mhfixmsg last
-check `mhpath last` "$expected" 'keep first'
+check "`mhpath last`" "$expected" 'keep first'
 
 
 
 
-# check -decode of binary text
-printf "%s\x0d\xbd\xb2=\xbc%s" "To: recipient@example.com
+# check for successful decode of a different part with attempted -decodetext
+# of binary (>998 characters) text
+start_test "for successful decode of a different part with attempted -decodetext"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg successful decode of text/plain with failed binary decode
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: 7bit
+
+This is a text plain part
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="ascii"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+
+PGh0bWw+PGhlYWQ+PHRpdGxlPmxvbmcgbGluZTwvdGl0bGU+PC9oZWFkPjxib2R5PlRoaXMgbGlu
+ZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBhcnQg
+c2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTggY2hh
+cmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQuICBU
+aGlzIGxpbmUgaXMgZ3JlYXRlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgc28gdGhp
+cyBwYXJ0IHNob3VsZCBub3QgYmUgZGVjb2RlZC4gIFRoaXMgbGluZSBpcyBncmVhdGVyIHRoYW4g
+OTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBhcnQgc2hvdWxkIG5vdCBiZSBkZWNv
+ZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTggY2hhcmFjdGVycyBpbiBsZW5ndGgs
+IHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQuICBUaGlzIGxpbmUgaXMgZ3JlYXRl
+ciB0aGFuIDk5OCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgc28gdGhpcyBwYXJ0IHNob3VsZCBub3Qg
+YmUgZGVjb2RlZC4gIFRoaXMgbGluZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4g
+bGVuZ3RoLCBzbyB0aGlzIHBhcnQgc2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlz
+IGdyZWF0ZXIgdGhhbiA5OTggY2hhcmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91
+bGQgbm90IGJlIGRlY29kZWQuICBUaGlzIGxpbmUgaXMgZ3JlYXRlciB0aGFuIDk5OCBjaGFyYWN0
+ZXJzIGluIGxlbmd0aCwgc28gdGhpcyBwYXJ0IHNob3VsZCBub3QgYmUgZGVjb2RlZC4gIFRoaXMg
+bGluZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBh
+cnQgc2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTgg
+Y2hhcmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQu
+ICA8L2JvZHk+PC9odG1sPg==
+
+------- =_aaaaaaaaaa0--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg successful decode of text/plain with failed binary decode
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: base64
+
+VGhpcyBpcyBhIHRleHQgcGxhaW4gcGFydAo=
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="ascii"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+
+PGh0bWw+PGhlYWQ+PHRpdGxlPmxvbmcgbGluZTwvdGl0bGU+PC9oZWFkPjxib2R5PlRoaXMgbGlu
+ZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBhcnQg
+c2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTggY2hh
+cmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQuICBU
+aGlzIGxpbmUgaXMgZ3JlYXRlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgc28gdGhp
+cyBwYXJ0IHNob3VsZCBub3QgYmUgZGVjb2RlZC4gIFRoaXMgbGluZSBpcyBncmVhdGVyIHRoYW4g
+OTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBhcnQgc2hvdWxkIG5vdCBiZSBkZWNv
+ZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTggY2hhcmFjdGVycyBpbiBsZW5ndGgs
+IHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQuICBUaGlzIGxpbmUgaXMgZ3JlYXRl
+ciB0aGFuIDk5OCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgc28gdGhpcyBwYXJ0IHNob3VsZCBub3Qg
+YmUgZGVjb2RlZC4gIFRoaXMgbGluZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4g
+bGVuZ3RoLCBzbyB0aGlzIHBhcnQgc2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlz
+IGdyZWF0ZXIgdGhhbiA5OTggY2hhcmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91
+bGQgbm90IGJlIGRlY29kZWQuICBUaGlzIGxpbmUgaXMgZ3JlYXRlciB0aGFuIDk5OCBjaGFyYWN0
+ZXJzIGluIGxlbmd0aCwgc28gdGhpcyBwYXJ0IHNob3VsZCBub3QgYmUgZGVjb2RlZC4gIFRoaXMg
+bGluZSBpcyBncmVhdGVyIHRoYW4gOTk4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCBzbyB0aGlzIHBh
+cnQgc2hvdWxkIG5vdCBiZSBkZWNvZGVkLiAgVGhpcyBsaW5lIGlzIGdyZWF0ZXIgdGhhbiA5OTgg
+Y2hhcmFjdGVycyBpbiBsZW5ndGgsIHNvIHRoaXMgcGFydCBzaG91bGQgbm90IGJlIGRlY29kZWQu
+ICA8L2JvZHk+PC9odG1sPg==
+
+------- =_aaaaaaaaaa0--
+EOF
+
+run_prog mhfixmsg -noreformat last
+check "`mhpath last`" "$expected" 'keep first'
+
+
+# check for successful decode of a different part with -decodetext of binary
+# (>998 characters) text
+start_test "for successful decode of a different part with -decodetext of binary"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg successful decode of text/plain with failed binary decode
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+Content-Transfer-Encoding: binary
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: 7bit
+
+This is a text plain part
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="ascii"
+Content-Transfer-Encoding: binary
+Content-Disposition: inline
+
+<html><head><title>long line</title></head><body>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.  This line is greater than 998 characters in length, so this part should not be decoded.  </body></html>
+
+------- =_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\"
 From: sender@example.com
 Subject: mhfixmsg binary decode test
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary=\"----- =_aaaaaaaaaa0\"
+Content-Transfer-Encoding: binary
 
 ------- =_aaaaaaaaaa0
 
 ------- =_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"
 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
 
 
 # check that -reformat succeeds when decode of binary text fails
+start_test "-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
 prepare_space >"$expected" <<'EOF'
 MIME-Version: 1.0
 Date: Thu, 11 Apr 2013 02:47:08 -0700
@@ -616,7 +758,7 @@ Content-Type: multipart/alternative; boundary="----=_nmh-multipart"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="ISO-8859-1"
 
 ------=_nmh-multipart
 Content-Type: text/plain; charset="ISO-8859-1"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 Mile                                     $0.00
 Time                                    $78.71
 
 Mile                                     $0.00
 Time                                    $78.71
@@ -631,7 +773,7 @@ Content-Transfer-Encoding: quoted-printable
 <body>
 EOF
 
 <body>
 EOF
 
-cat >`mhpath new` <<'EOF'
+cat >"`mhpath new`" <<'EOF'
 MIME-Version: 1.0
 Content-Type: text/html; charset="ISO-8859-1"
 Content-Transfer-Encoding: quoted-printable
 MIME-Version: 1.0
 Content-Type: text/html; charset="ISO-8859-1"
 Content-Transfer-Encoding: quoted-printable
@@ -680,12 +822,14 @@ fi
 # check -textcharset
 # Also checks preservation of attributes after one (charset) that is
 # modified.
 # check -textcharset
 # Also checks preservation of attributes after one (charset) that is
 # modified.
+start_test "-textcharset"
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcharset test
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcharset test
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+Content-Transfer-Encoding: 8bit
 
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="utf-8"; name="square.txt"
 
 ------- =_aaaaaaaaaa0
 Content-Type: text/plain; charset="utf-8"; name="square.txt"
@@ -698,8 +842,8 @@ Content-Transfer-Encoding: 8bit
 EOF
 
 #### Generated the encoded text below with:
 EOF
 
 #### Generated the encoded text below with:
-####   $ printf '\xbd\xb2=\xbc\n' | base64
-cat >`mhpath new` <<EOF
+####   $ printf '\275\262=\274\n' | base64
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcharset test
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg textcharset test
@@ -726,10 +870,11 @@ fi
 
 
 # check -nofixboundary
 
 
 # check -nofixboundary
+start_test "-nofixboundary"
 cat >"$expected" <<EOF
 EOF
 
 cat >"$expected" <<EOF
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 Date: Fri, 13 May 2011 08:21:12 -0500
 Content-Type: multipart/alternative;
         boundary="----=_NextPart_000_1781A17_01CC1147.81E9467A"
 Date: Fri, 13 May 2011 08:21:12 -0500
 Content-Type: multipart/alternative;
         boundary="----=_NextPart_000_1781A17_01CC1147.81E9467A"
@@ -749,13 +894,14 @@ The boundaries of this part don't match the header boundary.
 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4--
 EOF
 
 ------=_NextPart_000_1781A1A_01CC1147.81EBA8D4--
 EOF
 
-cp -p `mhpath last` `mhpath new`
+cp -p "`mhpath last`" "`mhpath new`"
 
 run_test 'mhfixmsg last -nofixboundary' ''
 
 run_test 'mhfixmsg last -nofixboundary' ''
-check "$MH_TEST_DIR"/Mail/inbox/17 "$MH_TEST_DIR"/Mail/inbox/18 'keep first'
+check "$MH_TEST_DIR"/Mail/inbox/18 "$MH_TEST_DIR"/Mail/inbox/19 'keep first'
 
 
 
 
-# check that message is not output when fed through stdin
+# check that message is not output when fed through stdin (without -outfile)
+start_test "message is not output when fed through stdin"
 run_prog mhfixmsg -file - -verbose <`mhpath last` >"$actual" 2>"$actual.err"
 check "$expected" "$actual"
 if grep "mhfixmsg: $MH_TEST_DIR/Mail/.*, fix multipart boundary" \
 run_prog mhfixmsg -file - -verbose <`mhpath last` >"$actual" 2>"$actual.err"
 check "$expected" "$actual"
 if grep "mhfixmsg: $MH_TEST_DIR/Mail/.*, fix multipart boundary" \
@@ -770,6 +916,7 @@ fi
 # check fixup of erroneous boundary in multipart (-fixboundary,
 # enabled by default)
 # check -verbose
 # 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" <<EOF
 Date: Fri, 13 May 2011 08:21:12 -0500
 Content-Type: multipart/alternative;
 cat >"$expected" <<EOF
 Date: Fri, 13 May 2011 08:21:12 -0500
 Content-Type: multipart/alternative;
@@ -791,13 +938,42 @@ The boundaries of this part don't match the header boundary.
 EOF
 
 run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \
 EOF
 
 run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \
-         "mhfixmsg: 17, fix multipart boundary"
+         "mhfixmsg: 18, fix multipart boundary"
+check "$expected" "$actual"
+
+
+# check that message is not modified when -fixboundary fails
+start_test "message is not modified when -fixboundary fails"
+cat >"`mhpath new`" <<EOF
+Date: Fri, 13 May 2011 08:21:12 -0500
+Content-Type: multipart/alternative;
+        boundary="----=_ NextPart_000_1781A17_01CC1147.81E9467A"
+Content-Transfer-Encoding: 8bit
+MIME-Version: 1.0
+From: <sender@example.com>
+To: <recipient@example.com>
+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
 check "$expected" "$actual"
 
 
 # check that text/plain part is not added to text/html in multipart/related
 # when it shouldn't be
-cat >`mhpath new` <<EOF
+start_test "text/plain part is not added to text/html in multipart/related when it shouldn't be"
+cat >"`mhpath new`" <<EOF
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 Subject: multipart/related, not /alternative
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 Subject: multipart/related, not /alternative
@@ -826,7 +1002,7 @@ Your email client does not support HTML messages
 ------=_Part_90310_101292502.1--
 EOF
 
 ------=_Part_90310_101292502.1--
 EOF
 
-cp -p `mhpath last` "$expected"
+cp -p "`mhpath last`" "$expected"
 
 if [ $can_reformat_texthtml -eq 1 ]; then
   #### lynx inserts multiple blank lines, so squeeze them.
 
 if [ $can_reformat_texthtml -eq 1 ]; then
   #### lynx inserts multiple blank lines, so squeeze them.
@@ -839,6 +1015,7 @@ fi
 
 # check that text/plain part is added to text/html in multipart/related
 # when it should be
 
 # check that text/plain part is added to text/html in multipart/related
 # when it should be
+start_test "text/plain part is added to text/html in multipart/related when it should be"
 cat >"$expected" <<EOF
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 cat >"$expected" <<EOF
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
@@ -867,7 +1044,7 @@ Content-Transfer-Encoding: 7bit
 ------=_Part_90310_101292502.1--
 EOF
 
 ------=_Part_90310_101292502.1--
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 Subject: multipart/related, not /alternative
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 Subject: multipart/related, not /alternative
@@ -900,6 +1077,8 @@ fi
 
 
 # check handling of rfc822 message type
 
 
 # check handling of rfc822 message type
+# also, checks -fixboundary
+start_test "handling of rfc822 message type"
 cat >"$expected" <<EOF
 From: Test <test@example.com>
 To: Some User <user@example.com>
 cat >"$expected" <<EOF
 From: Test <test@example.com>
 To: Some User <user@example.com>
@@ -929,14 +1108,14 @@ This is an RFC-822 message.
 and some garbage at the end
 EOF
 
 and some garbage at the end
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 From: Test <test@example.com>
 To: Some User <user@example.com>
 Date: Fri, 29 Sep 2006 00:00:00
 Message-Id: @test.nmh
 Subject: message with message/rfc822 attachment
 MIME-Version: 1.0
 From: Test <test@example.com>
 To: Some User <user@example.com>
 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"
+Content-Type: multipart/mixed; boundary="----- =badboundary"
 
 and some garbage before the attachment
 
 
 and some garbage before the attachment
 
@@ -962,7 +1141,8 @@ run_test 'mhfixmsg last -outfile '"$actual" ''
 check "$expected" "$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" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
 cat >"$expected" <<EOF
 MIME-Version: 1.0
 From: sender@example.com
@@ -970,11 +1150,11 @@ To: recipient@example.com
 Subject: message with CR's
 Date: Mon, 29 Apr 2013 11:51:45 -0400
 
 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.
-
+There are two CR-LF pairs at the end of this sentence.\r
+\r
 EOF
 
 EOF
 
-cat >`mhpath new` <<'EOF'
+cat >"`mhpath new`" <<'EOF'
 MIME-Version: 1.0
 From: sender@example.com
 To: recipient@example.com
 MIME-Version: 1.0
 From: sender@example.com
 To: recipient@example.com
@@ -989,7 +1169,36 @@ run_prog mhfixmsg last -outfile "$actual"
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
 
+# check stripping of CRs from ASCII text context
+start_test "stripping of CRs from ASCII text context"
+cat >"$expected" <<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
+
+cat >"`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.\r
+\r
+EOF
+
+run_prog mhfixmsg last -outfile "$actual" -nocrlflinebreaks
+check "$expected" "$actual"
+
+
 # check -replacetextplain
 # check -replacetextplain
+start_test "-replacetextplain"
 prepare_space >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
 prepare_space >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
@@ -999,13 +1208,12 @@ Content-Type: multipart/alternative; boundary="----=_Part_876302"
 
 ------=_Part_876302
 Content-Type: text/plain; charset="UTF-8"
 
 ------=_Part_876302
 Content-Type: text/plain; charset="UTF-8"
-Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 7bit
 
 Yes, the text/plain part really was empty.
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
 
 Yes, the text/plain part really was empty.
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
-Content-Transfer-Encoding: 8bit
 Content-Disposition: inline
 
 <html><head>
 Content-Disposition: inline
 
 <html><head>
@@ -1019,7 +1227,7 @@ Content-Disposition: inline
 ------=_Part_876302--
 EOF
 
 ------=_Part_876302--
 EOF
 
-cat >`mhpath new` <<'EOF'
+cat >"`mhpath new`" <<'EOF'
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg replacement of bad text/plain part test
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg replacement of bad text/plain part test
@@ -1035,7 +1243,6 @@ Content-Disposition: inline
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
-Content-Transfer-Encoding: 8bit
 Content-Disposition: inline
 
 <html><head>
 Content-Disposition: inline
 
 <html><head>
@@ -1060,6 +1267,7 @@ fi
 
 
 # check -noreplacetextplain
 
 
 # check -noreplacetextplain
+start_test "-noreplacetextplain"
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
@@ -1076,7 +1284,6 @@ Content-Disposition: inline
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
 
 ------=_Part_876302
 Content-Type: text/html; charset="UTF-8"
-Content-Transfer-Encoding: 8bit
 Content-Disposition: inline
 
 <html><head>
 Content-Disposition: inline
 
 <html><head>
@@ -1095,6 +1302,7 @@ check "$expected" "$actual"
 
 
 # check removal of extraneous trailing semicolon from header parameter list
 
 
 # check removal of extraneous trailing semicolon from header parameter list
+start_test "removal of extraneous trailing semicolon from header parameter list"
 cat >"$expected" <<EOF
 To: recipient@example.com
 Subject: test
 cat >"$expected" <<EOF
 To: recipient@example.com
 Subject: test
@@ -1119,7 +1327,7 @@ Content-Disposition: attachment;
 ------- =_aaaaaaaaaa0--
 EOF
 
 ------- =_aaaaaaaaaa0--
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 Subject: test
 From: sender@example.com
 To: recipient@example.com
 Subject: test
 From: sender@example.com
@@ -1146,36 +1354,42 @@ run_test 'mhfixmsg last -outfile '"$actual" ''
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
 
-# check rmmproc
-cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF'
+if [ $can_reformat_texthtml -eq 1 ]; then
+  # check rmmproc
+  start_test "rmmproc"
+  cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF'
 mv "$1" "$1.backup"
 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"
+  chmod a+x "${MH_TEST_DIR}/Mail/rmmproc"
+  echo "rmmproc: ${MH_TEST_DIR}/Mail/rmmproc" >>"$MH"
+  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"
+  # check -normmproc
+  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'
+fi
 
 
 # check -rmmproc
 
 
 # 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
   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" <<EOF
 To: recipient@example.com
 From: sender@example.com
 cat >"$expected" <<EOF
 To: recipient@example.com
 From: sender@example.com
@@ -1191,7 +1405,7 @@ this is plain text
 ------- =_aaaaaaaaaa0--
 EOF
 
 ------- =_aaaaaaaaaa0--
 EOF
 
-cat >`mhpath new` <<EOF
+cat >"`mhpath new`" <<EOF
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg with incorrect Content-Type
 To: recipient@example.com
 From: sender@example.com
 Subject: mhfixmsg with incorrect Content-Type
@@ -1207,7 +1421,372 @@ this is plain text
 EOF
 
 mhfixmsg -fixtype application/octet-stream last
 EOF
 
 mhfixmsg -fixtype application/octet-stream last
-check "$expected" `mhpath last`
+check "$expected" "`mhpath last`"
+
+
+# check default -decodetypes
+start_test "default -decodetypes"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 3
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: 7bit
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="iso-8859-1"; name="test2.txt"
+Content-Disposition: attachment; filename="test2.txt"
+Content-Transfer-Encoding: 7bit
+
+<html>
+<head>
+    This was the text/html part.
+</head>
+</body>
+</html>
+
+------- =_aaaaaaaaaa0--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 3
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: quoted-printable
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="iso-8859-1"; name="test2.txt"
+Content-Disposition: attachment; filename="test2.txt"
+Content-Transfer-Encoding: base64
+
+PGh0bWw+CjxoZWFkPgogICAgVGhpcyB3YXMgdGhlIHRleHQvaHRtbCBwYXJ0Lgo8L2hlYWQ+Cjwv
+Ym9keT4KPC9odG1sPgo=
+
+------- =_aaaaaaaaaa0--
+EOF
+run_prog mhfixmsg last -outfile "$actual" -noreformat
+check "$expected" "$actual"
+
+
+# check -decodetypes text/plain
+start_test "-decodetypes text/plain"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 4
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: 7bit
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="iso-8859-1"; name="test2.txt"
+Content-Disposition: attachment; filename="test2.txt"
+Content-Transfer-Encoding: base64
+
+PGh0bWw+DQo8aGVhZD4NCiAgICBUaGlzIGlzIHRoZSB0ZXh0L2h0bWwgcGFydC4NCjwvaGVhZD4N
+CjwvYm9keT4NCjwvaHRtbD4NCg==
+
+------- =_aaaaaaaaaa0--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 4
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: quoted-printable
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/html; charset="iso-8859-1"; name="test2.txt"
+Content-Disposition: attachment; filename="test2.txt"
+Content-Transfer-Encoding: base64
+
+PGh0bWw+DQo8aGVhZD4NCiAgICBUaGlzIGlzIHRoZSB0ZXh0L2h0bWwgcGFydC4NCjwvaGVhZD4N
+CjwvYm9keT4NCjwvaHRtbD4NCg==
+
+------- =_aaaaaaaaaa0--
+EOF
+run_prog mhfixmsg last -outfile "$actual" -decodetypes text/plain -noreformat
+check "$expected" "$actual"
+
+
+# check -decodetypes attachment/ics
+start_test "-decodetypes attachment/ics"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 5
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: 7bit
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: application/ics; charset="iso-8859-1"; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR\r
+VERSION:2.0\r
+PRODID:test-mhical\r
+BEGIN:VEVENT\r
+DTSTAMP:20150101T162400Z\r
+DTSTART:20150105T160000\r
+DTEND:20150105T163000\r
+SUMMARY:4 pm meeting\r
+END:VEVENT\r
+END:VCALENDAR\r
+
+------- =_aaaaaaaaaa0--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 5
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: quoted-printable
+
+This is the=
+ text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: application/ics; charset="iso-8859-1"; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOnRlc3QtbWhpY2FsDQpCRUdJTjpW
+RVZFTlQNCkRUU1RBTVA6MjAxNTAxMDFUMTYyNDAwWg0KRFRTVEFSVDoyMDE1MDEwNVQxNjAwMDAN
+CkRURU5EOjIwMTUwMTA1VDE2MzAwMA0KU1VNTUFSWTo0IHBtIG1lZXRpbmcNCkVORDpWRVZFTlQN
+CkVORDpWQ0FMRU5EQVINCg==
+
+------- =_aaaaaaaaaa0--
+EOF
+run_prog mhfixmsg last -outfile "$actual" -noreformat
+check "$expected" "$actual"
+
+
+# check -decodetypes attachment/ics and -nocrlflinebreaks
+start_test "-decodetypes attachment/ics and -nocrlflinebreaks"
+cat >$expected <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 5
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: 7bit
+
+This is the text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: application/ics; charset="iso-8859-1"; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:test-mhical
+BEGIN:VEVENT
+DTSTAMP:20150101T162400Z
+DTSTART:20150105T160000
+DTEND:20150105T163000
+SUMMARY:4 pm meeting
+END:VEVENT
+END:VCALENDAR
+
+------- =_aaaaaaaaaa0--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg decode test 5
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1.txt"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: quoted-printable
+
+This is the=
+ text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: application/ics; charset="iso-8859-1"; name="invite.ics"
+Content-Disposition: attachment; filename="invite.ics"
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOnRlc3QtbWhpY2FsDQpCRUdJTjpW
+RVZFTlQNCkRUU1RBTVA6MjAxNTAxMDFUMTYyNDAwWg0KRFRTVEFSVDoyMDE1MDEwNVQxNjAwMDAN
+CkRURU5EOjIwMTUwMTA1VDE2MzAwMA0KU1VNTUFSWTo0IHBtIG1lZXRpbmcNCkVORDpWRVZFTlQN
+CkVORDpWQ0FMRU5EQVINCg==
+
+------- =_aaaaaaaaaa0--
+EOF
+run_prog mhfixmsg last -outfile "$actual" -nocrlflinebreaks -noreformat
+check "$expected" "$actual"
+
+
+# check that input is passed through to output when there's a parse error
+# (the charset string is missing its closing quote) with -outfile
+start_test "input is passed through to output when there's a parse error"
+cat >"$expected.err" <<EOF
+mhfixmsg: invalid quoted-string in message 31's Content-Type: field
+    (parameter charset)
+mhfixmsg: unable to parse message 31
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhfixmsg pass through on parse error
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1
+Content-Disposition: attachment; filename="test1.txt"
+Content-Transfer-Encoding: quoted-printable
+
+This is the=
+ text/plain part.
+
+------- =_aaaaaaaaaa0--
+EOF
+set +e
+run_prog mhfixmsg last -outfile "$actual" 2>"$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 "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" 'keep first'
+
+
+start_test "pass through message with relative folder path with parse error"
+#### Factor out leading portion of current folder path and make it relative.
+pwd=`pwd`
+set +e
+run_prog mhfixmsg +./`mhpath | sed "s%^$pwd/%%"` last -out - >"$actual" 2>/dev/null
+set -e
+folder -f +inbox >/dev/null
+#### 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" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Date: Wed, 28 Sep 2016 11:24:28 -0400
+Subject: invalid header parameter encoding
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary=001a114dd3e8fe9c56053d92f414
+Content-Transfer-Encoding: 8bit
+
+--001a114dd3e8fe9c56053d92f414
+Content-Type: text/plain; charset=UTF-8
+
+This is a test.
+
+--001a114dd3e8fe9c56053d92f414
+Content-Type: text/plain; charset="UTF-8"; name*=UTF-8''test%C3%B8.txt
+Content-Disposition: attachment; filename*=UTF-8''test%C3%B8.txt
+Content-Transfer-Encoding: 8bit
+
+This is the first text/plain part, in a subpart.  The file name
+is testø.txt.
+
+--001a114dd3e8fe9c56053d92f414--
+EOF
+
+cat >"`mhpath new`" <<EOF
+To: recipient@example.com
+From: sender@example.com
+Date: Wed, 28 Sep 2016 11:24:28 -0400
+Subject: invalid header parameter encoding
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary=001a114dd3e8fe9c56053d92f414
+
+--001a114dd3e8fe9c56053d92f414
+Content-Type: text/plain; charset=UTF-8
+
+This is a test.
+
+--001a114dd3e8fe9c56053d92f414
+Content-Type: text/plain; charset=UTF-8; name="=?UTF-8?B?dGVzdMO4LnR4dA==?="
+Content-Disposition: attachment; filename="=?UTF-8?B?dGVzdMO4LnR4dA==?="
+Content-Transfer-Encoding: 8bit
+
+This is the first text/plain part, in a subpart.  The file name
+is testø.txt.
+
+--001a114dd3e8fe9c56053d92f414--
+EOF
+run_prog mhfixmsg -file - -outfile - <`mhpath last` >"$actual" 2>/dev/null
+check "$expected" "$actual"
 
 
 # make sure there are no tmp files left over
 
 
 # make sure there are no tmp files left over
@@ -1218,5 +1797,5 @@ EOF
 
 check "$expected" "$actual"
 
 
 check "$expected" "$actual"
 
-
+finish_test
 exit $failed
 exit $failed