Sigh. Turns out last change broke a few tests, because it trimmed the
authorKen Hornstein <kenh@pobox.com>
Sat, 24 Mar 2012 06:08:03 +0000 (02:08 -0400)
committerKen Hornstein <kenh@pobox.com>
Sat, 24 Mar 2012 06:08:03 +0000 (02:08 -0400)
newline on the "body" component.  Ignore that and the text component as
well for trimming.  Also create some tests for the repl changes.

Makefile.am
sbr/fmt_scan.c
test/repl/test-multicomp [new file with mode: 0755]
test/repl/test-trailing-newline [new file with mode: 0755]

index c8006a9..057e37a 100644 (file)
@@ -63,7 +63,9 @@ TESTS = test/bad-input/test-header \
        test/post/test-post-multifrom test/post/test-post-envelope \
        test/post/test-post-group \
        test/refile/test-refile \
-       test/repl/test-if-str test/scan/test-scan \
+       test/repl/test-if-str test/repl/test-trailing-newline \
+       test/repl/test-multicomp \
+       test/scan/test-scan \
        test/sequences/test-flist test/sequences/test-mark \
        test/whatnow/test-attach-detach test/whatnow/test-cd \
        test/whatnow/test-ls test/whom/test-whom \
index b194235..5e4bc88 100644 (file)
@@ -318,14 +318,20 @@ fmt_scan (struct format *format, char *scanl, int width, int *dat)
        case FT_LS_COMP:
        case FT_LS_DECODECOMP:
            /*
-            * Trim these components of any newlines
+            * Trim these components of any newlines.
+            *
+            * But don't trim the "body" and "text" components.
             */
-           if (! (fmt->f_comp->c_flags & CF_TRIMMED) &&
-                                       fmt->f_comp->c_text) {
-               int i = strlen(fmt->f_comp->c_text);
-               if (fmt->f_comp->c_text[i - 1] == '\n')
-                   fmt->f_comp->c_text[i - 1] = '\0';
-               fmt->f_comp->c_flags |= CF_TRIMMED;
+
+           comp = fmt->f_comp;
+
+           if (! (comp->c_flags & CF_TRIMMED) && comp->c_text) {
+               i = strlen(comp->c_text);
+               if (comp->c_text[i - 1] == '\n' &&
+                       strcmp(comp->c_name, "body") != 0 &&
+                       strcmp(comp->c_name, "text") != 0)
+                   comp->c_text[i - 1] = '\0';
+               comp->c_flags |= CF_TRIMMED;
            }
            break;
        }
diff --git a/test/repl/test-multicomp b/test/repl/test-multicomp
new file mode 100755 (executable)
index 0000000..ed5f97d
--- /dev/null
@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+# See if we handle multiple components of the same name correctly.
+#
+
+set -e
+
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname "$0"`/../..
+    MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
+
+setup_test
+
+# create test replcomps
+form="$MH_TEST_DIR/$$.replcomps"
+cat > "$form" <<EOF
+From: Nowhere User <nowhere@example.com>
+%(lit)%(formataddr %<{reply-to}%?{from}%>)\
+%<(nonnull)%(void(width))%(putaddr To: )\n%>\
+%(lit)%(formataddr{cc})\
+%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
+%<{subject}Subject: Re: %{subject}\n%>\
+--------
+EOF
+
+cat > "${MH_TEST_DIR}/Mail/inbox/11" <<EOF
+From: Test1 <test1@example.com>
+To: Nowhere User <nowhere@example.com>
+cc: Mister User One <mruserone@example.com>
+Subject: This is a subject
+cc: Mister User Two <mrusertwo@example.com>
+Subject: that got continued on another line
+Date: 28 Sep 2006 03:04:05 -0400
+
+This is a new test message
+EOF
+
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/Mail/draft"
+
+cat > "$expected" <<EOF
+From: Nowhere User <nowhere@example.com>
+To: Test1 <test1@example.com>
+cc: Mister User One <mruserone@example.com>,
+    Mister User Two <mrusertwo@example.com>
+Subject: Re: This is a subject that got continued on another line
+--------
+Test1 writes:
+> This is a new test message
+EOF
+
+repl -editor true -cc cc -format -form $form -width 72 -nowhatnowproc 11 \
+                                               || exit 1
+
+check "$expected" "$actual"
+
+test ${failed:-0} -eq 0  &&  rm "$form"
+
+exit $failed
diff --git a/test/repl/test-trailing-newline b/test/repl/test-trailing-newline
new file mode 100755 (executable)
index 0000000..20d7637
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# Test to make sure repl doesn't put trailing spaces at the end of components
+# (like subject)
+#
+
+set -e
+
+if test -z "${MH_OBJ_DIR}"; then
+    srcdir=`dirname "$0"`/../..
+    MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
+
+setup_test
+
+# create test replcomps
+form="$MH_TEST_DIR/$$.replcomps"
+cat > "$form" <<EOF
+From: Nowhere User <nowhere@example.com>
+%(lit)%(formataddr %<{reply-to}%?{from}%>)\
+%<(nonnull)%(void(width))%(putaddr To: )\n%>\
+%<{subject}Subject: Re: %{subject}\n%>\
+--------
+EOF
+
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/Mail/draft"
+
+cat > "$expected" <<EOF
+From: Nowhere User <nowhere@example.com>
+To: Test1 <test1@example.com>
+Subject: Re: Testing message 1
+--------
+Test1 writes:
+> This is message number 1
+EOF
+
+repl -editor true -format -form $form -nowhatnowproc 1 || exit 1
+
+check "$expected" "$actual"
+
+test ${failed:-0} -eq 0  &&  rm "$form"
+
+exit $failed