. "${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
-nodecodetext
-[no]textcodeset
-[no]reformat
+ -[no]replacetextplain
-[no]fixboundary
-[no]fixcte
-file file
-help
EOF
-mhfixmsg -help >"$actual" 2>&1
+run_prog mhfixmsg -help >"$actual" 2>&1
check "$expected" "$actual"
# check -reformat (enabled by default): addition of text/plain part
# to solitary text/html part
#
-cat >"$expected" <<EOF
+prepare_space >"$expected" <<EOF
MIME-Version: 1.0
From: sender@example.com
To: bonquiqui@example.com
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"
+ #### 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" <<EOF
+prepare_space >"$expected" <<EOF
MIME-Version: 1.0
From: sender@example.com
To: bonquiqui@example.com
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"
+ #### 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" <<EOF
+prepare_space >"$expected" <<EOF
MIME-Version: 1.0
From: sender@example.com
To: bonquiqui@example.com
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"
+ #### 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
------- =_aaaaaaaaaa0--
EOF
-mhfixmsg last -outfile "$actual"
+run_prog mhfixmsg last -outfile "$actual"
check "$expected" "$actual"
This is additional content after the last subpart of the multipart.
EOF
-mhfixmsg last -outfile "$actual"
+run_prog mhfixmsg last -outfile "$actual"
check "$expected" "$actual"
# check attempted -decode of binary text
#### Generated the encoded text below with:
-#### $ printf '\x0d\xbd\xb2=\xbc\n' | base64
+#### $ printf '\x0\xbd\xb2=\xbc\n' | base64
cat >`mhpath new` <<EOF
To: recipient@example.com
From: sender@example.com
Content-Type: text/plain; charset="iso-8859-1"; name="square.txt"
Content-Transfer-Encoding: base64
-Db2yPbwK
+AL2yPbwK
------- =_aaaaaaaaaa0--
EOF
cp -p `mhpath last` "$expected"
-set +e
-mhfixmsg last
-set -e
+run_prog mhfixmsg last
check `mhpath last` "$expected" 'keep first'
# check that -reformat succeeds when decode of binary text fails
-cat >"$expected" <<'EOF'
+prepare_space >"$expected" <<'EOF'
MIME-Version: 1.0
Date: Thu, 11 Apr 2013 02:47:08 -0700
To: <me@example.com>
Content-Transfer-Encoding: quoted-printable
<body>
-<table width=3D"325" border=3D"0" cellspacing=3D"0" cellpadding=3D"0">
-<tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=
-=3D"2"><strong>Mile</strong></font></td><td height=3D"3"> </td><td al=
-ign=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333=
-" size=3D"2">$0.00</font></td></tr><tr><td><font face=3D"Arial, Helvetica,=
- sans-serif" color=3D"#333333" size=3D"2"><strong>Time</strong></font></td=
-><td height=3D"3"> </td><td align=3D"right"><font face=3D"Arial, Helv=
-etica, sans-serif" color=3D"#333333" size=3D"2">$78.71</font></td></tr><tr=
-><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D=
-"2"><strong>State Tax</strong></font></td><td height=3D"3"> </td><td =
-align=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"#3333=
-33" size=3D"2">$5.90</font></td></tr><tr><td><font face=3D"Arial, Helvetic=
-a, sans-serif" color=3D"#333333" size=3D"2"><strong>Vehicle License Fee</s=
-trong></font></td><td height=3D"3"> </td><td align=3D"right"><font fa=
-ce=3D"Arial, Helvetica, sans-serif" color=3D"#333333" size=3D"2">$1.84</fo=
-nt></td></tr><tr><td><font face=3D"Arial, Helvetica, sans-serif" color=3D"=
-#333333" size=3D"2"><strong>State Txn Tax</strong></font></td><td height=3D=
-"3"> </td><td align=3D"right"><font face=3D"Arial, Helvetica, sans-se=
-rif" color=3D"#333333" size=3D"2">$6.00</font></td></tr>
-
-</body>
-</html>
-
-------=_nmh-multipart--
EOF
cat >`mhpath new` <<'EOF'
</html>
EOF
-#### lynx inserts multiple blank lines, so use uniq to squeeze them.
-mhfixmsg last -outfile - | uniq >"$actual"
-check "$expected" "$actual" 'ignore space'
+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 -textcodeset
EOF
set +e
-mhfixmsg last -textcodeset utf-8 -outfile "$actual" 2>"$actual.err"
+run_prog mhfixmsg last -textcodeset utf-8 -outfile "$actual" 2>"$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
+ echo "$0: skipping -textcodeset check because nmh was built without iconv"
rm -f "$expected" "$actual" "$actual.err"
else
check "$expected" "$actual"
# 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
# check that text/plain part is added to lone text/html in multipart/related
-cat >"$expected" <<EOF
+prepare_space >"$expected" <<EOF
MIME-Version: 1.0
Date: Tue, 26 Feb 2013 18:07:20 -0600
Subject: multipart/related, not /alternative
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"
+ #### 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" <<EOF
From: Test <test@example.com>
\r
EOF
-mhfixmsg last -outfile "$actual"
+run_prog mhfixmsg last -outfile "$actual"
+check "$expected" "$actual"
+
+
+# check -replacetextplain
+prepare_space >"$expected" <<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="UTF-8"
+Content-Transfer-Encoding: 8bit
+
+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>
+<title>eticket</title>
+</head>
+<body>
+ Yes, the text/plain part really was empty.
+</body>
+</html>
+
+------=_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
+
+<html><head>
+<title>eticket</title>
+</head>
+<body>
+ Yes, the text/plain part really was empty.
+</body>
+</html>
+
+------=_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" <<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
+
+<html><head>
+<title>eticket</title>
+</head>
+<body>
+ Yes, the text/plain part really was empty.
+</body>
+</html>
+
+------=_Part_876302--
+EOF
+
+run_prog mhfixmsg last -replacetextplain -noreplacetextplain -outfile "$actual"
check "$expected" "$actual"