[PATCH v2 4/5] Convert the actual tests to the new framework
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 10 May 2010 16:48:03 +0000 (18:48 +0200)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:37:02 +0000 (09:37 -0800)
3f/ebdc0008f5a42bc697f1ff8025039dc72d9784 [new file with mode: 0644]

diff --git a/3f/ebdc0008f5a42bc697f1ff8025039dc72d9784 b/3f/ebdc0008f5a42bc697f1ff8025039dc72d9784
new file mode 100644 (file)
index 0000000..0dabb1c
--- /dev/null
@@ -0,0 +1,2421 @@
+Return-Path: <sojkam1@fel.cvut.cz>\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 9B1294196F0\r
+       for <notmuch@notmuchmail.org>; Mon, 10 May 2010 09:49:18 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -1.899\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5\r
+       tests=[BAYES_00=-1.9, NORMAL_HTTP_TO_IP=0.001] 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 WAJh6kUfZGaA for <notmuch@notmuchmail.org>;\r
+       Mon, 10 May 2010 09:48:55 -0700 (PDT)\r
+Received: from max.feld.cvut.cz (max.feld.cvut.cz [147.32.192.36])\r
+       by olra.theworths.org (Postfix) with ESMTP id D5CCF418C34\r
+       for <notmuch@notmuchmail.org>; Mon, 10 May 2010 09:48:23 -0700 (PDT)\r
+Received: from localhost (unknown [192.168.200.4])\r
+       by max.feld.cvut.cz (Postfix) with ESMTP id 37BE119F3439;\r
+       Mon, 10 May 2010 18:48:23 +0200 (CEST)\r
+X-Virus-Scanned: IMAP AMAVIS\r
+Received: from max.feld.cvut.cz ([192.168.200.1])\r
+       by localhost (styx.feld.cvut.cz [192.168.200.4]) (amavisd-new,\r
+       port 10044)\r
+       with ESMTP id 2gcqQPNSabAx; Mon, 10 May 2010 18:48:14 +0200 (CEST)\r
+Received: from imap.feld.cvut.cz (imap.feld.cvut.cz [147.32.192.34])\r
+       by max.feld.cvut.cz (Postfix) with ESMTP id 9D71B19F343F;\r
+       Mon, 10 May 2010 18:48:14 +0200 (CEST)\r
+Received: from steelpick.2x.cz (k335-30.felk.cvut.cz [147.32.86.30])\r
+       (Authenticated sender: sojkam1)\r
+       by imap.feld.cvut.cz (Postfix) with ESMTPSA id 93EBAFA003;\r
+       Mon, 10 May 2010 18:48:14 +0200 (CEST)\r
+Received: from wsh by steelpick.2x.cz with local (Exim 4.71)\r
+       (envelope-from <sojkam1@fel.cvut.cz>)\r
+       id 1OBW9O-0005Be-EL; Mon, 10 May 2010 18:48:14 +0200\r
+From: Michal Sojka <sojkam1@fel.cvut.cz>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH v2 4/5] Convert the actual tests to the new framework\r
+Date: Mon, 10 May 2010 18:48:03 +0200\r
+Message-Id: <1273510084-19896-5-git-send-email-sojkam1@fel.cvut.cz>\r
+X-Mailer: git-send-email 1.7.1\r
+In-Reply-To: <1273510084-19896-1-git-send-email-sojkam1@fel.cvut.cz>\r
+References: <1273510084-19896-1-git-send-email-sojkam1@fel.cvut.cz>\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: Mon, 10 May 2010 16:49:18 -0000\r
+\r
+The changes are:\r
+- The notmuch-test was split into several files (t000?-*.sh).\r
+- Removed helper functions which were moved to test-lib.sh\r
+- Replaced every printf with test_expect_success.\r
+- Test commands chained with && (test-lib.sh doesn't use "set -e" in\r
+  order to complete the test suite even if something fails)\r
+- Many variables such as ${MAIL_DIR} were properly quoted as they\r
+  contain spaces.\r
+- Changed quoting patterns in add_message and generate_message (single\r
+  quotes are already used by the test framework).\r
+- ${TEST_DIR} replaced by ${PWD}\r
+\r
+QUICK HOWTO:\r
+\r
+To run the whole test suite\r
+    make\r
+\r
+To run only a single test\r
+   ./t0001-new.sh\r
+\r
+To stop on the first error\r
+   ./t0001-new.sh -i\r
+then mail store and database can be inspected in\r
+"trash directory.t0001-new"\r
+\r
+To see the output of tests\r
+   ./t0001-new.sh -v\r
+\r
+To not remove trash directory at the end:\r
+   ./t0001-new.sh -d\r
+\r
+To run all tests verbosely:\r
+   make GIT_TEST_OPTS="-v"\r
+\r
+Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>\r
+---\r
+ test/notmuch-test                    | 1114 +---------------------------------\r
+ test/t0000-basic.sh                  |    2 +-\r
+ test/t0001-new.sh                    |  164 +++++\r
+ test/t0002-search.sh                 |  111 ++++\r
+ test/t0003-json.sh                   |   46 ++\r
+ test/t0004-thread-naming.sh          |  191 ++++++\r
+ test/t0005-reply.sh                  |  122 ++++\r
+ test/t0006-dump-restore.sh           |   30 +\r
+ test/t0007-uuencode.sh               |   36 ++\r
+ test/t0008-threading-out-of-order.sh |   31 +\r
+ test/t0009-author-reordering.sh      |   35 ++\r
+ test/t0010-from-line-heuristics.sh   |  214 +++++++\r
+ 12 files changed, 983 insertions(+), 1113 deletions(-)\r
+ create mode 100755 test/t0001-new.sh\r
+ create mode 100755 test/t0002-search.sh\r
+ create mode 100755 test/t0003-json.sh\r
+ create mode 100755 test/t0004-thread-naming.sh\r
+ create mode 100755 test/t0005-reply.sh\r
+ create mode 100755 test/t0006-dump-restore.sh\r
+ create mode 100755 test/t0007-uuencode.sh\r
+ create mode 100755 test/t0008-threading-out-of-order.sh\r
+ create mode 100755 test/t0009-author-reordering.sh\r
+ create mode 100755 test/t0010-from-line-heuristics.sh\r
+\r
+diff --git a/test/notmuch-test b/test/notmuch-test\r
+index a861df1..5c066ed 100755\r
+--- a/test/notmuch-test\r
++++ b/test/notmuch-test\r
+@@ -1,1114 +1,4 @@\r
+ #!/bin/bash\r
+-set -e\r
\r
+-# Messages contain time/date values with time zone and notmuch\r
+-# displays them converted to the local time zone. We need to set fixed\r
+-# timezone here so that the output of the tests is always the same\r
+-# without regard to the time zone of where the test suite is run.\r
+-export TZ=UTC+8\r
+-\r
+-find_notmuch_binary ()\r
+-{\r
+-    dir=$1\r
+-\r
+-    while [ -n "$dir" ]; do\r
+-      bin=$dir/notmuch\r
+-      if [ -x $bin ]; then\r
+-          echo $bin\r
+-          return\r
+-      fi\r
+-      dir=$(dirname $dir)\r
+-      if [ "$dir" = "/" ]; then\r
+-          break\r
+-      fi\r
+-    done\r
+-\r
+-    echo notmuch\r
+-}\r
+-\r
+-increment_mtime_amount=0\r
+-increment_mtime ()\r
+-{\r
+-    dir=$1\r
+-\r
+-    increment_mtime_amount=$((increment_mtime_amount + 1))\r
+-    touch -d "+${increment_mtime_amount} seconds" $dir\r
+-}\r
+-\r
+-# Generate a new message in the mail directory, with a unique message\r
+-# ID and subject. The message is not added to the index.\r
+-#\r
+-# After this function returns, the filename of the generated message\r
+-# is available as $gen_msg_filename and the message ID is available as\r
+-# $gen_msg_id .\r
+-#\r
+-# This function supports named parameters with the bash syntax for\r
+-# assigning a value to an associative array ([name]=value). The\r
+-# supported parameters are:\r
+-#\r
+-#  [dir]=directory/of/choice\r
+-#\r
+-#     Generate the message in directory 'directory/of/choice' within\r
+-#     the mail store. The directory will be created if necessary.\r
+-#\r
+-#  [body]=text\r
+-#\r
+-#     Text to use as the body of the email message\r
+-#\r
+-#  '[from]="Some User <user@example.com>"'\r
+-#  '[to]="Some User <user@example.com>"'\r
+-#  '[subject]="Subject of email message"'\r
+-#  '[date]="RFC 822 Date"'\r
+-#\r
+-#     Values for email headers. If not provided, default values will\r
+-#     be generated instead.\r
+-#\r
+-#  '[cc]="Some User <user@example.com>"'\r
+-#  [reply-to]=some-address\r
+-#  [in-reply-to]=<message-id>\r
+-#  '[header]=full header line, including keyword'\r
+-#\r
+-#     Additional values for email headers. If these are not provided\r
+-#     then the relevant headers will simply not appear in the\r
+-#     message.\r
+-#\r
+-#  '[id]=<message-id>'\r
+-#\r
+-#     Controls the message-id of the created message.\r
+-gen_msg_cnt=0\r
+-gen_msg_filename=""\r
+-gen_msg_id=""\r
+-generate_message ()\r
+-{\r
+-    # This is our (bash-specific) magic for doing named parameters\r
+-    local -A template="($@)"\r
+-    local additional_headers\r
+-\r
+-    if [ -z "${template[id]}" ]; then\r
+-      gen_msg_cnt=$((gen_msg_cnt + 1))\r
+-      gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt)\r
+-      gen_msg_id="${gen_msg_name}@notmuch-test-suite"\r
+-    else\r
+-      gen_msg_name="msg-${template[id]}"\r
+-      gen_msg_id="${template[id]}"\r
+-    fi\r
+-\r
+-    if [ -z "${template[dir]}" ]; then\r
+-      gen_msg_filename="${MAIL_DIR}/$gen_msg_name"\r
+-    else\r
+-      gen_msg_filename="${MAIL_DIR}/${template[dir]}/$gen_msg_name"\r
+-      mkdir -p $(dirname $gen_msg_filename)\r
+-    fi\r
+-\r
+-    if [ -z "${template[body]}" ]; then\r
+-      template[body]="This is just a test message (#${gen_msg_cnt})"\r
+-    fi\r
+-\r
+-    if [ -z "${template[from]}" ]; then\r
+-      template[from]="Notmuch Test Suite <test_suite@notmuchmail.org>"\r
+-    fi\r
+-\r
+-    if [ -z "${template[to]}" ]; then\r
+-      template[to]="Notmuch Test Suite <test_suite@notmuchmail.org>"\r
+-    fi\r
+-\r
+-    if [ -z "${template[subject]}" ]; then\r
+-      template[subject]="Test message #${gen_msg_cnt}"\r
+-    fi\r
+-\r
+-    if [ -z "${template[date]}" ]; then\r
+-      template[date]="Tue, 05 Jan 2001 15:43:57 -0800"\r
+-    fi\r
+-\r
+-    additional_headers=""\r
+-    if [ ! -z "${template[header]}" ]; then\r
+-      additional_headers="${template[header]}\r
+-${additional_headers}"\r
+-    fi\r
+-\r
+-    if [ ! -z "${template[reply-to]}" ]; then\r
+-      additional_headers="Reply-To: ${template[reply-to]}\r
+-${additional_headers}"\r
+-    fi\r
+-\r
+-    if [ ! -z "${template[in-reply-to]}" ]; then\r
+-      additional_headers="In-Reply-To: ${template[in-reply-to]}\r
+-${additional_headers}"\r
+-    fi\r
+-\r
+-    if [ ! -z "${template[cc]}" ]; then\r
+-      additional_headers="Cc: ${template[cc]}\r
+-${additional_headers}"\r
+-    fi\r
+-\r
+-\r
+-cat <<EOF >$gen_msg_filename\r
+-From: ${template[from]}\r
+-To: ${template[to]}\r
+-Message-Id: <${gen_msg_id}>\r
+-Subject: ${template[subject]}\r
+-Date: ${template[date]}\r
+-${additional_headers}\r
+-${template[body]}\r
+-EOF\r
+-\r
+-    # Ensure that the mtime of the containing directory is updated\r
+-    increment_mtime $(dirname ${gen_msg_filename})\r
+-}\r
+-\r
+-# Generate a new message and add it to the index.\r
+-#\r
+-# All of the arguments and return values supported by generate_message\r
+-# are also supported here, so see that function for details.\r
+-add_message ()\r
+-{\r
+-    generate_message "$@"\r
+-\r
+-    $NOTMUCH new > /dev/null\r
+-}\r
+-\r
+-tests=0\r
+-test_failures=0\r
+-\r
+-pass_if_equal ()\r
+-{\r
+-    output=$1\r
+-    expected=$2\r
+-\r
+-    tests=$((tests + 1))\r
+-\r
+-    if [ "$output" = "$expected" ]; then\r
+-      echo "  PASS"\r
+-    else\r
+-      echo "  FAIL"\r
+-      testname=test-$(printf "%03d" $tests)\r
+-      echo "$expected" > $testname.expected\r
+-      echo "$output" > $testname.output\r
+-      diff -u $testname.expected $testname.output || true\r
+-      test_failures=$((test_failures + 1))\r
+-    fi\r
+-}\r
+-\r
+-TEST_DIR=$(pwd)/test.$$\r
+-MAIL_DIR=${TEST_DIR}/mail\r
+-export NOTMUCH_CONFIG=${TEST_DIR}/notmuch-config\r
+-NOTMUCH=$(find_notmuch_binary $(pwd))\r
+-\r
+-NOTMUCH_NEW ()\r
+-{\r
+-    $NOTMUCH new | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'\r
+-}\r
+-\r
+-notmuch_search_sanitize ()\r
+-{\r
+-    sed -r -e 's/("?thread"?: ?)("?)................("?)/\1\2XXX\3/'\r
+-}\r
+-\r
+-NOTMUCH_SHOW_FILENAME_SQUELCH='s,filename:.*/mail,filename:/XXX/mail,'\r
+-notmuch_show_sanitize ()\r
+-{\r
+-    sed -e "$NOTMUCH_SHOW_FILENAME_SQUELCH"\r
+-}\r
+-\r
+-rm -rf ${TEST_DIR}\r
+-mkdir ${TEST_DIR}\r
+-cd ${TEST_DIR}\r
+-\r
+-mkdir ${MAIL_DIR}\r
+-\r
+-cat <<EOF > ${NOTMUCH_CONFIG}\r
+-[database]\r
+-path=${MAIL_DIR}\r
+-\r
+-[user]\r
+-name=Notmuch Test Suite\r
+-primary_email=test_suite@notmuchmail.org\r
+-other_email=test_suite_other@notmuchmail.org;test_suite@otherdomain.org\r
+-EOF\r
+-\r
+-printf "Testing \"notmuch new\" in several variations:\n"\r
+-printf " No new messages...\t\t\t\t"\r
+-output=$(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=$(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=$(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=$(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]=def\r
+-\r
+-output=$(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]=abc\r
+-\r
+-output=$(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=tmp/$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=$(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=$(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=$(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]=dir\r
+-generate_message [dir]=dir\r
+-generate_message [dir]=dir\r
+-\r
+-$NOTMUCH new > /dev/null\r
+-\r
+-mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed\r
+-increment_mtime ${MAIL_DIR}\r
+-\r
+-output=$(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=$(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]=zzz\r
+-generate_message [dir]=zzz\r
+-generate_message [dir]=zzz\r
+-\r
+-output=$(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=$(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=$(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=${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=$(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]=two/levels\r
+-generate_message [dir]=two/levels\r
+-generate_message [dir]=two/levels\r
+-\r
+-output=$(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=$(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]="body search"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [body]=bodysearchtest\r
+-output=$($NOTMUCH search bodysearchtest | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)"\r
+-\r
+-printf " Search by from:...\t\t\t\t"\r
+-add_message '[subject]="search by from"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom\r
+-output=$($NOTMUCH search from:searchbyfrom | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)"\r
+-\r
+-printf " Search by to:...\t\t\t\t"\r
+-add_message '[subject]="search by to"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto\r
+-output=$($NOTMUCH search to:searchbyto | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)"\r
+-\r
+-printf " Search by subject:...\t\t\t\t"\r
+-add_message [subject]=subjectsearchtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$($NOTMUCH search subject:subjectsearchtest | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)"\r
+-\r
+-printf " Search by id:...\t\t\t\t"\r
+-add_message '[subject]="search by id"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$($NOTMUCH search id:${gen_msg_id} | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)"\r
+-\r
+-printf " Search by tag:...\t\t\t\t"\r
+-add_message '[subject]="search by tag"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-$NOTMUCH tag +searchbytag id:${gen_msg_id}\r
+-output=$($NOTMUCH search tag:searchbytag | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)"\r
+-\r
+-printf " Search by thread:...\t\t\t\t"\r
+-add_message '[subject]="search by thread"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-thread_id=$($NOTMUCH search id:${gen_msg_id} | sed -e 's/thread:\([a-f0-9]*\).*/\1/')\r
+-output=$($NOTMUCH search thread:${thread_id} | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)"\r
+-\r
+-printf " Search body (phrase)...\t\t\t"\r
+-add_message '[subject]="body search (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="body search (phrase)"'\r
+-add_message '[subject]="negative result"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="This phrase should not match the body search"'\r
+-output=$($NOTMUCH search '\"body search (phrase)\"' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)"\r
+-\r
+-printf " Search by from: (address)...\t\t\t"\r
+-add_message '[subject]="search by from (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom@example.com\r
+-output=$($NOTMUCH search from:searchbyfrom@example.com | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)"\r
+-\r
+-printf " Search by from: (name)...\t\t\t"\r
+-add_message '[subject]="search by from (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[from]="Search By From Name <test@example.com>"'\r
+-output=$($NOTMUCH search from:'Search By From Name' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"\r
+-\r
+-printf " Search by to: (address)...\t\t\t"\r
+-add_message '[subject]="search by to (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto@example.com\r
+-output=$($NOTMUCH search to:searchbyto@example.com | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)"\r
+-\r
+-printf " Search by to: (name)...\t\t\t"\r
+-add_message '[subject]="search by to (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[to]="Search By To Name <test@example.com>"'\r
+-output=$($NOTMUCH search to:'Search By To Name' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"\r
+-\r
+-printf " Search by subject: (phrase)...\t\t\t"\r
+-add_message '[subject]="subject search test (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-add_message '[subject]="this phrase should not match the subject search test"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$($NOTMUCH search 'subject:\"subject search test (phrase)\"' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)"\r
+-\r
+-printf " Search for all messages (\"*\"):...\t\t"\r
+-output=$($NOTMUCH search '*' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Test message #6 (inbox unread)\r
+-thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Test message #14 (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)\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 unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; negative result (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)\r
+-thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; this phrase should not match the subject search test (inbox unread)"\r
+-\r
+-printf " Search body (utf-8):...\t\t\t"\r
+-add_message '[subject]="utf8-message-body-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="message body utf8: bödý"'\r
+-output=$($NOTMUCH search 'bödý' | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-message-body-subject (inbox unread)"\r
+-\r
+-printf "\nTesting --format=json output:\n"\r
+-\r
+-printf " Show message: json...\t\t\t\t"\r
+-add_message '[subject]="json-show-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="json-show-message"'\r
+-output=$($NOTMUCH show --format=json 'json-show-message')\r
+-pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "filename": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-subject", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc": "", "Bcc": "", "Date": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "json-show-message\n"}]}, []]]]'\r
+-\r
+-printf " Search message: json...\t\t\t"\r
+-add_message '[subject]="json-search-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="json-search-message"'\r
+-output=$($NOTMUCH search --format=json 'json-search-message' | 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-subject",\r
+-"tags": ["inbox", "unread"]}]'\r
+-\r
+-printf " Search by subject (utf-8):...\t\t\t"\r
+-add_message [subject]=utf8-sübjéct '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$($NOTMUCH search subject:utf8-sübjéct | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-sübjéct (inbox unread)"\r
+-\r
+-printf " Show message: json, utf-8...\t\t\t"\r
+-add_message '[subject]="json-show-utf8-body-sübjéct"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="jsön-show-méssage"'\r
+-output=$($NOTMUCH show --format=json 'jsön-show-méssage')\r
+-pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "filename": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-utf8-body-sübjéct", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc": "", "Bcc": "", "Date": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "jsön-show-méssage\n"}]}, []]]]'\r
+-\r
+-printf " Search message: json, utf-8...\t\t\t"\r
+-add_message '[subject]="json-search-utf8-body-sübjéct"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="jsön-search-méssage"'\r
+-output=$($NOTMUCH search --format=json 'jsön-search-méssage' | 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übjéct",\r
+-"tags": ["inbox", "unread"]}]'\r
+-\r
+-printf "\nTesting naming of threads with changing subject:\n"\r
+-add_message '[subject]="thread-naming: Initial thread subject"' \\r
+-            '[date]="Fri, 05 Jan 2001 15:43:56 -0800"'\r
+-first=${gen_msg_cnt}\r
+-parent=${gen_msg_id}\r
+-add_message '[subject]="thread-naming: Older changed subject"' \\r
+-            '[date]="Sat, 06 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-add_message '[subject]="thread-naming: Newer changed subject"' \\r
+-            '[date]="Sun, 07 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-add_message '[subject]="thread-naming: Final thread subject"' \\r
+-            '[date]="Mon, 08 Jan 2001 15:43:56 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-final=${gen_msg_id}\r
+-\r
+-printf " Initial thread name (oldest-first search)...\t"\r
+-output=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-05 [4/4] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Initial thread name (newest-first search)...\t"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-08 [4/4] Notmuch Test Suite; 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=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-06 [2/4] Notmuch Test Suite; thread-naming: Older changed subject (inbox unread)"\r
+-\r
+-printf " Changed thread name (newest-first search)...\t"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-07 [2/4] Notmuch Test Suite; thread-naming: Newer changed subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Re:)...\t\t"\r
+-add_message '[subject]="Re: thread-naming: Initial thread subject"' \\r
+-            '[date]="Tue, 09 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-09 [3/5] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Aw:)...\t\t"\r
+-add_message '[subject]="Aw: thread-naming: Initial thread subject"' \\r
+-            '[date]="Wed, 10 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-10 [4/6] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Vs:)...\t\t"\r
+-add_message '[subject]="Vs: thread-naming: Initial thread subject"' \\r
+-            '[date]="Thu, 11 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-11 [5/7] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Ignore added reply prefix (Sv:)...\t\t"\r
+-add_message '[subject]="Sv: thread-naming: Initial thread subject"' \\r
+-            '[date]="Fri, 12 Jan 2001 15:43:45 -0800"' \\r
+-            "[in-reply-to]=\<$parent\>"\r
+-output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2001-01-12 [6/8] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
+-\r
+-printf " Test order of messages in \"notmuch show\"\t"\r
+-output=$($NOTMUCH show thread-naming | notmuch_show_sanitize)\r
+-pass_if_equal "$output" "\f\r
+message{ id:msg-$(printf "%03d" $first)@notmuch-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: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: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: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: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: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: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: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]="Sender <sender@example.com>"' \\r
+-             [to]=test_suite@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="basic reply test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-            '[to]="test_suite@notmuchmail.org, Someone Else <someone@example.com>"' \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="Multiple recipients"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=test_suite@notmuchmail.org \\r
+-            '[cc]="Other Parties <cc@example.com>"' \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="reply with CC"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=test_suite_other@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="reply from alternate address"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=test_suite@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="support for reply-to"' \\r
+-            '[reply-to]="Sender <elsewhere@example.com>"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-            '[to]="Some List <list@example.com>"' \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="Un-munging Reply-To"' \\r
+-            '[reply-to]="Evil Munging List <list@example.com>"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]=uuencodetest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' \\r
+-'[body]="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.    \r
+-MINSTEAD THIS IS JUST A WAY TO ENSURE THAT THIS BLOCK OF DATA \r
+-MIS CORRECTLY IGNORED WHEN NOTMUCH CREATES ITS INDEX. SO WE   \r
+-MINCLUDE A DURINGUUDATA MARKER THAT SHOULD NOT RESULT IN ANY  \r
+-MSEARCH RESULT.                                               \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=$($NOTMUCH search beforeuudata | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"\r
+-printf " Ensure uu data is not indexed...\t\t"\r
+-output=$($NOTMUCH search DURINGUUDATA | notmuch_search_sanitize)\r
+-pass_if_equal "$output" ""\r
+-printf " Ensure content after uu data is indexed...\t"\r
+-output=$($NOTMUCH search afteruudata | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; 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]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(NOTMUCH_NEW)\r
+-pass_if_equal "$output" "Added 1 new message to the database."\r
+-printf " Searching returns the message...\t\t"\r
+-output=$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
+-printf " Adding second child message...\t\t\t"\r
+-generate_message [body]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(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=$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [2/2] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
+-printf " Adding parent message...\t\t\t"\r
+-generate_message [body]=foo [id]=parent-id [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(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=$($NOTMUCH search foo | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
+-\r
+-printf "\nTesting author reordering;\n"\r
+-printf " Adding parent message...\t\t\t"\r
+-generate_message [body]=findme [id]=new-parent-id [subject]=author-reorder-threadtest '[from]="User <user@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(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]=findme '[in-reply-to]=\<new-parent-id\>' [subject]=author-reorder-threadtest '[from]="User1 <user1@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(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]=findme '[in-reply-to]=\<new-parent-id\>' [subject]=author-reorder-threadtest '[from]="User2 <user2@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'\r
+-output=$(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=$($NOTMUCH search findme | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] User, User1, User2; author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when two messages match...\t\t"\r
+-output=$($NOTMUCH search User1 or User2 | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [2/3] User1, User2| User; author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when only one message matches...\t"\r
+-output=$($NOTMUCH search User2 | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User2| User, User1; author-reorder-threadtest (inbox unread)"\r
+-printf " Searching when only first message matches...\t"\r
+-output=$($NOTMUCH search User | notmuch_search_sanitize)\r
+-pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User| User1, User2; author-reorder-threadtest (inbox unread)"\r
+-\r
+-printf "\nTesting From line heuristics (with multiple configured addresses):\n"\r
+-printf " Magic from guessing (nothing to go on)...\t"\r
+-add_message '[from]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Envelope-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="X-Original-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Received: from mail.example.com (mail.example.com [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 -0400 (EDT)"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Received: from mail.example.com (mail.example.com [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]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@otherdomain.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Envelope-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="X-Original-To: test_suite_other@notmuchmail.org"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Received: from mail.example.com (mail.example.com [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 -0400 (EDT)"' \\r
+-            '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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]="Sender <sender@example.com>"' \\r
+-             [to]=mailinglist@notmuchmail.org \\r
+-             [subject]=notmuch-reply-test \\r
+-            '[header]="Received: from mail.example.com (mail.example.com [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]="Tue, 05 Jan 2010 15:43:56 -0800"' \\r
+-            '[body]="from guessing test"'\r
+-\r
+-output=$($NOTMUCH reply id:${gen_msg_id})\r
+-pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
+-echo ""\r
+-echo "Notmuch test suite complete."\r
+-\r
+-if [ "$test_failures" = "0" ]; then\r
+-    echo "All $tests tests passed."\r
+-    rm -rf ${TEST_DIR}\r
+-else\r
+-    echo "$test_failures/$tests tests failed. The failures can be investigated in:"\r
+-    echo "${TEST_DIR}"\r
+-fi\r
+-\r
+-echo ""\r
+-\r
+-exit $test_failures\r
++cd $(dirname $0)\r
++make\r
+diff --git a/test/t0000-basic.sh b/test/t0000-basic.sh\r
+index caade68..511e200 100755\r
+--- a/test/t0000-basic.sh\r
++++ b/test/t0000-basic.sh\r
+@@ -1,4 +1,4 @@\r
+-#!/bin/sh\r
++#!/bin/bash\r
+ #\r
+ # Copyright (c) 2005 Junio C Hamano\r
+ #\r
+diff --git a/test/t0001-new.sh b/test/t0001-new.sh\r
+new file mode 100755\r
+index 0000000..97726e7\r
+--- /dev/null\r
++++ b/test/t0001-new.sh\r
+@@ -0,0 +1,164 @@\r
++#!/bin/bash\r
++test_description="\"notmuch new\" in several variations"\r
++. ./test-lib.sh\r
++test_expect_success "No new messages" '\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail."\r
++\r
++'\r
++test_expect_success "Single new message" '\r
++generate_message &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "Multiple new messages" '\r
++generate_message &&\r
++generate_message &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 2 new messages to the database."\r
++\r
++'\r
++test_expect_success "No new messages (non-empty DB)" '\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail."\r
++\r
++'\r
++test_expect_success "New directories" '\r
++rm -rf "${MAIL_DIR}"/* "${MAIL_DIR}"/.notmuch &&\r
++mkdir "${MAIL_DIR}"/def &&\r
++mkdir "${MAIL_DIR}"/ghi &&\r
++generate_message [dir]=def &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "Alternate inode order" '\r
++\r
++rm -rf "${MAIL_DIR}"/.notmuch &&\r
++mv "${MAIL_DIR}"/ghi "${MAIL_DIR}"/abc &&\r
++rm "${MAIL_DIR}"/def/* &&\r
++generate_message [dir]=abc &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "Message moved in" '\r
++rm -rf "${MAIL_DIR}"/* "${MAIL_DIR}"/.notmuch &&\r
++generate_message &&\r
++tmp_msg_filename=tmp/"$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=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "Renamed message" '\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=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Detected 1 file rename."\r
++\r
++'\r
++test_expect_success "Deleted message" '\r
++\r
++rm "${gen_msg_filename}"-renamed &&\r
++increment_mtime "${MAIL_DIR}" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Removed 1 message."\r
++\r
++'\r
++test_expect_success "Renamed directory" '\r
++\r
++generate_message [dir]=dir &&\r
++generate_message [dir]=dir &&\r
++generate_message [dir]=dir &&\r
++\r
++$NOTMUCH new > /dev/null &&\r
++\r
++mv "${MAIL_DIR}"/dir "${MAIL_DIR}"/dir-renamed &&\r
++increment_mtime "${MAIL_DIR}" &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Detected 3 file renames."\r
++\r
++'\r
++test_expect_success "Deleted directory" '\r
++\r
++rm -rf "${MAIL_DIR}"/dir-renamed &&\r
++increment_mtime "${MAIL_DIR}" &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Removed 3 messages."\r
++\r
++'\r
++test_expect_success "New directory (at end of list)" '\r
++\r
++generate_message [dir]=zzz &&\r
++generate_message [dir]=zzz &&\r
++generate_message [dir]=zzz &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 3 new messages to the database."\r
++\r
++'\r
++test_expect_success "Deleted directory (end of list)" '\r
++\r
++rm -rf "${MAIL_DIR}"/zzz &&\r
++increment_mtime "${MAIL_DIR}" &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Removed 3 messages."\r
++\r
++'\r
++test_expect_success "New symlink to directory" '\r
++\r
++rm -rf "${MAIL_DIR}"/.notmuch &&\r
++mv "${MAIL_DIR}" "$PWD"/actual_maildir &&\r
++\r
++mkdir "${MAIL_DIR}" &&\r
++ln -s "$PWD"/actual_maildir "${MAIL_DIR}"/symlink &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "New symlink to a file" '\r
++generate_message &&\r
++external_msg_filename="$PWD"/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=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++\r
++'\r
++test_expect_success "New two-level directory" '\r
++\r
++generate_message [dir]=two/levels &&\r
++generate_message [dir]=two/levels &&\r
++generate_message [dir]=two/levels &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 3 new messages to the database."\r
++\r
++'\r
++test_expect_success "Deleted two-level directory" '\r
++\r
++rm -rf "${MAIL_DIR}"/two &&\r
++increment_mtime "${MAIL_DIR}" &&\r
++\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "No new mail. Removed 3 messages."\r
++'\r
++test_done\r
+diff --git a/test/t0002-search.sh b/test/t0002-search.sh\r
+new file mode 100755\r
+index 0000000..7de4d47\r
+--- /dev/null\r
++++ b/test/t0002-search.sh\r
+@@ -0,0 +1,111 @@\r
++#!/bin/bash\r
++test_description="\"notmuch search\" in several variations"\r
++. ./test-lib.sh\r
++\r
++test_expect_success "Search body" '\r
++add_message "[subject]=\"body search\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" [body]=bodysearchtest &&\r
++output=$($NOTMUCH search bodysearchtest | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by from:" '\r
++add_message "[subject]=\"search by from\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" [from]=searchbyfrom &&\r
++output=$($NOTMUCH search from:searchbyfrom | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by to:" '\r
++add_message "[subject]=\"search by to\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" [to]=searchbyto &&\r
++output=$($NOTMUCH search to:searchbyto | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by subject:" '\r
++add_message [subject]=subjectsearchtest "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$($NOTMUCH search subject:subjectsearchtest | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by id:" '\r
++add_message "[subject]=\"search by id\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$($NOTMUCH search id:${gen_msg_id} | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by tag:" '\r
++add_message "[subject]=\"search by tag\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++$NOTMUCH tag +searchbytag id:${gen_msg_id} &&\r
++output=$($NOTMUCH search tag:searchbytag | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)"\r
++\r
++'\r
++test_expect_success "Search by thread:" '\r
++add_message "[subject]=\"search by thread\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++thread_id=$($NOTMUCH search id:${gen_msg_id} | sed -e "s/thread:\([a-f0-9]*\).*/\1/") &&\r
++output=$($NOTMUCH search thread:${thread_id} | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search body (phrase)" '\r
++add_message "[subject]=\"body search (phrase)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"body search (phrase)\"" &&\r
++add_message "[subject]=\"negative result\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"This phrase should not match the body search\"" &&\r
++output=$($NOTMUCH search "\"body search (phrase)\"" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by from: (address)" '\r
++add_message "[subject]=\"search by from (address)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" [from]=searchbyfrom@example.com &&\r
++output=$($NOTMUCH search from:searchbyfrom@example.com | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by from: (name)" '\r
++add_message "[subject]=\"search by from (name)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[from]=\"Search By From Name <test@example.com>\"" &&\r
++output=$($NOTMUCH search from:"Search By From Name" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by to: (address)" '\r
++add_message "[subject]=\"search by to (address)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" [to]=searchbyto@example.com &&\r
++output=$($NOTMUCH search to:searchbyto@example.com | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by to: (name)" '\r
++add_message "[subject]=\"search by to (name)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[to]=\"Search By To Name <test@example.com>\"" &&\r
++output=$($NOTMUCH search to:"Search By To Name" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search by subject: (phrase)" '\r
++add_message "[subject]=\"subject search test (phrase)\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++add_message "[subject]=\"this phrase should not match the subject search test\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$($NOTMUCH search "subject:\"subject search test (phrase)\"" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search for all messages (\"*\"):" '\r
++output=$($NOTMUCH search "*" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)\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 unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; negative result (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)\r
++thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; this phrase should not match the subject search test (inbox unread)"\r
++\r
++'\r
++test_expect_success "Search body (utf-8):" '\r
++add_message "[subject]=\"utf8-message-body-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"message body utf8: bödý\"" &&\r
++output=$($NOTMUCH search "bödý" | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-message-body-subject (inbox unread)"\r
++'\r
++test_done\r
+diff --git a/test/t0003-json.sh b/test/t0003-json.sh\r
+new file mode 100755\r
+index 0000000..810262c\r
+--- /dev/null\r
++++ b/test/t0003-json.sh\r
+@@ -0,0 +1,46 @@\r
++#!/bin/bash\r
++test_description="--format=json output"\r
++. ./test-lib.sh\r
++\r
++test_expect_success "Show message: json" '\r
++add_message "[subject]=\"json-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"json-show-message\"" &&\r
++output=$($NOTMUCH show --format=json "json-show-message") &&\r
++pass_if_equal "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true, \"filename\": \"${gen_msg_filename}\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Cc\": \"\", \"Bcc\": \"\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 -0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"json-show-message\n\"}]}, []]]]"\r
++\r
++'\r
++test_expect_success "Search message: json" '\r
++add_message "[subject]=\"json-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"json-search-message\"" &&\r
++output=$($NOTMUCH search --format=json "json-search-message" | 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-subject\",\r
++\"tags\": [\"inbox\", \"unread\"]}]"\r
++\r
++'\r
++test_expect_success "Search by subject (utf-8):" '\r
++add_message [subject]=utf8-sübjéct "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$($NOTMUCH search subject:utf8-sübjéct | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-sübjéct (inbox unread)"\r
++\r
++'\r
++test_expect_success "Show message: json, utf-8" '\r
++add_message "[subject]=\"json-show-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-show-méssage\"" &&\r
++output=$($NOTMUCH show --format=json "jsön-show-méssage") &&\r
++pass_if_equal "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true, \"filename\": \"${gen_msg_filename}\", \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-utf8-body-sübjéct\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Cc\": \"\", \"Bcc\": \"\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 -0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"jsön-show-méssage\n\"}]}, []]]]"\r
++\r
++'\r
++test_expect_success "Search message: json, utf-8" '\r
++add_message "[subject]=\"json-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\"" &&\r
++output=$($NOTMUCH search --format=json "jsön-search-méssage" | 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übjéct\",\r
++\"tags\": [\"inbox\", \"unread\"]}]"\r
++'\r
++test_done\r
+diff --git a/test/t0004-thread-naming.sh b/test/t0004-thread-naming.sh\r
+new file mode 100755\r
+index 0000000..88216f2\r
+--- /dev/null\r
++++ b/test/t0004-thread-naming.sh\r
+@@ -0,0 +1,191 @@\r
++#!/bin/bash\r
++test_description="naming of threads with changing subject"\r
++. ./test-lib.sh\r
++test_expect_success 'Generate some messages' '\r
++add_message "[subject]=\"thread-naming: Initial thread subject\"" \\r
++            "[date]=\"Fri, 05 Jan 2001 15:43:56 -0800\"" &&\r
++first=${gen_msg_cnt} &&\r
++parent=${gen_msg_id} &&\r
++add_message "[subject]=\"thread-naming: Older changed subject\"" \\r
++            "[date]=\"Sat, 06 Jan 2001 15:43:56 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++add_message "[subject]=\"thread-naming: Newer changed subject\"" \\r
++            "[date]=\"Sun, 07 Jan 2001 15:43:56 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++add_message "[subject]=\"thread-naming: Final thread subject\"" \\r
++            "[date]=\"Mon, 08 Jan 2001 15:43:56 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++final=${gen_msg_id}\r
++\r
++'\r
++test_expect_success "Initial thread name (oldest-first search)" '\r
++output=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-05 [4/4] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Initial thread name (newest-first search)" '\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-08 [4/4] Notmuch Test Suite; 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
++'\r
++test_expect_success "Changed thread name (oldest-first search)" '\r
++output=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-06 [2/4] Notmuch Test Suite; thread-naming: Older changed subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Changed thread name (newest-first search)" '\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-07 [2/4] Notmuch Test Suite; thread-naming: Newer changed subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Ignore added reply prefix (Re:)" '\r
++add_message "[subject]=\"Re: thread-naming: Initial thread subject\"" \\r
++            "[date]=\"Tue, 09 Jan 2001 15:43:45 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-09 [3/5] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Ignore added reply prefix (Aw:)" '\r
++add_message "[subject]=\"Aw: thread-naming: Initial thread subject\"" \\r
++            "[date]=\"Wed, 10 Jan 2001 15:43:45 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-10 [4/6] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Ignore added reply prefix (Vs:)" '\r
++add_message "[subject]=\"Vs: thread-naming: Initial thread subject\"" \\r
++            "[date]=\"Thu, 11 Jan 2001 15:43:45 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-11 [5/7] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Ignore added reply prefix (Sv:)" '\r
++add_message "[subject]=\"Sv: thread-naming: Initial thread subject\"" \\r
++            "[date]=\"Fri, 12 Jan 2001 15:43:45 -0800\"" \\r
++            "[in-reply-to]=\<$parent\>" &&\r
++output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2001-01-12 [6/8] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"\r
++\r
++'\r
++test_expect_success "Test order of messages in \"notmuch show\"" '\r
++output=$($NOTMUCH show thread-naming | notmuch_show_sanitize) &&\r
++pass_if_equal "$output" "\f\r
+message{ id:msg-$(printf "%03d" $first)@notmuch-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: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: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: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: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: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: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: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
++test_done\r
+diff --git a/test/t0005-reply.sh b/test/t0005-reply.sh\r
+new file mode 100755\r
+index 0000000..670bc73\r
+--- /dev/null\r
++++ b/test/t0005-reply.sh\r
+@@ -0,0 +1,122 @@\r
++#!/bin/bash\r
++test_description="\"notmuch reply\" in several variations"\r
++. ./test-lib.sh\r
++\r
++test_expect_success "Basic reply" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=test_suite@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"basic reply test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++'\r
++test_expect_success "Multiple recipients" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++            "[to]=\"test_suite@notmuchmail.org, Someone Else <someone@example.com>\"" \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"Multiple recipients\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++'\r
++test_expect_success "Reply with CC" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=test_suite@notmuchmail.org \\r
++            "[cc]=\"Other Parties <cc@example.com>\"" \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"reply with CC\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++'\r
++test_expect_success "Reply from alternate address" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=test_suite_other@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"reply from alternate address\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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
++'\r
++test_expect_success "Support for Reply-To" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=test_suite@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"support for reply-to\"" \\r
++            "[reply-to]=\"Sender <elsewhere@example.com>\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++'\r
++test_expect_success "Un-munging Reply-To" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++            "[to]=\"Some List <list@example.com>\"" \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"Un-munging Reply-To\"" \\r
++            "[reply-to]=\"Evil Munging List <list@example.com>\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_done\r
+diff --git a/test/t0006-dump-restore.sh b/test/t0006-dump-restore.sh\r
+new file mode 100755\r
+index 0000000..f971181\r
+--- /dev/null\r
++++ b/test/t0006-dump-restore.sh\r
+@@ -0,0 +1,30 @@\r
++#!/bin/bash\r
++test_description="\"notmuch dump\" and \"notmuch restore\""\r
++. ./test-lib.sh\r
++test_expect_success 'Generate some message' '\r
++generate_message &&\r
++notmuch new\r
++'\r
++test_expect_success "Dumping all tags" '\r
++$NOTMUCH dump dump.expected &&\r
++pass_if_equal "$?" "0"\r
++\r
++'\r
++test_expect_success "Clearing all tags" '\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
++'\r
++test_expect_success "Restoring original tags" '\r
++$NOTMUCH restore dump.expected &&\r
++$NOTMUCH dump dump.actual &&\r
++pass_if_equal "$(< dump.actual)" "$(< dump.expected)"\r
++\r
++'\r
++test_expect_success "Restore with nothing to do" '\r
++$NOTMUCH restore dump.expected &&\r
++pass_if_equal "$?" "0"\r
++'\r
++test_done\r
+diff --git a/test/t0007-uuencode.sh b/test/t0007-uuencode.sh\r
+new file mode 100755\r
+index 0000000..e290610\r
+--- /dev/null\r
++++ b/test/t0007-uuencode.sh\r
+@@ -0,0 +1,36 @@\r
++#!/bin/bash\r
++test_description="handling of uuencoded data"\r
++. ./test-lib.sh\r
++test_expect_success 'Generate message' '\r
++\r
++add_message [subject]=uuencodetest "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" \\r
++"[body]=\"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.    \r
++MINSTEAD THIS IS JUST A WAY TO ENSURE THAT THIS BLOCK OF DATA \r
++MIS CORRECTLY IGNORED WHEN NOTMUCH CREATES ITS INDEX. SO WE   \r
++MINCLUDE A DURINGUUDATA MARKER THAT SHOULD NOT RESULT IN ANY  \r
++MSEARCH RESULT.                                               \r
++\\\`\r
++end\r
++\r
++Finally, we have our afteruudata marker as well.\""\r
++\r
++'\r
++test_expect_success "Ensure content before uu data is indexed" '\r
++output=$($NOTMUCH search beforeuudata | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"\r
++'\r
++test_expect_success "Ensure uu data is not indexed" '\r
++output=$($NOTMUCH search DURINGUUDATA | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" ""\r
++'\r
++test_expect_success "Ensure content after uu data is indexed" '\r
++output=$($NOTMUCH search afteruudata | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"\r
++'\r
++test_done\r
+diff --git a/test/t0008-threading-out-of-order.sh b/test/t0008-threading-out-of-order.sh\r
+new file mode 100755\r
+index 0000000..9f360b7\r
+--- /dev/null\r
++++ b/test/t0008-threading-out-of-order.sh\r
+@@ -0,0 +1,31 @@\r
++#!/bin/bash\r
++test_description="threading when messages received out of order"\r
++. ./test-lib.sh\r
++test_expect_success "Adding initial child message" '\r
++generate_message [body]=foo "[in-reply-to]=\<parent-id\>" [subject]=brokenthreadtest "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Searching returns the message" '\r
++output=$($NOTMUCH search foo | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
++'\r
++test_expect_success "Adding second child message" '\r
++generate_message [body]=foo "[in-reply-to]=\<parent-id\>" [subject]=brokenthreadtest "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Searching returns both messages in one thread" '\r
++output=$($NOTMUCH search foo | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [2/2] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
++'\r
++test_expect_success "Adding parent message" '\r
++generate_message [body]=foo [id]=parent-id [subject]=brokenthreadtest "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Searching returns all three messages in one thread" '\r
++output=$($NOTMUCH search foo | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] Notmuch Test Suite; brokenthreadtest (inbox unread)"\r
++'\r
++test_done\r
+diff --git a/test/t0009-author-reordering.sh b/test/t0009-author-reordering.sh\r
+new file mode 100755\r
+index 0000000..b993341\r
+--- /dev/null\r
++++ b/test/t0009-author-reordering.sh\r
+@@ -0,0 +1,35 @@\r
++#!/bin/bash\r
++test_description="author reordering;"\r
++. ./test-lib.sh\r
++test_expect_success "Adding parent message" '\r
++generate_message [body]=findme [id]=new-parent-id [subject]=author-reorder-threadtest "[from]=\"User <user@example.com>\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Adding initial child message" '\r
++generate_message [body]=findme "[in-reply-to]=\<new-parent-id\>" [subject]=author-reorder-threadtest "[from]=\"User1 <user1@example.com>\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Adding second child message" '\r
++generate_message [body]=findme "[in-reply-to]=\<new-parent-id\>" [subject]=author-reorder-threadtest "[from]=\"User2 <user2@example.com>\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" &&\r
++output=$(NOTMUCH_NEW) &&\r
++pass_if_equal "$output" "Added 1 new message to the database."\r
++'\r
++test_expect_success "Searching when all three messages match" '\r
++output=$($NOTMUCH search findme | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [3/3] User, User1, User2; author-reorder-threadtest (inbox unread)"\r
++'\r
++test_expect_success "Searching when two messages match" '\r
++output=$($NOTMUCH search User1 or User2 | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [2/3] User1, User2| User; author-reorder-threadtest (inbox unread)"\r
++'\r
++test_expect_success "Searching when only one message matches" '\r
++output=$($NOTMUCH search User2 | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User2| User, User1; author-reorder-threadtest (inbox unread)"\r
++'\r
++test_expect_success "Searching when only first message matches" '\r
++output=$($NOTMUCH search User | notmuch_search_sanitize) &&\r
++pass_if_equal "$output" "thread:XXX   2000-01-01 [1/3] User| User1, User2; author-reorder-threadtest (inbox unread)"\r
++'\r
++test_done\r
+diff --git a/test/t0010-from-line-heuristics.sh b/test/t0010-from-line-heuristics.sh\r
+new file mode 100755\r
+index 0000000..cb3f5b3\r
+--- /dev/null\r
++++ b/test/t0010-from-line-heuristics.sh\r
+@@ -0,0 +1,214 @@\r
++#!/bin/bash\r
++test_description="From line heuristics (with multiple configured addresses)"\r
++. ./test-lib.sh\r
++test_expect_success "Magic from guessing (nothing to go on)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_expect_success "Magic from guessing (Envelope-to:)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Envelope-To: test_suite_other@notmuchmail.org\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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
++test_expect_success "Magic from guessing (X-Original-To:)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"X-Original-To: test_suite_other@notmuchmail.org\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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
++test_expect_success "Magic from guessing (Received: .. for ..)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Received: from mail.example.com (mail.example.com [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 -0400 (EDT)\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.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
++test_expect_success "Magic from guessing (Received: domain)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Received: from mail.example.com (mail.example.com [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]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@otherdomain.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
++'\r
++test_expect_success "\nTesting From line heuristics (with single configured address):\n" '\r
++sed -i -e "s/^other_email.*//" "${NOTMUCH_CONFIG}"\r
++\r
++'\r
++test_expect_success "Magic from guessing (nothing to go on)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_expect_success "Magic from guessing (Envelope-to:)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Envelope-To: test_suite_other@notmuchmail.org\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_expect_success "Magic from guessing (X-Original-To:)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"X-Original-To: test_suite_other@notmuchmail.org\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_expect_success "Magic from guessing (Received: .. for ..)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Received: from mail.example.com (mail.example.com [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 -0400 (EDT)\"" \\r
++            "[date]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_expect_success "Magic from guessing (Received: domain)" '\r
++add_message "[from]=\"Sender <sender@example.com>\"" \\r
++             [to]=mailinglist@notmuchmail.org \\r
++             [subject]=notmuch-reply-test \\r
++            "[header]=\"Received: from mail.example.com (mail.example.com [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]=\"Tue, 05 Jan 2010 15:43:56 -0800\"" \\r
++            "[body]=\"from guessing test\"" &&\r
++\r
++output=$($NOTMUCH reply id:${gen_msg_id}) &&\r
++pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.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
++test_done\r
+-- \r
+1.7.1\r
+\r