]> diplodocus.org Git - nmh/blobdiff - test/mhfixmsg/test-mhfixmsg
Removed --posix from awk invocation in test-anno.
[nmh] / test / mhfixmsg / test-mhfixmsg
index db45fc61d50088bcdbbf0ba79c5e1f40a8258b49..bbc60f6543b304ea2a02c1c1557e60c1c62a9516 100755 (executable)
@@ -14,18 +14,30 @@ fi
 
 . "${srcdir}/test/post/test-post-common.sh"
 
 
 . "${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"
 
 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"
 
+#### Make sure that html-to-text conversion is what we expect.
+LC_ALL=en_US.UTF-8; export LC_ALL
+
 set +e
 if grep mhfixmsg-format-text/html "${MH_TEST_DIR}/Mail/mhn.defaults" \
   >/dev/null; then
   can_reformat_texthtml=1
 set +e
 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
 else
-  echo "$0: skipping -reformat check because
+  echo "$0: skipping -reformat check because \
     mhfixmsg-format-text/html is not available"
   can_reformat_texthtml=0
 fi
     mhfixmsg-format-text/html is not available"
   can_reformat_texthtml=0
 fi
@@ -41,6 +53,7 @@ Usage: mhfixmsg [+folder] [msgs] [switches]
   -nodecodetext
   -[no]textcodeset
   -[no]reformat
   -nodecodetext
   -[no]textcodeset
   -[no]reformat
+  -[no]replacetextplain
   -[no]fixboundary
   -[no]fixcte
   -file file
   -[no]fixboundary
   -[no]fixcte
   -file file
@@ -177,7 +190,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
 #
 # 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
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
@@ -239,16 +252,22 @@ if [ $can_reformat_texthtml -eq 1 ]; then
 mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \
        >"$expected.err"
 
 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.
+  mhfixmsg last -outfile - -verbose 2>"$actual.err" | squeeze_lines >"$actual"
+  check "$expected" "$actual" 'ignore space'
   check "$expected.err" "$actual.err"
   check "$expected.err" "$actual.err"
+else
+  rm -f "$expected"
 fi
 
 
 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
 #
 # 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
 MIME-Version: 1.0
 From: sender@example.com
 To: bonquiqui@example.com
@@ -314,15 +333,17 @@ if [ $can_reformat_texthtml -eq 1 ]; then
 mhfixmsg: 12 part 1, decode text/html; charset=\"Windows-1252\"" \
        >"$expected.err"
 
 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.
+  mhfixmsg last -outfile - -verbose 2>"$actual.err" | squeeze_lines >"$actual"
+  check "$expected" "$actual" 'ignore space'
   check "$expected.err" "$actual.err"
   check "$expected.err" "$actual.err"
+else
+  rm -f "$expected"
 fi
 
 
 # check -nodecode
 fi
 
 
 # check -nodecode
-cat >"$expected" <<EOF
+prepare_space >"$expected" <<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
@@ -384,10 +405,13 @@ EOF
 if [ $can_reformat_texthtml -eq 1 ]; then
   printf '%s\n' 'mhfixmsg: 12, insert text/plain part' >"$expected.err"
 
 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.
+  mhfixmsg last -nodecode -outfile - -verbose 2>"$actual.err" | \
+    squeeze_lines >"$actual"
+  check "$expected" "$actual" 'ignore space'
   check "$expected.err" "$actual.err"
   check "$expected.err" "$actual.err"
+else
+  rm -f "$expected"
 fi
 
 
 fi
 
 
@@ -583,7 +607,7 @@ rmm last
 
 
 # check that -reformat succeeds when decode of binary text fails
 
 
 # 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>
 MIME-Version: 1.0
 Date: Thu, 11 Apr 2013 02:47:08 -0700
 To: <me@example.com>
@@ -643,10 +667,10 @@ d><td align=3D"right"><font face=3D"Arial, Helvetica, sans-serif" color=3D"=
 EOF
 
 if [ $can_reformat_texthtml -eq 1 ]; then
 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.
   #### Truncate to avoid comparing the html portion because it can
   #### get reformatted.
-  #### lynx inserts multiple blank lines, so use uniq to squeeze them.
-  mhfixmsg last -outfile - | head -22 | uniq >"$actual"
+  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"
   check "$expected" "$actual" 'ignore space'
 else
   cp -p "$MH_TEST_DIR/Mail/inbox/15" "$MH_TEST_DIR/Mail/inbox/15.backup"
@@ -697,7 +721,7 @@ set +e
 mhfixmsg last -textcodeset utf-8 -outfile "$actual" 2>"$actual.err"
 if grep "mhfixmsg: Can't convert .* to .* without iconv" "$actual.err" \
   >/dev/null; then
 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"
   rm -f "$expected" "$actual" "$actual.err"
 else
   check "$expected" "$actual"
@@ -777,7 +801,7 @@ check "$expected" "$actual"
 
 
 # check that text/plain part is added to lone text/html in multipart/related
 
 
 # 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
 MIME-Version: 1.0
 Date: Tue, 26 Feb 2013 18:07:20 -0600
 Subject: multipart/related, not /alternative
@@ -845,9 +869,9 @@ Your email client does not support HTML messages
 EOF
 
 if [ $can_reformat_texthtml -eq 1 ]; then
 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.
+  mhfixmsg last -outfile - | squeeze_lines >"$actual"
+  check "$expected" "$actual" 'ignore space'
 else
   rm -f "$expected"
 fi
 else
   rm -f "$expected"
 fi
@@ -943,6 +967,110 @@ mhfixmsg last -outfile "$actual"
 check "$expected" "$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.
+  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
+
+mhfixmsg last -replacetextplain -noreplacetextplain -outfile "$actual"
+check "$expected" "$actual"
+
+
 # check rmmproc
 cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF'
 mv "$1" "$1.backup"
 # check rmmproc
 cat >"$MH_TEST_DIR/Mail/rmmproc" <<'EOF'
 mv "$1" "$1.backup"