8 while [ -n "$dir" ]; do
15 if [ "$dir" = "/" ]; then
23 # Generate a new message in the mail directory, with
24 # a unique message ID and subject.
26 # The filename of the message generated is available as
29 # This function supports named parameters with the bash syntax for
30 # assigning a value to an associative array ([name]=value). The
31 # supported parameters are:
33 # [dir]=directory/of/choice
35 # Generate the message in directory 'directory/of/choice' within
36 # the mail store. The directory will be created if necessary.
41 # This is our (bash-specific) magic for doing named parameters
42 local -A template="($@)"
44 gen_msg_cnt=$((gen_msg_cnt + 1))
45 gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt)
47 if [ -z "${template[dir]}" ]; then
48 gen_msg_filename="${MAIL_DIR}/$gen_msg_name"
50 gen_msg_filename="${MAIL_DIR}/${template[dir]}/$gen_msg_name"
51 mkdir -p $(dirname $gen_msg_filename)
54 cat <<EOF >$gen_msg_filename
55 From: Notmuch Test Suite <test_suite@notmuchmail.org>
56 To: Notmuch Test Suite <test_suite@notmuchmail.org>
57 Message-Id: <msg-${gen_msg_cnt}@notmuch-test-suite>
58 Subject: Test message ${gen_msg_filename}
59 Date: Tue, 05 Jan 2010 15:43:57 -0800
61 This is just a test message at ${gen_msg_filename}
70 NOTMUCH_IGNORED_OUTPUT_REGEXP='^Processed [0-9]*( total)? file|Found [0-9]* total file'
77 output=$($NOTMUCH $args | grep -v -E -e "$NOTMUCH_IGNORED_OUTPUT_REGEXP")
78 if [ "$output" = "$expected" ]; then
82 echo " Expected output: $expected"
83 echo " Actual output: $output"
87 TEST_DIR=$(pwd)/test.$$
88 MAIL_DIR=${TEST_DIR}/mail
89 export NOTMUCH_CONFIG=${TEST_DIR}/notmuch-config
90 NOTMUCH=$(find_notmuch_binary $(pwd))
98 cat <<EOF > ${NOTMUCH_CONFIG}
103 name=Notmuch Test Suite
104 primary_email=test_suite@notmuchmail.org
107 printf "Testing \"notmuch new\" in several variations:\n"
108 printf " No new messages...\t\t"
109 execute_expecting new "No new mail."
111 printf " Single new message...\t\t"
114 execute_expecting new "Added 1 new message to the database."
116 printf " Multiple new messages...\t"
120 execute_expecting new "Added 2 new messages to the database."
122 printf " No new messages (non-empty DB)... "
123 execute_expecting new "No new mail."
125 printf " New directories...\t\t"
126 rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
127 mkdir ${MAIL_DIR}/def
128 mkdir ${MAIL_DIR}/ghi
129 generate_message [dir]=def
131 execute_expecting new "Added 1 new message to the database."
133 printf " Alternate inode order...\t"
135 rm -rf ${MAIL_DIR}/.notmuch
136 mv ${MAIL_DIR}/ghi ${MAIL_DIR}/abc
138 generate_message [dir]=abc
140 execute_expecting new "Added 1 new message to the database."
142 printf " Message moved in...\t\t"
143 rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
145 tmp_msg_filename=tmp/$gen_msg_filename
146 mkdir -p $(dirname $tmp_msg_filename)
147 mv $gen_msg_filename $tmp_msg_filename
149 $NOTMUCH new > /dev/null
151 mv $tmp_msg_filename $gen_msg_filename
152 execute_expecting new "Added 1 new message to the database."
154 printf " Renamed message...\t\t"
158 $NOTMUCH new > /dev/null
160 mv $gen_msg_filename ${gen_msg_filename}-renamed
161 execute_expecting new "No new mail. Detected 1 file rename."
163 printf " Deleted message...\t\t"
166 rm ${gen_msg_filename}-renamed
167 execute_expecting new "No new mail. Removed 1 message."
169 printf " Renamed directory...\t\t"
172 generate_message [dir]=dir
173 generate_message [dir]=dir
174 generate_message [dir]=dir
176 $NOTMUCH new > /dev/null
179 mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed
181 execute_expecting new "No new mail. Detected 3 file renames."
183 printf " Deleted directory...\t\t"
186 rm -rf ${MAIL_DIR}/dir-renamed
188 execute_expecting new "No new mail. Removed 3 messages."
190 printf " New directory (at end of list)... "
193 generate_message [dir]=zzz
194 generate_message [dir]=zzz
195 generate_message [dir]=zzz
197 execute_expecting new "Added 3 new messages to the database."
199 printf " Deleted directory (end of list)... "
202 rm -rf ${MAIL_DIR}/zzz
204 execute_expecting new "No new mail. Removed 3 messages."
206 printf " New symlink to directory...\t"
208 rm -rf ${MAIL_DIR}/.notmuch
209 mv ${MAIL_DIR} ${TEST_DIR}/actual_maildir
212 ln -s ${TEST_DIR}/actual_maildir ${MAIL_DIR}/symlink
214 execute_expecting new "Added 1 new message to the database."
216 printf " New symlink to a file...\t"
219 external_msg_filename=${TEST_DIR}/external/$(basename $gen_msg_filename)
220 mkdir -p $(dirname $external_msg_filename)
221 mv $gen_msg_filename $external_msg_filename
222 ln -s $external_msg_filename $gen_msg_filename
224 execute_expecting new "Added 1 new message to the database."
226 printf " New two-level directory...\t"
229 generate_message [dir]=two/levels
230 generate_message [dir]=two/levels
231 generate_message [dir]=two/levels
233 execute_expecting new "Added 3 new messages to the database."
235 printf " Deleted two-level directory... "
238 rm -rf ${MAIL_DIR}/two
240 execute_expecting new "No new mail. Removed 3 messages."
243 Notmuch test suite complete.
245 Intermediate state can be examined in: