echo notmuch
}
-# Generate a new message in the mail directory, with
-# a unique message ID and subject.
+increment_mtime_amount=0
+increment_mtime ()
+{
+ dir=$1
+
+ increment_mtime_amount=$((increment_mtime_amount + 1))
+ touch -d "+${increment_mtime_amount} seconds" $dir
+}
+
+# Generate a new message in the mail directory, with a unique message
+# ID and subject. The message is not added to the index.
#
-# The filename of the message generated is available as
-# $gen_msg_filename
+# After this function returns, the filename of the generated message
+# is available as $gen_msg_filename and the message ID is available as
+# $gen_msg_id .
#
# This function supports named parameters with the bash syntax for
# assigning a value to an associative array ([name]=value). The
# '[from]="Some User <user@example.com>"'
# '[to]="Some User <user@example.com>"'
# '[subject]="Subject of email message"'
+# '[date]="RFC 822 Date"'
#
# Values for email headers. If not provided, default values will
# be generated instead.
#
# '[cc]="Some User <user@example.com>"'
+# [reply-to]=some-address
# [in-reply-to]=<message-id>
#
# Additional values for email headers. If these are not provided
# message.
gen_msg_cnt=0
gen_msg_filename=""
+gen_msg_id=""
generate_message ()
{
# This is our (bash-specific) magic for doing named parameters
gen_msg_cnt=$((gen_msg_cnt + 1))
gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt)
+ gen_msg_id="${gen_msg_name}@notmuch-test-suite"
if [ -z "${template[dir]}" ]; then
gen_msg_filename="${MAIL_DIR}/$gen_msg_name"
template[subject]="Test message ${gen_msg_filename}"
fi
+ if [ -z "${template[date]}" ]; then
+ template[date]="Tue, 05 Jan 2010 15:43:57 -0800"
+ fi
+
additional_headers=""
- if [ ! -z "${template[cc]}" ]; then
- additional_headers="Cc: ${template[cc]}
+ if [ ! -z "${template[reply-to]}" ]; then
+ additional_headers="Reply-To: ${template[reply-to]}
${additional_headers}"
fi
${additional_headers}"
fi
+ if [ ! -z "${template[cc]}" ]; then
+ additional_headers="Cc: ${template[cc]}
+${additional_headers}"
+ fi
+
cat <<EOF >$gen_msg_filename
From: ${template[from]}
To: ${template[to]}
-Message-Id: <msg-${gen_msg_cnt}@notmuch-test-suite>
+Message-Id: <${gen_msg_id}>
Subject: ${template[subject]}
-Date: Tue, 05 Jan 2010 15:43:57 -0800
+Date: ${template[date]}
${additional_headers}
${template[body]}
EOF
+
+ # Ensure that the mtime of the containing directory is updated
+ increment_mtime $(dirname ${gen_msg_filename})
}
-do_sleep ()
+# Generate a new message and add it to the index.
+#
+# All of the arguments and return values supported by generate_message
+# are alos supported here, so see that function for details.
+add_message ()
{
- sleep 1
+ generate_message "$@"
+
+ $NOTMUCH new > /dev/null
}
NOTMUCH_IGNORED_OUTPUT_REGEXP='^Processed [0-9]*( total)? file|Found [0-9]* total file'
[user]
name=Notmuch Test Suite
primary_email=test_suite@notmuchmail.org
+other_email=test_suite_other@notmuchmail.org
EOF
printf "Testing \"notmuch new\" in several variations:\n"
execute_expecting new "No new mail."
printf " Single new message...\t\t"
-do_sleep
generate_message
execute_expecting new "Added 1 new message to the database."
printf " Multiple new messages...\t"
-do_sleep
generate_message
generate_message
execute_expecting new "Added 2 new messages to the database."
tmp_msg_filename=tmp/$gen_msg_filename
mkdir -p $(dirname $tmp_msg_filename)
mv $gen_msg_filename $tmp_msg_filename
-do_sleep
+increment_mtime ${MAIL_DIR}
$NOTMUCH new > /dev/null
-do_sleep
mv $tmp_msg_filename $gen_msg_filename
+increment_mtime ${MAIL_DIR}
execute_expecting new "Added 1 new message to the database."
printf " Renamed message...\t\t"
-do_sleep
generate_message
$NOTMUCH new > /dev/null
-do_sleep
mv $gen_msg_filename ${gen_msg_filename}-renamed
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Detected 1 file rename."
printf " Deleted message...\t\t"
-do_sleep
rm ${gen_msg_filename}-renamed
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Removed 1 message."
printf " Renamed directory...\t\t"
-do_sleep
generate_message [dir]=dir
generate_message [dir]=dir
generate_message [dir]=dir
$NOTMUCH new > /dev/null
-do_sleep
mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Detected 3 file renames."
printf " Deleted directory...\t\t"
-do_sleep
rm -rf ${MAIL_DIR}/dir-renamed
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Removed 3 messages."
printf " New directory (at end of list)... "
-do_sleep
generate_message [dir]=zzz
generate_message [dir]=zzz
generate_message [dir]=zzz
printf " Deleted directory (end of list)... "
-do_sleep
rm -rf ${MAIL_DIR}/zzz
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Removed 3 messages."
execute_expecting new "Added 1 new message to the database."
printf " New symlink to a file...\t"
-do_sleep
generate_message
external_msg_filename=${TEST_DIR}/external/$(basename $gen_msg_filename)
mkdir -p $(dirname $external_msg_filename)
mv $gen_msg_filename $external_msg_filename
ln -s $external_msg_filename $gen_msg_filename
-
+increment_mtime ${MAIL_DIR}
execute_expecting new "Added 1 new message to the database."
printf " New two-level directory...\t"
-do_sleep
generate_message [dir]=two/levels
generate_message [dir]=two/levels
generate_message [dir]=two/levels
printf " Deleted two-level directory... "
-do_sleep
rm -rf ${MAIL_DIR}/two
+increment_mtime ${MAIL_DIR}
execute_expecting new "No new mail. Removed 3 messages."
+printf "\nTesting \"notmuch reply\" in several variations:\n"
+
+printf " Basic reply...\t\t\t"
+add_message '[from]="Sender <sender@example.com>"' \
+ [to]=test_suite@notmuchmail.org \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="basic reply test"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <sender@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> basic reply test"
+
+printf " Multiple recipients...\t\t"
+add_message '[from]="Sender <sender@example.com>"' \
+ '[to]="test_suite@notmuchmail.org, Someone Else <someone@example.com>"' \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="Multiple recipients"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <sender@example.com>, Someone Else <someone@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> Multiple recipients"
+
+printf " Reply with CC...\t\t"
+add_message '[from]="Sender <sender@example.com>"' \
+ [to]=test_suite@notmuchmail.org \
+ '[cc]="Other Parties <cc@example.com>"' \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="reply with CC"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <sender@example.com>
+Cc: Other Parties <cc@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> reply with CC"
+
+printf " Reply from alternate address..."
+add_message '[from]="Sender <sender@example.com>"' \
+ [to]=test_suite_other@notmuchmail.org \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="reply from alternate address"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <sender@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> reply from alternate address"
+
+printf " Support for Reply-To...\t"
+add_message '[from]="Sender <sender@example.com>"' \
+ [to]=test_suite@notmuchmail.org \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="support for reply-to"' \
+ '[reply-to]="Sender <elsewhere@example.com>"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <elsewhere@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> support for reply-to"
+
+printf " Un-munging Reply-To...\t\t"
+add_message '[from]="Sender <sender@example.com>"' \
+ '[to]="Some List <list@example.com>"' \
+ [subject]=notmuch-reply-test \
+ '[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
+ '[body]="Un-munging Reply-To"' \
+ '[reply-to]="Evil Munging List <list@example.com>"'
+
+execute_expecting "reply id:${gen_msg_id}" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
+Subject: Re: notmuch-reply-test
+To: Sender <sender@example.com>, Some List <list@example.com>
+Bcc: test_suite@notmuchmail.org
+In-Reply-To: <${gen_msg_id}>
+References: <${gen_msg_id}>
+
+On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
+> Un-munging Reply-To"
+
cat <<EOF
Notmuch test suite complete.