[PATCH 2/2] test: Have notmuch-test use the modular test collections
authorJesse Rosenthal <jrosenthal@jhu.edu>
Fri, 30 Apr 2010 19:09:01 +0000 (15:09 +2000)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:37:01 +0000 (09:37 -0800)
16/36466bbbf9cd6fa035fcd03186dee20e53461a [new file with mode: 0644]

diff --git a/16/36466bbbf9cd6fa035fcd03186dee20e53461a b/16/36466bbbf9cd6fa035fcd03186dee20e53461a
new file mode 100644 (file)
index 0000000..28b9782
--- /dev/null
@@ -0,0 +1,1236 @@
+Return-Path: <prvs=jrosenthal=7296245fb@jhu.edu>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 048A64196F0\r
+       for <notmuch@notmuchmail.org>; Fri, 30 Apr 2010 12:09:09 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -4.199\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5\r
+       tests=[BAYES_00=-1.9, NORMAL_HTTP_TO_IP=0.001, RCVD_IN_DNSWL_MED=-2.3]\r
+       autolearn=ham\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id 6RCETDguDYSr for <notmuch@notmuchmail.org>;\r
+       Fri, 30 Apr 2010 12:09:04 -0700 (PDT)\r
+Received: from ipex2.johnshopkins.edu (ipex2.johnshopkins.edu [162.129.8.151])\r
+       by olra.theworths.org (Postfix) with ESMTP id 41926431FC1\r
+       for <notmuch@notmuchmail.org>; Fri, 30 Apr 2010 12:09:04 -0700 (PDT)\r
+X-IronPort-AV: E=Sophos;i="4.52,304,1270440000"; d="scan'208";a="326233036"\r
+Received: from c-69-255-36-229.hsd1.md.comcast.net (HELO lucky)\r
+       ([69.255.36.229])\r
+       by ipex2.johnshopkins.edu with ESMTP/TLS/AES256-SHA;\r
+       30 Apr 2010 15:09:03 -0400\r
+Received: from jkr by lucky with local (Exim 4.69)\r
+       (envelope-from <jrosenthal@jhu.edu>)\r
+       id 1O7vaA-0004zc-31; Fri, 30 Apr 2010 15:09:02 -0400\r
+From: Jesse Rosenthal <jrosenthal@jhu.edu>\r
+To: Notmuch developer list <notmuch@notmuchmail.org>\r
+Subject: [PATCH 2/2] test: Have notmuch-test use the modular test collections\r
+In-Reply-To: <87iq78daii.fsf@jhu.edu>\r
+References: <87sk6cdbxz.fsf@jhu.edu> <87iq78daii.fsf@jhu.edu>\r
+User-Agent: Notmuch/0.3-23-g5efa9bd (http://notmuchmail.org) Emacs/23.1.1\r
+       (i486-pc-linux-gnu)\r
+Date: Fri, 30 Apr 2010 15:09:01 -0400\r
+Message-ID: <87fx2cdagi.fsf@jhu.edu>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=utf-8\r
+Content-Transfer-Encoding: quoted-printable\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Fri, 30 Apr 2010 19:09:09 -0000\r
+\r
+Introduce two new functions (run_collection_setup_and_tests and\r
+run_test_suite) to notmuch-test. The first takes as an argument a subdir\r
+of test/tests and runs all .setup and .test files in there in order of\r
+their numerical prefix. The latter either runs all tests (if given "all"\r
+or no argument) or a given dir (if given it as an argument).\r
+\r
+Also introduce the variable TEST_COLLECTIONS. These are all the folders\r
+that "notmuch-test all" should look for. It won't automatically run all\r
+folders, in case there is something that is only relevant in certain\r
+circumstances (such as, perhaps, future tests for remote usage).\r
+---\r
+ test/notmuch-test |  921 +++----------------------------------------------=\r
+----\r
+ 1 files changed, 47 insertions(+), 874 deletions(-)\r
+\r
+diff --git a/test/notmuch-test b/test/notmuch-test\r
+index a861df1..29d5c91 100755\r
+--- a/test/notmuch-test\r
++++ b/test/notmuch-test\r
+@@ -7,6 +7,20 @@ set -e\r
+ # without regard to the time zone of where the test suite is run.\r
+ export TZ=3DUTC+8\r
+=20\r
++TEST_COLLECTION_DIR=3D"$(dirname $(readlink -f $0))/tests"\r
++\r
++TEST_COLLECTIONS=3D"notmuch-new\r
++notmuch-search\r
++json\r
++thread-naming\r
++notmuch-reply\r
++uuencoded\r
++notmuch-dump-restore\r
++out-of-order-threading\r
++author-reordering\r
++from-guessing-multiple\r
++from-guessing-single"\r
++\r
+ find_notmuch_binary ()\r
+ {\r
+     dir=3D$1\r
+@@ -210,13 +224,15 @@ notmuch_show_sanitize ()\r
+     sed -e "$NOTMUCH_SHOW_FILENAME_SQUELCH"\r
+ }\r
+=20\r
+-rm -rf ${TEST_DIR}\r
+-mkdir ${TEST_DIR}\r
+-cd ${TEST_DIR}\r
++initialize_notmuch_test ()\r
++{\r
++    rm -rf ${TEST_DIR}\r
++    mkdir ${TEST_DIR}\r
++    cd ${TEST_DIR}\r
+=20\r
+-mkdir ${MAIL_DIR}\r
++    mkdir ${MAIL_DIR}\r
+=20\r
+-cat <<EOF > ${NOTMUCH_CONFIG}\r
++    cat <<EOF > ${NOTMUCH_CONFIG}\r
+ [database]\r
+ path=3D${MAIL_DIR}\r
+=20\r
+@@ -225,878 +241,35 @@ name=3DNotmuch Test Suite\r
+ primary_email=3Dtest_suite@notmuchmail.org\r
+ other_email=3Dtest_suite_other@notmuchmail.org;test_suite@otherdomain.org\r
+ EOF\r
++}\r
+=20\r
+-printf "Testing \"notmuch new\" in several variations:\n"\r
+-printf " No new messages...\t\t\t\t"\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail."\r
+-\r
+-printf " Single new message...\t\t\t\t"\r
+-generate_message\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " Multiple new messages...\t\t\t"\r
+-generate_message\r
+-generate_message\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 2 new messages to the database."\r
+-\r
+-printf " No new messages (non-empty DB)...\t\t"\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail."\r
+-\r
+-printf " New directories...\t\t\t\t"\r
+-rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch\r
+-mkdir ${MAIL_DIR}/def\r
+-mkdir ${MAIL_DIR}/ghi\r
+-generate_message [dir]=3Ddef\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " Alternate inode order...\t\t\t"\r
+-\r
+-rm -rf ${MAIL_DIR}/.notmuch\r
+-mv ${MAIL_DIR}/ghi ${MAIL_DIR}/abc\r
+-rm ${MAIL_DIR}/def/*\r
+-generate_message [dir]=3Dabc\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " Message moved in...\t\t\t\t"\r
+-rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch\r
+-generate_message\r
+-tmp_msg_filename=3Dtmp/$gen_msg_filename\r
+-mkdir -p $(dirname $tmp_msg_filename)\r
+-mv $gen_msg_filename $tmp_msg_filename\r
+-increment_mtime ${MAIL_DIR}\r
+-$NOTMUCH new > /dev/null\r
+-mv $tmp_msg_filename $gen_msg_filename\r
+-increment_mtime ${MAIL_DIR}\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " Renamed message...\t\t\t\t"\r
+-\r
+-generate_message\r
+-$NOTMUCH new > /dev/null\r
+-mv $gen_msg_filename ${gen_msg_filename}-renamed\r
+-increment_mtime ${MAIL_DIR}\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Detected 1 file rename."\r
+-\r
+-printf " Deleted message...\t\t\t\t"\r
+-\r
+-rm ${gen_msg_filename}-renamed\r
+-increment_mtime ${MAIL_DIR}\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Removed 1 message."\r
+-\r
+-printf " Renamed directory...\t\t\t\t"\r
+-\r
+-generate_message [dir]=3Ddir\r
+-generate_message [dir]=3Ddir\r
+-generate_message [dir]=3Ddir\r
+-\r
+-$NOTMUCH new > /dev/null\r
+-\r
+-mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed\r
+-increment_mtime ${MAIL_DIR}\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Detected 3 file renames."\r
+-\r
+-printf " Deleted directory...\t\t\t\t"\r
+-\r
+-rm -rf ${MAIL_DIR}/dir-renamed\r
+-increment_mtime ${MAIL_DIR}\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Removed 3 messages."\r
+-\r
+-printf " New directory (at end of list)...\t\t"\r
+-\r
+-generate_message [dir]=3Dzzz\r
+-generate_message [dir]=3Dzzz\r
+-generate_message [dir]=3Dzzz\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 3 new messages to the database."\r
+-\r
+-printf " Deleted directory (end of list)...\t\t"\r
+-\r
+-rm -rf ${MAIL_DIR}/zzz\r
+-increment_mtime ${MAIL_DIR}\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Removed 3 messages."\r
+-\r
+-printf " New symlink to directory...\t\t\t"\r
+-\r
+-rm -rf ${MAIL_DIR}/.notmuch\r
+-mv ${MAIL_DIR} ${TEST_DIR}/actual_maildir\r
+-\r
+-mkdir ${MAIL_DIR}\r
+-ln -s ${TEST_DIR}/actual_maildir ${MAIL_DIR}/symlink\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " New symlink to a file...\t\t\t"\r
+-generate_message\r
+-external_msg_filename=3D${TEST_DIR}/external/$(basename $gen_msg_filename)\r
+-mkdir -p $(dirname $external_msg_filename)\r
+-mv $gen_msg_filename $external_msg_filename\r
+-ln -s $external_msg_filename $gen_msg_filename\r
+-increment_mtime ${MAIL_DIR}\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-\r
+-printf " New two-level directory...\t\t\t"\r
+-\r
+-generate_message [dir]=3Dtwo/levels\r
+-generate_message [dir]=3Dtwo/levels\r
+-generate_message [dir]=3Dtwo/levels\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 3 new messages to the database."\r
+-\r
+-printf " Deleted two-level directory...\t\t\t"\r
+-\r
+-rm -rf ${MAIL_DIR}/two\r
+-increment_mtime ${MAIL_DIR}\r
+-\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "No new mail. Removed 3 messages."\r
+-\r
+-printf "\nTesting \"notmuch search\" in several variations:\n"\r
+-\r
+-printf " Search body...\t\t\t\t\t"\r
+-add_message '[subject]=3D"body search"' '[date]=3D"Sat, 01 Jan 2000 12:00:=\r
+00 -0000"' [body]=3Dbodysearchtest\r
+-output=3D$($NOTMUCH search bodysearchtest | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ body search (inbox unread)"\r
+-\r
+-printf " Search by from:...\t\t\t\t"\r
+-add_message '[subject]=3D"search by from"' '[date]=3D"Sat, 01 Jan 2000 12:=\r
+00:00 -0000"' [from]=3Dsearchbyfrom\r
+-output=3D$($NOTMUCH search from:searchbyfrom | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom; searc=\r
+h by from (inbox unread)"\r
+-\r
+-printf " Search by to:...\t\t\t\t"\r
+-add_message '[subject]=3D"search by to"' '[date]=3D"Sat, 01 Jan 2000 12:00=\r
+:00 -0000"' [to]=3Dsearchbyto\r
+-output=3D$($NOTMUCH search to:searchbyto | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by to (inbox unread)"\r
+-\r
+-printf " Search by subject:...\t\t\t\t"\r
+-add_message [subject]=3Dsubjectsearchtest '[date]=3D"Sat, 01 Jan 2000 12:0=\r
+0:00 -0000"'\r
+-output=3D$($NOTMUCH search subject:subjectsearchtest | notmuch_search_sani=\r
+tize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ subjectsearchtest (inbox unread)"\r
+-\r
+-printf " Search by id:...\t\t\t\t"\r
+-add_message '[subject]=3D"search by id"' '[date]=3D"Sat, 01 Jan 2000 12:00=\r
+:00 -0000"'\r
+-output=3D$($NOTMUCH search id:${gen_msg_id} | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by id (inbox unread)"\r
+-\r
+-printf " Search by tag:...\t\t\t\t"\r
+-add_message '[subject]=3D"search by tag"' '[date]=3D"Sat, 01 Jan 2000 12:0=\r
+0:00 -0000"'\r
+-$NOTMUCH tag +searchbytag id:${gen_msg_id}\r
+-output=3D$($NOTMUCH search tag:searchbytag | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by tag (inbox searchbytag unread)"\r
+-\r
+-printf " Search by thread:...\t\t\t\t"\r
+-add_message '[subject]=3D"search by thread"' '[date]=3D"Sat, 01 Jan 2000 1=\r
+2:00:00 -0000"'\r
+-thread_id=3D$($NOTMUCH search id:${gen_msg_id} | sed -e 's/thread:\([a-f0-=\r
+9]*\).*/\1/')\r
+-output=3D$($NOTMUCH search thread:${thread_id} | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by thread (inbox unread)"\r
+-\r
+-printf " Search body (phrase)...\t\t\t"\r
+-add_message '[subject]=3D"body search (phrase)"' '[date]=3D"Sat, 01 Jan 20=\r
+00 12:00:00 -0000"' '[body]=3D"body search (phrase)"'\r
+-add_message '[subject]=3D"negative result"' '[date]=3D"Sat, 01 Jan 2000 12=\r
+:00:00 -0000"' '[body]=3D"This phrase should not match the body search"'\r
+-output=3D$($NOTMUCH search '\"body search (phrase)\"' | notmuch_search_san=\r
+itize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ body search (phrase) (inbox unread)"\r
+-\r
+-printf " Search by from: (address)...\t\t\t"\r
+-add_message '[subject]=3D"search by from (address)"' '[date]=3D"Sat, 01 Ja=\r
+n 2000 12:00:00 -0000"' [from]=3Dsearchbyfrom@example.com\r
+-output=3D$($NOTMUCH search from:searchbyfrom@example.com | notmuch_search_=\r
+sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom@exampl=\r
+e.com; search by from (address) (inbox unread)"\r
+-\r
+-printf " Search by from: (name)...\t\t\t"\r
+-add_message '[subject]=3D"search by from (name)"' '[date]=3D"Sat, 01 Jan 2=\r
+000 12:00:00 -0000"' '[from]=3D"Search By From Name <test@example.com>"'\r
+-output=3D$($NOTMUCH search from:'Search By From Name' | notmuch_search_san=\r
+itize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name=\r
+; search by from (name) (inbox unread)"\r
+-\r
+-printf " Search by to: (address)...\t\t\t"\r
+-add_message '[subject]=3D"search by to (address)"' '[date]=3D"Sat, 01 Jan =\r
+2000 12:00:00 -0000"' [to]=3Dsearchbyto@example.com\r
+-output=3D$($NOTMUCH search to:searchbyto@example.com | notmuch_search_sani=\r
+tize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by to (address) (inbox unread)"\r
+-\r
+-printf " Search by to: (name)...\t\t\t"\r
+-add_message '[subject]=3D"search by to (name)"' '[date]=3D"Sat, 01 Jan 200=\r
+0 12:00:00 -0000"' '[to]=3D"Search By To Name <test@example.com>"'\r
+-output=3D$($NOTMUCH search to:'Search By To Name' | notmuch_search_sanitiz=\r
+e)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ search by to (name) (inbox unread)"\r
+-\r
+-printf " Search by subject: (phrase)...\t\t\t"\r
+-add_message '[subject]=3D"subject search test (phrase)"' '[date]=3D"Sat, 0=\r
+1 Jan 2000 12:00:00 -0000"'\r
+-add_message '[subject]=3D"this phrase should not match the subject search =\r
+test"' '[date]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$($NOTMUCH search 'subject:\"subject search test (phrase)\"' | no=\r
+tmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ subject search test (phrase) (inbox unread)"\r
+-\r
+-printf " Search for all messages (\"*\"):...\t\t"\r
+-output=3D$($NOTMUCH search '*' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite;=\r
+ Test message #6 (inbox unread)\r
+-thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Test message #14 (inbox =\r
+unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unrea=\r
+d)\r
+-thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unre=\r
+ad)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox=\r
+ unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unre=\r
+ad)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox sea=\r
+rchbytag unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox =\r
+unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (in=\r
+box unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; negative result (inbox u=\r
+nread)\r
+-thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (ad=\r
+dress) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (=\r
+inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (=\r
+inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inb=\r
+ox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phr=\r
+ase) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; this phrase should not m=\r
+atch the subject search test (inbox unread)"\r
+-\r
+-printf " Search body (utf-8):...\t\t\t"\r
+-add_message '[subject]=3D"utf8-message-body-subject"' '[date]=3D"Sat, 01 J=\r
+an 2000 12:00:00 -0000"' '[body]=3D"message body utf8: b=C3=B6d=C3=BD"'\r
+-output=3D$($NOTMUCH search 'b=C3=B6d=C3=BD' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ utf8-message-body-subject (inbox unread)"\r
+-\r
+-printf "\nTesting --format=3Djson output:\n"\r
+-\r
+-printf " Show message: json...\t\t\t\t"\r
+-add_message '[subject]=3D"json-show-subject"' '[date]=3D"Sat, 01 Jan 2000 =\r
+12:00:00 -0000"' '[body]=3D"json-show-message"'\r
+-output=3D$($NOTMUCH show --format=3Djson 'json-show-message')\r
+-pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "file=\r
+name": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2=\r
+000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-s=\r
+ubject", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "=\r
+Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc": "", "Bcc": "", "Dat=\r
+e": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id": 1, "content-type": =\r
+"text/plain", "content": "json-show-message\n"}]}, []]]]'\r
+-\r
+-printf " Search message: json...\t\t\t"\r
+-add_message '[subject]=3D"json-search-subject"' '[date]=3D"Sat, 01 Jan 200=\r
+0 12:00:00 -0000"' '[body]=3D"json-search-message"'\r
+-output=3D$($NOTMUCH search --format=3Djson 'json-search-message' | notmuch=\r
+_search_sanitize)\r
+-pass_if_equal "$output" '[{"thread": "XXX",\r
+-"timestamp": 946728000,\r
+-"matched": 1,\r
+-"total": 1,\r
+-"authors": "Notmuch Test Suite",\r
+-"subject": "json-search-subject",\r
+-"tags": ["inbox", "unread"]}]'\r
+-\r
+-printf " Search by subject (utf-8):...\t\t\t"\r
+-add_message [subject]=3Dutf8-s=C3=BCbj=C3=A9ct '[date]=3D"Sat, 01 Jan 2000=\r
+ 12:00:00 -0000"'\r
+-output=3D$($NOTMUCH search subject:utf8-s=C3=BCbj=C3=A9ct | notmuch_search=\r
+_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ utf8-s=C3=BCbj=C3=A9ct (inbox unread)"\r
+-\r
+-printf " Show message: json, utf-8...\t\t\t"\r
+-add_message '[subject]=3D"json-show-utf8-body-s=C3=BCbj=C3=A9ct"' '[date]=\r
+=3D"Sat, 01 Jan 2000 12:00:00 -0000"' '[body]=3D"js=C3=B6n-show-m=C3=A9ssag=\r
+e"'\r
+-output=3D$($NOTMUCH show --format=3Djson 'js=C3=B6n-show-m=C3=A9ssage')\r
+-pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "file=\r
+name": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2=\r
+000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-u=\r
+tf8-body-s=C3=BCbj=C3=A9ct", "From": "Notmuch Test Suite <test_suite@notmuc=\r
+hmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc":=\r
+ "", "Bcc": "", "Date": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id":=\r
+ 1, "content-type": "text/plain", "content": "js=C3=B6n-show-m=C3=A9ssage\n=\r
+"}]}, []]]]'\r
+-\r
+-printf " Search message: json, utf-8...\t\t\t"\r
+-add_message '[subject]=3D"json-search-utf8-body-s=C3=BCbj=C3=A9ct"' '[date=\r
+]=3D"Sat, 01 Jan 2000 12:00:00 -0000"' '[body]=3D"js=C3=B6n-search-m=C3=A9s=\r
+sage"'\r
+-output=3D$($NOTMUCH search --format=3Djson 'js=C3=B6n-search-m=C3=A9ssage'=\r
+ | notmuch_search_sanitize)\r
+-pass_if_equal "$output" '[{"thread": "XXX",\r
+-"timestamp": 946728000,\r
+-"matched": 1,\r
+-"total": 1,\r
+-"authors": "Notmuch Test Suite",\r
+-"subject": "json-search-utf8-body-s=C3=BCbj=C3=A9ct",\r
+-"tags": ["inbox", "unread"]}]'\r
+-\r
+-printf "\nTesting naming of threads with changing subject:\n"\r
+-add_message '[subject]=3D"thread-naming: Initial thread subject"' \\r
+-            '[date]=3D"Fri, 05 Jan 2001 15:43:56 -0800"'\r
+-first=3D${gen_msg_cnt}\r
+-parent=3D${gen_msg_id}\r
+-add_message '[subject]=3D"thread-naming: Older changed subject"' \\r
+-            '[date]=3D"Sat, 06 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-add_message '[subject]=3D"thread-naming: Newer changed subject"' \\r
+-            '[date]=3D"Sun, 07 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-add_message '[subject]=3D"thread-naming: Final thread subject"' \\r
+-            '[date]=3D"Mon, 08 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-final=3D${gen_msg_id}\r
+-\r
+-printf " Initial thread name (oldest-first search)...\t"\r
+-output=3D$($NOTMUCH search --sort=3Doldest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-05 [4/4] Notmuch Test Suite;=\r
+ thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Initial thread name (newest-first search)...\t"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-08 [4/4] Notmuch Test Suite;=\r
+ thread-naming: Final thread subject (inbox unread)"\r
+-\r
+-# Remove oldest and newest messages from search results\r
+-$NOTMUCH tag -inbox id:$parent or id:$final\r
+-\r
+-printf " Changed thread name (oldest-first search)...\t"\r
+-output=3D$($NOTMUCH search --sort=3Doldest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-06 [2/4] Notmuch Test Suite;=\r
+ thread-naming: Older changed subject (inbox unread)"\r
+-\r
+-printf " Changed thread name (newest-first search)...\t"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-07 [2/4] Notmuch Test Suite;=\r
+ thread-naming: Newer changed subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Re:)...\t\t"\r
+-add_message '[subject]=3D"Re: thread-naming: Initial thread subject"' \\r
+-            '[date]=3D"Tue, 09 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-09 [3/5] Notmuch Test Suite;=\r
+ thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Aw:)...\t\t"\r
+-add_message '[subject]=3D"Aw: thread-naming: Initial thread subject"' \\r
+-            '[date]=3D"Wed, 10 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-10 [4/6] Notmuch Test Suite;=\r
+ thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Vs:)...\t\t"\r
+-add_message '[subject]=3D"Vs: thread-naming: Initial thread subject"' \\r
+-            '[date]=3D"Thu, 11 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-11 [5/7] Notmuch Test Suite;=\r
+ thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Sv:)...\t\t"\r
+-add_message '[subject]=3D"Sv: thread-naming: Initial thread subject"' \\r
+-            '[date]=3D"Fri, 12 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=3D\<$parent\>"\r
+-output=3D$($NOTMUCH search --sort=3Dnewest-first thread-naming and tag:inb=\r
+ox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-12 [6/8] Notmuch Test Suite;=\r
+ thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Test order of messages in \"notmuch show\"\t"\r
+-output=3D$($NOTMUCH show thread-naming | notmuch_show_sanitize)\r
+-pass_if_equal "$output" "\f\r
+message{ id:msg-$(printf "%03d" $first)@notmuch-=\r
+test-suite depth:0 match:1 filename:/XXX/mail/msg-$(printf "%03d" $first)\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (unread)\r
+-Subject: thread-naming: Initial thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Fri, 05 Jan 2001 15:43:56 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$first)\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 1)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 1)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-06) (inbox unread)\r
+-Subject: thread-naming: Older changed subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Sat, 06 Jan 2001 15:43:56 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 1)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 2)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 2)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-07) (inbox unread)\r
+-Subject: thread-naming: Newer changed subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Sun, 07 Jan 2001 15:43:56 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 2)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 3)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 3)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-08) (unread)\r
+-Subject: thread-naming: Final thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Mon, 08 Jan 2001 15:43:56 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 3)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 4)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 4)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-09) (inbox unread)\r
+-Subject: Re: thread-naming: Initial thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Tue, 09 Jan 2001 15:43:45 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 4)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 5)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 5)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-10) (inbox unread)\r
+-Subject: Aw: thread-naming: Initial thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Wed, 10 Jan 2001 15:43:45 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 5)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 6)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 6)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-11) (inbox unread)\r
+-Subject: Vs: thread-naming: Initial thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Thu, 11 Jan 2001 15:43:45 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 6)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}\r
+-\f\r
+message{ id:msg-$(printf "%03d" $((first + 7)))@notmuch-test-suite depth:=\r
+1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 7)))\r
+-\f\r
+header{\r
+-Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-12) (inbox unread)\r
+-Subject: Sv: thread-naming: Initial thread subject\r
+-From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
+-Date: Fri, 12 Jan 2001 15:43:45 -0800\r
+-\f\r
+header}\r
+-\f\r
+body{\r
+-\f\r
+part{ ID: 1, Content-type: text/plain\r
+-This is just a test message (#$((first + 7)))\r
+-\f\r
+part}\r
+-\f\r
+body}\r
+-\f\r
+message}"\r
+-\r
+-printf "\nTesting \"notmuch reply\" in several variations:\n"\r
+-\r
+-printf " Basic reply...\t\t\t\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dtest_suite@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"basic reply test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> basic reply test"\r
+-\r
+-printf " Multiple recipients...\t\t\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-            '[to]=3D"test_suite@notmuchmail.org, Someone Else <someone@exa=\r
+mple.com>"' \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"Multiple recipients"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, Someone Else <someone@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> Multiple recipients"\r
+-\r
+-printf " Reply with CC...\t\t\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dtest_suite@notmuchmail.org \\r
+-            '[cc]=3D"Other Parties <cc@example.com>"' \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"reply with CC"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>\r
+-Cc: Other Parties <cc@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> reply with CC"\r
+-\r
+-printf " Reply from alternate address...\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dtest_suite_other@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"reply from alternate address"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuc=\r
+hmail.org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> reply from alternate address"\r
+-\r
+-printf " Support for Reply-To...\t\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dtest_suite@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"support for reply-to"' \\r
+-            '[reply-to]=3D"Sender <elsewhere@example.com>"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <elsewhere@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> support for reply-to"\r
+-\r
+-printf " Un-munging Reply-To...\t\t\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-            '[to]=3D"Some List <list@example.com>"' \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"Un-munging Reply-To"' \\r
+-            '[reply-to]=3D"Evil Munging List <list@example.com>"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, Some List <list@example.com>\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> Un-munging Reply-To"\r
+-\r
+-printf "\nTesting handling of uuencoded data:\n"\r
+-\r
+-add_message [subject]=3Duuencodetest '[date]=3D"Sat, 01 Jan 2000 12:00:00 =\r
+-0000"' \\r
+-'[body]=3D"This message is used to ensure that notmuch correctly handles a\r
+-message containing a block of uuencoded data. First, we have a marker\r
+-this content beforeuudata . Then we beging the uunencoded data itself:\r
+-\r
+-begin 644 bogus-uuencoded-data\r
+-M0123456789012345678901234567890123456789012345678901234567890\r
+-MOBVIOUSLY, THIS IS NOT ANY SORT OF USEFUL UUNECODED DATA.=20=20=20=20\r
+-MINSTEAD THIS IS JUST A WAY TO ENSURE THAT THIS BLOCK OF DATA=20\r
+-MIS CORRECTLY IGNORED WHEN NOTMUCH CREATES ITS INDEX. SO WE=20=20=20\r
+-MINCLUDE A DURINGUUDATA MARKER THAT SHOULD NOT RESULT IN ANY=20=20\r
+-MSEARCH RESULT.=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=\r
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=\r
+=20=20=20\r
+-\`\r
+-end\r
+-\r
+-Finally, we have our afteruudata marker as well."'\r
+-\r
+-printf " Ensure content before uu data is indexed...\t"\r
+-output=3D$($NOTMUCH search beforeuudata | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ uuencodetest (inbox unread)"\r
+-printf " Ensure uu data is not indexed...\t\t"\r
+-output=3D$($NOTMUCH search DURINGUUDATA | notmuch_search_sanitize)\r
+-pass_if_equal "$output" ""\r
+-printf " Ensure content after uu data is indexed...\t"\r
+-output=3D$($NOTMUCH search afteruudata | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ uuencodetest (inbox unread)"\r
+-\r
+-printf "\nTesting \"notmuch dump\" and \"notmuch restore\":\n"\r
+-\r
+-printf " Dumping all tags...\t\t\t\t"\r
+-$NOTMUCH dump dump.expected\r
+-pass_if_equal "$?" "0"\r
+-\r
+-printf " Clearing all tags...\t\t\t\t"\r
+-sed -e 's/(\([^(]*\))$/()/' < dump.expected > clear.expected\r
+-$NOTMUCH restore clear.expected\r
+-$NOTMUCH dump clear.actual\r
+-pass_if_equal "$(< clear.actual)" "$(< clear.expected)"\r
+-\r
+-printf " Restoring original tags...\t\t\t"\r
+-$NOTMUCH restore dump.expected\r
+-$NOTMUCH dump dump.actual\r
+-pass_if_equal "$(< dump.actual)" "$(< dump.expected)"\r
+-\r
+-printf " Restore with nothing to do...\t\t\t"\r
+-$NOTMUCH restore dump.expected\r
+-pass_if_equal "$?" "0"\r
+-\r
+-printf "\nTesting threading when messages received out of order:\n"\r
+-printf " Adding initial child message...\t\t"\r
+-generate_message [body]=3Dfoo '[in-reply-to]=3D\<parent-id\>' [subject]=3D=\r
+brokenthreadtest '[date]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Searching returns the message...\t\t"\r
+-output=3D$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite;=\r
+ brokenthreadtest (inbox unread)"\r
+-printf " Adding second child message...\t\t\t"\r
+-generate_message [body]=3Dfoo '[in-reply-to]=3D\<parent-id\>' [subject]=3D=\r
+brokenthreadtest '[date]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Searching returns both messages in one thread..."\r
+-output=3D$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [2/2] Notmuch Test Suite;=\r
+ brokenthreadtest (inbox unread)"\r
+-printf " Adding parent message...\t\t\t"\r
+-generate_message [body]=3Dfoo [id]=3Dparent-id [subject]=3Dbrokenthreadtes=\r
+t '[date]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Searching returns all three messages in one thread..."\r
+-output=3D$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] Notmuch Test Suite;=\r
+ brokenthreadtest (inbox unread)"\r
+-\r
+-printf "\nTesting author reordering;\n"\r
+-printf " Adding parent message...\t\t\t"\r
+-generate_message [body]=3Dfindme [id]=3Dnew-parent-id [subject]=3Dauthor-r=\r
+eorder-threadtest '[from]=3D"User <user@example.com>"' '[date]=3D"Sat, 01 J=\r
+an 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Adding initial child message...\t\t"\r
+-generate_message [body]=3Dfindme '[in-reply-to]=3D\<new-parent-id\>' [subj=\r
+ect]=3Dauthor-reorder-threadtest '[from]=3D"User1 <user1@example.com>"' '[d=\r
+ate]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Adding second child message...\t\t\t"\r
+-generate_message [body]=3Dfindme '[in-reply-to]=3D\<new-parent-id\>' [subj=\r
+ect]=3Dauthor-reorder-threadtest '[from]=3D"User2 <user2@example.com>"' '[d=\r
+ate]=3D"Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=3D$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Searching when all three messages match...\t"\r
+-output=3D$($NOTMUCH search findme | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] User, User1, User2;=\r
+ author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when two messages match...\t\t"\r
+-output=3D$($NOTMUCH search User1 or User2 | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [2/3] User1, User2| User;=\r
+ author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when only one message matches...\t"\r
+-output=3D$($NOTMUCH search User2 | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User2| User, User1;=\r
+ author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when only first message matches...\t"\r
+-output=3D$($NOTMUCH search User | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User| User1, User2;=\r
+ author-reorder-threadtest (inbox unread)"\r
+-\r
+-printf "\nTesting From line heuristics (with multiple configured addresses=\r
+):\n"\r
+-printf " Magic from guessing (nothing to go on)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Envelope-to:)...\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Envelope-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuc=\r
+hmail.org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (X-Original-To:)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"X-Original-To: test_suite_other@notmuchmail.org"'=\r
+ \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuc=\r
+hmail.org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Received: .. for ..)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Received: from mail.example.com (mail.example.com=\r
+ [1.1.1.1])\\r
+-        by mail.notmuchmail.org (some MTA) with ESMTP id 12345678\\r
+-        for <test_suite_other@notmuchmail.org>; Sat, 10 Apr 2010 07:54:51 =\r
+-0400 (EDT)"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuc=\r
+hmail.org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Received: domain)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Received: from mail.example.com (mail.example.com=\r
+ [1.1.1.1])\\r
+-        by mail.otherdomain.org (some MTA) with ESMTP id 12345678\\r
+-        Sat, 10 Apr 2010 07:54:51 -0400 (EDT)"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@otherdomain.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-\r
+-printf "\nTesting From line heuristics (with single configured address):\n"\r
+-sed -i -e 's/^other_email.*//' ${NOTMUCH_CONFIG}\r
+-\r
+-printf " Magic from guessing (nothing to go on)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Envelope-to:)...\t\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Envelope-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (X-Original-To:)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"X-Original-To: test_suite_other@notmuchmail.org"'=\r
+ \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Received: .. for ..)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Received: from mail.example.com (mail.example.com=\r
+ [1.1.1.1])\\r
+-        by mail.notmuchmail.org (some MTA) with ESMTP id 12345678\\r
+-        for <test_suite_other@notmuchmail.org>; Sat, 10 Apr 2010 07:54:51 =\r
+-0400 (EDT)"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
+-\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
+-\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
+-\r
+-printf " Magic from guessing (Received: domain)...\t"\r
+-add_message '[from]=3D"Sender <sender@example.com>"' \\r
+-             [to]=3Dmailinglist@notmuchmail.org \\r
+-             [subject]=3Dnotmuch-reply-test \\r
+-            '[header]=3D"Received: from mail.example.com (mail.example.com=\r
+ [1.1.1.1])\\r
+-        by mail.otherdomain.org (some MTA) with ESMTP id 12345678\\r
+-        Sat, 10 Apr 2010 07:54:51 -0400 (EDT)"' \\r
+-            '[date]=3D"Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]=3D"from guessing test"'\r
++run_collection_setup_and_tests ()\r
++{\r
++    for testfile in $(find ${TEST_COLLECTION_DIR}/$1 \\r
++      -name "*.test" -o -name "*.setup" |\r
++      sort -n);\r
++    do\r
++      source $testfile\r
++    done\r
++}\r
+=20\r
+-output=3D$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.=\r
+org>\r
+-Subject: Re: notmuch-reply-test\r
+-To: Sender <sender@example.com>, mailinglist@notmuchmail.org\r
+-Bcc: test_suite@notmuchmail.org\r
+-In-Reply-To: <${gen_msg_id}>\r
+-References: <${gen_msg_id}>\r
++run_test_suite ()\r
++{\r
++    initialize_notmuch_test;\r
++\r
++    if [ "$#" =3D "0" -o "$1" =3D "all" ]; then\r
++      for dir in $(echo ${TEST_COLLECTIONS}); do\r
++          run_collection_setup_and_tests "$(basename ${dir})";\r
++      done;\r
++    elif [ ! -d "${TEST_COLLECTION_DIR}/$1" ]; then\r
++      echo "${TEST_COLLECTION_DIR}/$1 is not a directory"\r
++      exit\r
++    else\r
++      run_collection_setup_and_tests "$1";\r
++    fi\r
++}\r
+=20\r
+-On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:\r
+-> from guessing test"\r
++run_test_suite $1\r
+=20\r
+ echo ""\r
+ echo "Notmuch test suite complete."\r
+--=20\r
+1.6.3.3\r
+\r