X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6ba5b855ebc737cc46cabfbe799b0c7706f437f4..f81bb3b8dae1b305ad394657b8420acc7ba45462:/test/mhfixmsg/test-mhfixmsg diff --git a/test/mhfixmsg/test-mhfixmsg b/test/mhfixmsg/test-mhfixmsg index 9c2df415..2194c7a2 100755 --- a/test/mhfixmsg/test-mhfixmsg +++ b/test/mhfixmsg/test-mhfixmsg @@ -12,53 +12,68 @@ if test -z "${MH_OBJ_DIR}"; then MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR fi -. "${srcdir}/test/post/test-post-common.sh" +. "${MH_OBJ_DIR}/test/common.sh" +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 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" \ +mhn_defaults="$MH_INST_DIR${nmhetcdir}/mhn.defaults" + +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 + #### 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 -# Verified behavior consistent with compiled sendmail. cat >"$expected" <"$actual" 2>&1 +run_prog mhfixmsg -help >"$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 @@ -178,7 +193,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 # -cat >"$expected" <"$expected" <"$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" @@ -255,7 +271,7 @@ run_test "mhfixmsg `mhpath last` -outfile /dev/null" '' # check handling of boundary string that appears in message body # -cat >"$expected" <"$expected" <"$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" @@ -331,7 +348,7 @@ fi # check -nodecode -cat >"$expected" <"$expected" <"$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 -# check -decode (enabled by default) +# check -decodetext (enabled by default) cat >"$expected" <`mhpath new` <$expected <`mhpath new` <$expected <`mhpath new` <"$expected" <<'EOF' +prepare_space >"$expected" <<'EOF' MIME-Version: 1.0 Date: Thu, 11 Apr 2013 02:47:08 -0700 To: @@ -654,10 +758,10 @@ d>"$actual" + 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" @@ -665,13 +769,13 @@ else fi -# check -textcodeset +# check -textcharset # Also checks preservation of attributes after one (charset) that is # modified. cat >"$expected" <`mhpath new` <"$actual.err" -if grep "mhfixmsg: Can't convert .* to .* without iconv" "$actual.err" \ - >/dev/null; then - echo "$0: skipping -textcodeset check because nmh was built without iconv" - rm -f "$expected" "$actual" "$actual.err" -else +if test "$ICONV_ENABLED" -eq 1; then + run_prog mhfixmsg last -textcharset utf-8 -outfile "$actual" 2>&1 check "$expected" "$actual" - rm "$actual.err" +else + echo "$0: skipping -textcharset check because nmh was built without iconv" + rm -f "$expected" fi -set -e # check -nofixboundary @@ -748,7 +848,7 @@ check "$MH_TEST_DIR"/Mail/inbox/17 "$MH_TEST_DIR"/Mail/inbox/18 'keep first' # 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 @@ -765,7 +865,7 @@ fi cat >"$expected" < @@ -787,24 +887,43 @@ run_test 'mhfixmsg last -outfile '"$actual"' -verbose' \ check "$expected" "$actual" -# check that text/plain part is added to lone text/html in multipart/related -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 +cat >`mhpath new` < -------=_nmh-multipart1-- - ------=_Part_90310_101292502.1 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit @@ -828,12 +945,30 @@ Your email client does not support HTML messages ------=_Part_90310_101292502.1-- EOF -cat >`mhpath new` <"$actual" + check "$expected" "$actual" 'ignore space' +else + rm -f "$expected" +fi + + +# check that text/plain part is added to text/html in multipart/related +# when it should be +cat >"$expected" < + +------=_Part_90310_101292502.1-- +EOF + +cat >`mhpath new` < + + HTML Content + + + This is the real content. + + + ------=_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" + #### 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 @@ -927,6 +1081,33 @@ run_test 'mhfixmsg last -outfile '"$actual" '' check "$expected" "$actual" +# check not stripping of CRs from ASCII text context (default) +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 are two CR-LF pairs at the end of this sentence. + +EOF + +run_prog mhfixmsg last -outfile "$actual" +check "$expected" "$actual" + + # check stripping of CRs from ASCII text context cat >"$expected" <"$expected" <"$expected" < "$actual" - check "$expected" "$actual" + #### 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 @@ -1054,7 +1236,59 @@ Content-Disposition: inline ------=_Part_876302-- EOF -mhfixmsg last -replacetextplain -noreplacetextplain -outfile "$actual" +run_prog mhfixmsg last -replacetextplain -noreplacetextplain -outfile "$actual" +check "$expected" "$actual" + + +# check removal of extraneous trailing semicolon from header parameter list +cat >"$expected" <`mhpath new` <"$expected" <`mhpath new` <$expected < + + This was the text/html part. + + + + +------- =_aaaaaaaaaa0-- +EOF + +cat >`mhpath new` <$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. +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" + + # make sure there are no tmp files left over find "$MH_TEST_DIR/Mail" \( -name 'mhfix*' -o -name ',mhfix*' \) -print \ >"$actual"