diff options
| author | David Bremner <david@tethera.net> | 2014-01-29 20:20:43 -0400 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2014-01-29 20:20:43 -0400 |
| commit | c792dda683e49e5c3a3050f165fce60be7f3a6d8 (patch) | |
| tree | 8abeb9b64a012c5596c1c7254d00791e8f25ad81 /test | |
| parent | d0ab0ab951bc552f4aa6ca7e68659148b8da1147 (diff) | |
| parent | f2e1f0b006d281b9b0a3361dcae37b019eecd502 (diff) | |
Merge tag 'debian/0.17-3' into wheezy-backports
uploaded to Debian unstable
Conflicts:
debian/changelog
Diffstat (limited to 'test')
| -rw-r--r-- | test/Makefile.local | 2 | ||||
| -rwxr-xr-x | test/aggregate-results.sh | 9 | ||||
| -rwxr-xr-x | test/compact | 33 | ||||
| -rwxr-xr-x | test/count | 10 | ||||
| -rwxr-xr-x | test/crypto | 19 | ||||
| -rwxr-xr-x | test/emacs | 68 | ||||
| -rwxr-xr-x | test/emacs-show | 23 | ||||
| -rwxr-xr-x | test/emacs-tree | 197 | ||||
| -rwxr-xr-x | test/encoding | 23 | ||||
| -rwxr-xr-x | test/excludes | 4 | ||||
| -rwxr-xr-x | test/insert | 54 | ||||
| -rwxr-xr-x | test/json | 4 | ||||
| -rwxr-xr-x | test/maildir-sync | 35 | ||||
| -rwxr-xr-x | test/missing-headers | 14 | ||||
| -rwxr-xr-x | test/multipart | 86 | ||||
| -rwxr-xr-x | test/new | 3 | ||||
| -rwxr-xr-x | test/notmuch-test | 5 | ||||
| -rwxr-xr-x | test/raw | 8 | ||||
| -rwxr-xr-x | test/reply | 63 | ||||
| -rwxr-xr-x | test/reply-to-sender | 4 | ||||
| -rwxr-xr-x | test/search-output | 65 | ||||
| -rwxr-xr-x | test/sexp | 6 | ||||
| -rw-r--r-- | test/test-lib.el | 15 | ||||
| -rw-r--r-- | test/test-lib.sh | 65 | ||||
| -rw-r--r-- | test/tree.expected-output/notmuch-tree-show-window | 40 | ||||
| -rw-r--r-- | test/tree.expected-output/notmuch-tree-single-thread | 6 | ||||
| -rw-r--r-- | test/tree.expected-output/notmuch-tree-tag-inbox | 53 | ||||
| -rw-r--r-- | test/tree.expected-output/notmuch-tree-tag-inbox-tagged | 53 | ||||
| -rw-r--r-- | test/tree.expected-output/notmuch-tree-tag-inbox-thread-tagged | 53 |
29 files changed, 928 insertions, 92 deletions
diff --git a/test/Makefile.local b/test/Makefile.local index 2ec65956..8870ca37 100644 --- a/test/Makefile.local +++ b/test/Makefile.local @@ -27,7 +27,7 @@ $(dir)/random-corpus: $(random_corpus_deps) $(dir)/smtp-dummy: $(smtp_dummy_modules) $(call quiet,CC) $^ -o $@ -$(dir)/symbol-test: $(dir)/symbol-test.o +$(dir)/symbol-test: $(dir)/symbol-test.o lib/$(LINKER_NAME) $(call quiet,CXX) $^ -o $@ -Llib -lnotmuch $(XAPIAN_LDFLAGS) $(dir)/parse-time: $(dir)/parse-time.o parse-time-string/parse-time-string.o diff --git a/test/aggregate-results.sh b/test/aggregate-results.sh index 732d6ca7..b016edb9 100755 --- a/test/aggregate-results.sh +++ b/test/aggregate-results.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -eu + fixed=0 success=0 failed=0 @@ -79,3 +81,10 @@ if [ "$skipped" != "0" ]; then tests=$(pluralize "test" $skipped) echo "$skipped $tests skipped." fi + +if [ $success -gt 0 -a $fixed -eq 0 -a $failed -eq 0 -a $skipped -eq 0 ] +then + exit 0 +else + exit 1 +fi diff --git a/test/compact b/test/compact new file mode 100755 index 00000000..ac174cec --- /dev/null +++ b/test/compact @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +test_description='"notmuch compact"' +. ./test-lib.sh + +add_message '[subject]=One' +add_message '[subject]=Two' +add_message '[subject]=Three' + +notmuch tag +tag1 \* +notmuch tag +tag2 subject:Two +notmuch tag -tag1 +tag3 subject:Three + +test_expect_success "Running compact" "notmuch compact --backup=${TEST_DIRECTORY}/xapian.old" + +test_begin_subtest "Compact preserves database" +output=$(notmuch search \* | notmuch_search_sanitize) +test_expect_equal "$output" "\ +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (inbox tag1 unread) +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag2 unread) +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Three (inbox tag3 unread)" + +test_expect_success 'Restoring Backup' \ + 'rm -Rf ${MAIL_DIR}/.notmuch/xapian && + mv ${TEST_DIRECTORY}/xapian.old ${MAIL_DIR}/.notmuch/xapian' + +test_begin_subtest "Checking restored backup" +output=$(notmuch search \* | notmuch_search_sanitize) +test_expect_equal "$output" "\ +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (inbox tag1 unread) +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag2 unread) +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Three (inbox tag3 unread)" + +test_done @@ -28,6 +28,16 @@ test_expect_equal \ "$((`notmuch search '*' | wc -l`))" \ "`notmuch count --output=threads '*'`" +test_begin_subtest "files count" +test_expect_equal \ + "$((`notmuch search --output=files '*' | wc -l`))" \ + "`notmuch count --output=files '*'`" + +test_begin_subtest "files count for a duplicate message-id" +test_expect_equal \ + "2" \ + "`notmuch count --output=files id:20091117232137.GA7669@griffis1.net`" + test_begin_subtest "count with no matching messages" test_expect_equal \ "0" \ diff --git a/test/crypto b/test/crypto index aa96ec22..477b397e 100755 --- a/test/crypto +++ b/test/crypto @@ -19,6 +19,7 @@ add_gnupg_home () elif (gpg --debug-quick-random --version >/dev/null 2>&1) ; then echo debug-quick-random >> "$GNUPGHOME"/gpg.conf fi + echo no-emit-version >> "$GNUPGHOME"/gpg.conf } ################################################## @@ -27,12 +28,8 @@ add_gnupg_home # get key fingerprint FINGERPRINT=$(gpg --no-tty --list-secret-keys --with-colons --fingerprint | grep '^fpr:' | cut -d: -f10) -# for some reason this is needed for emacs_deliver_message to work, -# although I can't figure out why -add_email_corpus - test_expect_success 'emacs delivery of signed message' \ -'emacs_deliver_message \ +'emacs_fcc_message \ "test signed message 001" \ "This is a test signed message." \ "(mml-secure-message-sign)"' @@ -62,7 +59,7 @@ expected='[[[{"id": "XXXXX", "content": "This is a test signed message.\n"}, {"id": 3, "content-type": "application/pgp-signature", - "content-length": 315}]}]}, + "content-length": 280}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -97,7 +94,7 @@ expected='[[[{"id": "XXXXX", "content": "This is a test signed message.\n"}, {"id": 3, "content-type": "application/pgp-signature", - "content-length": 315}]}]}, + "content-length": 280}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -130,7 +127,7 @@ expected='[[[{"id": "XXXXX", "content": "This is a test signed message.\n"}, {"id": 3, "content-type": "application/pgp-signature", - "content-length": 315}]}]}, + "content-length": 280}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -142,7 +139,7 @@ cat <<EOF >TESTATTACHMENT This is a test file. EOF test_expect_success 'emacs delivery of encrypted message with attachment' \ -'emacs_deliver_message \ +'emacs_fcc_message \ "test encrypted message 001" \ "This is a test encrypted message.\n" \ "(mml-attach-file \"TESTATTACHMENT\") (mml-secure-message-encrypt)"' @@ -269,7 +266,7 @@ test_expect_equal_json \ mv "${GNUPGHOME}"{.bak,} test_expect_success 'emacs delivery of encrypted + signed message' \ -'emacs_deliver_message \ +'emacs_fcc_message \ "test encrypted message 002" \ "This is another test encrypted message.\n" \ "(mml-secure-message-sign-encrypt)"' @@ -354,7 +351,7 @@ expected='[[[{"id": "XXXXX", "content": "This is a test signed message.\n"}, {"id": 3, "content-type": "application/pgp-signature", - "content-length": 315}]}]}, + "content-length": 280}]}]}, []]]]' test_expect_equal_json \ "$output" \ @@ -86,15 +86,16 @@ add_message "[subject]=\"message-with-invalid-from\"" \ "[from]=\"\\\"Invalid \\\" From\\\" <test_suite@notmuchmail.org>\"" thread=$(notmuch search --output=threads subject:message-with-invalid-from) test_emacs "(notmuch-show \"$thread\") - (test-output)" + (test-output \"OUTPUT.raw\")" cat <<EOF >EXPECTED "Invalid " (2001-01-05) (inbox) Subject: message-with-invalid-from To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE This is just a test message (#1) EOF +notmuch_date_sanitize < OUTPUT.raw > OUTPUT test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "Navigation of notmuch-search to thread view" @@ -122,6 +123,14 @@ test_emacs "(notmuch-search \"$os_x_darwin_thread\") output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread)" +test_begin_subtest "Add tag (large query)" +# We use a long query to force us into batch mode and use a funny tag +# that requires escaping for batch tagging. +test_emacs "(notmuch-tag (concat \"$os_x_darwin_thread\" \" or \" (make-string notmuch-tag-argument-limit ?x)) (list \"+tag-from-%-large-query\"))" +output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) +test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox tag-from-%-large-query unread)" +notmuch tag -tag-from-%-large-query $os_x_darwin_thread + test_begin_subtest "notmuch-show: add single tag to single message" test_emacs "(notmuch-show \"$os_x_darwin_thread\") (execute-kbd-macro \"+tag-from-show-view\")" @@ -597,11 +606,11 @@ Q: Why is top-posting such a bad thing? A: Top-posting. Q: What is the most annoying thing in e-mail?"' test_emacs "(notmuch-show \"top-posting\") - (test-visible-output)" + (test-visible-output \"OUTPUT.raw\")" echo "Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox) Subject: The problem with top-posting To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? @@ -610,13 +619,14 @@ Q: What is the most annoying thing in e-mail? Top Poster <top@poster.com> (2001-01-05) (inbox unread) Subject: Re: The problem with top-posting To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE Thanks for the advice! I will be sure to put it to good use. -Top Poster [ 9-line hidden original message. Click/Enter to show. ]" > EXPECTED +notmuch_date_sanitize < OUTPUT.raw > OUTPUT test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "Hiding message in notmuch-show view" @@ -761,7 +771,7 @@ test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "Do not call notmuch for non-inlinable application/mpeg parts" id='message-with-application/mpeg-attachment@notmuchmail.org' -emacs_deliver_message \ +emacs_fcc_message \ 'Message with application/mpeg attachment' \ '' \ "(message-goto-eoh) @@ -776,7 +786,7 @@ test_expect_equal $(notmuch_counter_value) 1 test_begin_subtest "Do not call notmuch for non-inlinable audio/mpeg parts" id='message-with-audio/mpeg-attachment@notmuchmail.org' -emacs_deliver_message \ +emacs_fcc_message \ 'Message with audio/mpeg attachment' \ '' \ "(message-goto-eoh) @@ -864,6 +874,8 @@ EOF chmod a+x notmuch_fail test_emacs "(let ((notmuch-command \"$PWD/notmuch_fail\")) (with-current-buffer \"*Messages*\" (erase-buffer)) + (with-current-buffer (get-buffer-create \"*Notmuch errors*\") + (erase-buffer)) (notmuch-search \"tag:inbox\") (notmuch-test-wait) (with-current-buffer \"*Messages*\" @@ -871,15 +883,16 @@ test_emacs "(let ((notmuch-command \"$PWD/notmuch_fail\")) (with-current-buffer \"*Notmuch errors*\" (test-output \"ERROR\")) (test-output))" -sed -i -e 's/^\[.*\]$/[XXX]/' ERROR -test_expect_equal "$(cat OUTPUT; echo ---; cat MESSAGES; echo ---; cat ERROR)" "\ + +test_expect_equal "$(notmuch_emacs_error_sanitize notmuch_fail OUTPUT MESSAGES ERROR)" "\ +=== OUTPUT === End of search results. ---- -$PWD/notmuch_fail exited with status 1 (see *Notmuch errors* for more details) ---- +=== MESSAGES === +YYY/notmuch_fail exited with status 1 (see *Notmuch errors* for more details) +=== ERROR === [XXX] -$PWD/notmuch_fail exited with status 1 -command: $PWD/notmuch_fail search --format\=sexp --format-version\=1 --sort\=newest-first tag\:inbox +YYY/notmuch_fail exited with status 1 +command: YYY/notmuch_fail search --format\=sexp --format-version\=2 --sort\=newest-first tag\:inbox exit status: 1" test_begin_subtest "Search handles subprocess warnings" @@ -893,7 +906,8 @@ EOF chmod a+x notmuch_fail test_emacs "(let ((notmuch-command \"$PWD/notmuch_fail\")) (with-current-buffer \"*Messages*\" (erase-buffer)) - (with-current-buffer \"*Notmuch errors*\" (erase-buffer)) + (with-current-buffer (get-buffer-create \"*Notmuch errors*\") + (erase-buffer)) (notmuch-search \"tag:inbox\") (notmuch-test-wait) (with-current-buffer \"*Messages*\" @@ -911,4 +925,28 @@ This is a warning (see *Notmuch errors* for more details) This is a warning This is another warning" +test_begin_subtest "Search thread tag operations are race-free" +add_message '[subject]="Search race test"' +gen_msg_id_1=$gen_msg_id +generate_message '[in-reply-to]="<'$gen_msg_id_1'>"' \ + '[references]="<'$gen_msg_id_1'>"' \ + '[subject]="Search race test two"' +test_emacs '(notmuch-search "subject:\"search race test\"") + (notmuch-test-wait) + (notmuch-poll) + (execute-kbd-macro "+search-thread-race-tag")' +output=$(notmuch search --output=messages 'tag:search-thread-race-tag') +test_expect_equal "$output" "id:$gen_msg_id_1" + +test_begin_subtest "Search global tag operations are race-free" +generate_message '[in-reply-to]="<'$gen_msg_id_1'>"' \ + '[references]="<'$gen_msg_id_1'>"' \ + '[subject]="Re: Search race test"' +test_emacs '(notmuch-search "subject:\"search race test\" -subject:two") + (notmuch-test-wait) + (notmuch-poll) + (execute-kbd-macro "*+search-global-race-tag")' +output=$(notmuch search --output=messages 'tag:search-global-race-tag') +test_expect_equal "$output" "id:$gen_msg_id_1" + test_done diff --git a/test/emacs-show b/test/emacs-show index ae70053a..2a3a5356 100755 --- a/test/emacs-show +++ b/test/emacs-show @@ -19,13 +19,14 @@ cat <<EOF >EXPECTED Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox) Subject: Hiding Original Message region at beginning of a message To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE [ 2-line hidden original message. Click/Enter to show. ] EOF test_emacs "(notmuch-show \"id:$message_id\") - (test-visible-output)" + (test-visible-output \"OUTPUT.raw\")" +notmuch_date_sanitize < OUTPUT.raw > OUTPUT test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "Bare subject #1" @@ -91,8 +92,7 @@ test_begin_subtest "notmuch-show: elide non-matching messages (w/ prefix arg to test_emacs '(let ((notmuch-show-only-matching-messages nil)) (notmuch-search "from:lars@seas.harvard.edu and subject:\"Maildir storage\"") (notmuch-test-wait) - (let ((current-prefix-arg t)) - (notmuch-search-show-thread)) + (notmuch-search-show-thread t) (notmuch-test-wait) (test-visible-output))' test_expect_equal_file OUTPUT $EXPECTED/notmuch-show-elide-non-matching-messages-on @@ -131,12 +131,12 @@ mid:abc%20def mid:abc. mid:abc, mid:abc;"' test_emacs '(notmuch-show "id:'$gen_msg_id'") (notmuch-test-mark-links) - (test-visible-output)' + (test-visible-output "OUTPUT.raw")' cat <<EOF >EXPECTED Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox) Subject: id buttonization To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE <<id:abc>> <<id:abc.def>>. <<id:abc,def>>, <<id:abc;def>>; <<id:abc:def>>: @@ -160,6 +160,7 @@ cid:xxx <<mid:abc%20def>> <<mid:abc>>. <<mid:abc>>, <<mid:abc>>; EOF +notmuch_date_sanitize < OUTPUT.raw > OUTPUT test_expect_equal_file OUTPUT EXPECTED @@ -182,14 +183,14 @@ test_emacs "(let ((notmuch-command \"$PWD/notmuch_fail\")) (with-current-buffer \"*Notmuch errors*\" (test-output \"ERROR\")) (test-output))" -sed -i -e 's/^\[.*\]$/[XXX]/' ERROR -test_expect_equal "$(cat OUTPUT; echo ---; cat MESSAGES; echo ---; cat ERROR)" "\ ---- +test_expect_equal "$(notmuch_emacs_error_sanitize notmuch_fail OUTPUT MESSAGES ERROR)" "\ +=== OUTPUT === +=== MESSAGES === This is an error (see *Notmuch errors* for more details) ---- +=== ERROR === [XXX] This is an error -command: $PWD/notmuch_fail show --format\\=sexp --format-version\\=1 --exclude\\=false \\' \\* \\' +command: YYY/notmuch_fail show --format\\=sexp --format-version\\=1 --exclude\\=false \\' \\* \\' exit status: 1 stderr: This is an error diff --git a/test/emacs-tree b/test/emacs-tree new file mode 100755 index 00000000..4bdfddd2 --- /dev/null +++ b/test/emacs-tree @@ -0,0 +1,197 @@ +#!/usr/bin/env bash + +test_description="emacs tree view interface" +. test-lib.sh + +EXPECTED=$TEST_DIRECTORY/tree.expected-output + +add_email_corpus + +test_begin_subtest "Basic notmuch-tree view in emacs" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox + +test_begin_subtest "Refreshed notmuch-tree view in emacs" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (notmuch-tree-refresh-view) + (notmuch-test-wait) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox + +# In the following tag tests we make sure the display is updated +# correctly and, in a separate test, that the database is updated +# correctly. + +test_begin_subtest "Tag message in notmuch tree view (display)" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (forward-line) + (notmuch-tree-tag (list "+test_tag")) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox-tagged + +test_begin_subtest "Tag message in notmuch tree view (database)" +output=$(notmuch search --output=messages 'tag:test_tag') +test_expect_equal "$output" "id:877h1wv7mg.fsf@inf-8657.int-evry.fr" + +test_begin_subtest "Untag message in notmuch tree view" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (forward-line) + (notmuch-tree-tag (list "-test_tag")) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox + +test_begin_subtest "Untag message in notmuch tree view (database)" +output=$(notmuch search --output=messages 'tag:test_tag') +test_expect_equal "$output" "" + +test_begin_subtest "Tag thread in notmuch tree view" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + ;; move to a sizable thread + (forward-line 26) + (notmuch-tree-tag-thread (list "+test_thread_tag")) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox-thread-tagged + +test_begin_subtest "Tag message in notmuch tree view (database)" +output=$(notmuch search --output=messages 'tag:test_thread_tag') +test_expect_equal "$output" \ +"id:87ocn0qh6d.fsf@yoom.home.cworth.org +id:20091118005040.GA25380@dottiness.seas.harvard.edu +id:yunaayketfm.fsf@aiko.keithp.com +id:87fx8can9z.fsf@vertex.dottedmag +id:20091117203301.GV3165@dottiness.seas.harvard.edu +id:87iqd9rn3l.fsf@vertex.dottedmag +id:20091117190054.GU3165@dottiness.seas.harvard.edu" + +test_begin_subtest "Untag thread in notmuch tree view" +test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + ;; move to the same sizable thread as above + (forward-line 26) + (notmuch-tree-tag-thread (list "-test_thread_tag")) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox + +test_begin_subtest "Untag message in notmuch tree view (database)" +output=$(notmuch search --output=messages 'tag:test_thread_tag') +test_expect_equal "$output" "" + +test_begin_subtest "Navigation of notmuch-hello to search results" +test_emacs '(notmuch-hello) + (goto-char (point-min)) + (re-search-forward "inbox") + (widget-button-press (1- (point))) + (notmuch-test-wait) + (notmuch-tree-from-search-current-query) + (notmuch-test-wait) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-tag-inbox + +test_begin_subtest "Tree view of a single thread (from search)" +test_emacs '(notmuch-hello) + (goto-char (point-min)) + (re-search-forward "inbox") + (widget-button-press (1- (point))) + (notmuch-test-wait) + (notmuch-tree-from-search-thread) + (notmuch-test-wait) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-single-thread + +test_begin_subtest "Tree view of a single thread (from show)" +test_emacs '(notmuch-hello) + (goto-char (point-min)) + (re-search-forward "inbox") + (widget-button-press (1- (point))) + (notmuch-test-wait) + (notmuch-search-show-thread) + (notmuch-tree-from-show-current-query) + (notmuch-test-wait) + (test-output) + (delete-other-windows)' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-single-thread + +test_begin_subtest "Message window of tree view" +test_emacs '(notmuch-hello) + (goto-char (point-min)) + (re-search-forward "inbox") + (widget-button-press (1- (point))) + (notmuch-test-wait) + (notmuch-search-next-thread) + (notmuch-tree-from-search-thread) + (notmuch-test-wait) + (select-window notmuch-tree-message-window) + (test-output) + (delete-other-windows)' +cp OUTPUT /tmp/mjwout +test_expect_equal_file OUTPUT $EXPECTED/notmuch-tree-show-window + +test_begin_subtest "Stash id" +output=$(test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (require (quote notmuch-tree)) + (notmuch-tree "id:1258498485-sup-142@elly") + (notmuch-test-wait) + (notmuch-show-stash-message-id)') +test_expect_equal "$output" "\"Stashed: id:1258498485-sup-142@elly\"" + +test_begin_subtest "Move to next matching message" +output=$(test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (require (quote notmuch-tree)) + (notmuch-tree "from:cworth") + (notmuch-test-wait) + (notmuch-tree-next-matching-message) + (notmuch-show-stash-message-id)') +test_expect_equal "$output" "\"Stashed: id:878we4qdqf.fsf@yoom.home.cworth.org\"" + +test_begin_subtest "Move to next thread" +output=$(test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (require (quote notmuch-tree)) + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (forward-line 26) + (notmuch-tree-next-thread) + (notmuch-show-stash-message-id)') +test_expect_equal "$output" "\"Stashed: id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net\"" + +test_begin_subtest "Move to previous thread" +output=$(test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (require (quote notmuch-tree)) + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (forward-line 26) + (notmuch-tree-prev-thread) + (notmuch-show-stash-message-id)') +test_expect_equal "$output" "\"Stashed: id:20091117190054.GU3165@dottiness.seas.harvard.edu\"" + +test_begin_subtest "Move to previous previous thread" +output=$(test_emacs '(add-to-list (quote load-path) "'$PICK_DIR'") + (require (quote notmuch-tree)) + (notmuch-tree "tag:inbox") + (notmuch-test-wait) + (forward-line 26) + (notmuch-tree-prev-thread) + (notmuch-tree-prev-thread) + (notmuch-show-stash-message-id)') +test_expect_equal "$output" "\"Stashed: id:1258493565-13508-1-git-send-email-keithp@keithp.com\"" + +test_done diff --git a/test/encoding b/test/encoding index 2e1326eb..b6c86bf0 100755 --- a/test/encoding +++ b/test/encoding @@ -5,14 +5,14 @@ test_description="encoding issues" test_begin_subtest "Message with text of unknown charset" add_message '[content-type]="text/plain; charset=unknown-8bit"' \ "[body]=irrelevant" -output=$(notmuch show id:${gen_msg_id} 2>&1 | notmuch_show_sanitize) -test_expect_equal "$output" "message{ id:msg-001@notmuch-test-suite depth:0 match:1 excluded:0 filename:/XXX/mail/msg-001 +output=$(notmuch show id:${gen_msg_id} 2>&1 | notmuch_show_sanitize_all) +test_expect_equal "$output" "message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX header{ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox unread) Subject: Message with text of unknown charset From: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org> -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE header} body{ part{ ID: 1, Content-type: text/plain @@ -26,7 +26,22 @@ add_message '[content-type]="text/plain; charset=iso-8859-2"' \ '[content-transfer-encoding]=8bit' \ '[subject]="ISO-8859-2 encoded message"' \ "[body]=$'Czech word tu\350\362\341\350\350\355 means pinguin\'s.'" # ISO-8859-2 characters are generated by shell's escape sequences -output=$(notmuch search tučňáččí 2>&1 | notmuch_show_sanitize) +output=$(notmuch search tučňáččí 2>&1 | notmuch_show_sanitize_all) test_expect_equal "$output" "thread:0000000000000002 2001-01-05 [1/1] Notmuch Test Suite; ISO-8859-2 encoded message (inbox unread)" +test_begin_subtest "RFC 2047 encoded word with spaces" +add_message '[subject]="=?utf-8?q?encoded word with spaces?="' +output=$(notmuch search id:${gen_msg_id} 2>&1 | notmuch_show_sanitize) +test_expect_equal "$output" "thread:0000000000000003 2001-01-05 [1/1] Notmuch Test Suite; encoded word with spaces (inbox unread)" + +test_begin_subtest "RFC 2047 encoded words back to back" +add_message '[subject]="=?utf-8?q?encoded-words-back?==?utf-8?q?to-back?="' +output=$(notmuch search id:${gen_msg_id} 2>&1 | notmuch_show_sanitize) +test_expect_equal "$output" "thread:0000000000000004 2001-01-05 [1/1] Notmuch Test Suite; encoded-words-backto-back (inbox unread)" + +test_begin_subtest "RFC 2047 encoded words without space before or after" +add_message '[subject]="=?utf-8?q?encoded?=word without=?utf-8?q?space?=" ' +output=$(notmuch search id:${gen_msg_id} 2>&1 | notmuch_show_sanitize) +test_expect_equal "$output" "thread:0000000000000005 2001-01-05 [1/1] Notmuch Test Suite; encodedword withoutspace (inbox unread)" + test_done diff --git a/test/excludes b/test/excludes index f1ae9ea9..8bbbc2dd 100755 --- a/test/excludes +++ b/test/excludes @@ -67,7 +67,7 @@ thread:XXX 2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inb test_begin_subtest "Search, don't exclude \"deleted\" messages when --exclude=flag specified" output=$(notmuch search --exclude=flag subject:deleted | notmuch_search_sanitize) test_expect_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread) -thread:XXX 2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inbox unread)" +thread:XXX 2001-01-05 [1/2] Notmuch Test Suite; Deleted (deleted inbox unread)" test_begin_subtest "Search, don't exclude \"deleted\" messages from search if not configured" notmuch config set search.exclude_tags @@ -152,7 +152,7 @@ ${matching_message_ids[5]}" test_begin_subtest "Search, exclude=flag (thread summary)" output=$(notmuch search --exclude=flag tag:test | notmuch_search_sanitize) test_expect_equal "$output" "thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread) -thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: double match: reply 4 (deleted inbox test unread) +thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread) thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread) thread:XXX 2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread) thread:XXX 2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)" diff --git a/test/insert b/test/insert index 021edb62..550b4132 100755 --- a/test/insert +++ b/test/insert @@ -68,27 +68,63 @@ test_expect_equal_json "$output" '["inbox", "unread"]' test_begin_subtest "Insert message, add tag" gen_insert_msg notmuch insert +custom < "$gen_msg_filename" -output=$(notmuch count tag:custom) -test_expect_equal "$output" "1" +output=$(notmuch search --output=messages tag:custom) +test_expect_equal "$output" "id:$gen_msg_id" test_begin_subtest "Insert message, add/remove tags" gen_insert_msg notmuch insert +custom -unread < "$gen_msg_filename" -output=$(notmuch count tag:custom NOT tag:unread) -test_expect_equal "$output" "1" +output=$(notmuch search --output=messages tag:custom NOT tag:unread) +test_expect_equal "$output" "id:$gen_msg_id" + +test_begin_subtest "Insert message with default tags stays in new/" +gen_insert_msg +notmuch insert < "$gen_msg_filename" +output=$(notmuch search --output=files id:$gen_msg_id) +dirname=$(dirname "$output") +test_expect_equal "$dirname" "$MAIL_DIR/new" + +test_begin_subtest "Insert message with non-maildir synced tags stays in new/" +gen_insert_msg +notmuch insert +custom -inbox < "$gen_msg_filename" +output=$(notmuch search --output=files id:$gen_msg_id) +dirname=$(dirname "$output") +test_expect_equal "$dirname" "$MAIL_DIR/new" + +test_begin_subtest "Insert message with custom new.tags goes to cur/" +OLDCONFIG=$(notmuch config get new.tags) +notmuch config set new.tags test +gen_insert_msg +notmuch insert < "$gen_msg_filename" +output=$(notmuch search --output=files id:$gen_msg_id) +dirname=$(dirname "$output") +notmuch config set new.tags $OLDCONFIG +test_expect_equal "$dirname" "$MAIL_DIR/cur" + +# additional check on the previous message +test_begin_subtest "Insert message with custom new.tags actually gets the tags" +output=$(notmuch search --output=tags id:$gen_msg_id) +test_expect_equal "$output" "test" + +test_begin_subtest "Insert message with maildir synced tags goes to cur/" +gen_insert_msg +notmuch insert +flagged < "$gen_msg_filename" +output=$(notmuch search --output=files id:$gen_msg_id) +dirname=$(dirname "$output") +test_expect_equal "$dirname" "$MAIL_DIR/cur" test_begin_subtest "Insert message into folder" gen_insert_msg notmuch insert --folder=Drafts < "$gen_msg_filename" output=$(notmuch search --output=files folder:Drafts) dirname=$(dirname "$output") -test_expect_equal "$dirname" "$MAIL_DIR/Drafts/cur" +test_expect_equal "$dirname" "$MAIL_DIR/Drafts/new" test_begin_subtest "Insert message into folder, add/remove tags" gen_insert_msg notmuch insert --folder=Drafts +draft -unread < "$gen_msg_filename" -output=$(notmuch count folder:Drafts tag:draft NOT tag:unread) -test_expect_equal "$output" "1" +output=$(notmuch search --output=messages folder:Drafts tag:draft NOT tag:unread) +test_expect_equal "$output" "id:$gen_msg_id" gen_insert_msg test_expect_code 1 "Insert message into non-existent folder" \ @@ -99,14 +135,14 @@ gen_insert_msg notmuch insert --folder=F --create-folder +folder < "$gen_msg_filename" output=$(notmuch search --output=files folder:F tag:folder) basename=$(basename "$output") -test_expect_equal_file "$gen_msg_filename" "$MAIL_DIR/F/cur/${basename}" +test_expect_equal_file "$gen_msg_filename" "$MAIL_DIR/F/new/${basename}" test_begin_subtest "Insert message, create subfolder" gen_insert_msg notmuch insert --folder=F/G/H/I/J --create-folder +folder < "$gen_msg_filename" output=$(notmuch search --output=files folder:F/G/H/I/J tag:folder) basename=$(basename "$output") -test_expect_equal_file "$gen_msg_filename" "${MAIL_DIR}/F/G/H/I/J/cur/${basename}" +test_expect_equal_file "$gen_msg_filename" "${MAIL_DIR}/F/G/H/I/J/new/${basename}" test_begin_subtest "Insert message, create existing subfolder" gen_insert_msg @@ -26,6 +26,7 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\", \"total\": 1, \"authors\": \"Notmuch Test Suite\", \"subject\": \"json-search-subject\", + \"query\": [\"id:$gen_msg_id\", null], \"tags\": [\"inbox\", \"unread\"]}]" @@ -37,7 +38,7 @@ test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\", \"match\": true test_begin_subtest "Show message: json, inline attachment filename" subject='json-show-inline-attachment-filename' id="json-show-inline-attachment-filename@notmuchmail.org" -emacs_deliver_message \ +emacs_fcc_message \ "$subject" \ 'This is a test message with inline attachment with a filename' \ "(mml-attach-file \"$TEST_DIRECTORY/README\" nil nil \"inline\") @@ -59,6 +60,7 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\", \"total\": 1, \"authors\": \"Notmuch Test Suite\", \"subject\": \"json-search-utf8-body-sübjéct\", + \"query\": [\"id:$gen_msg_id\", null], \"tags\": [\"inbox\", \"unread\"]}]" diff --git a/test/maildir-sync b/test/maildir-sync index 0fc742a4..3186e70f 100755 --- a/test/maildir-sync +++ b/test/maildir-sync @@ -4,11 +4,6 @@ test_description="maildir synchronization" . ./test-lib.sh -# Avoid including the local value of MAIL_DIR in the result. -filter_show_json() { - sed -e "s|${MAIL_DIR}/|MAIL_DIR/|" -} - # Create the expected maildir structure mkdir $MAIL_DIR/cur mkdir $MAIL_DIR/new @@ -40,18 +35,18 @@ output=$(cd ${MAIL_DIR}/cur; ls -1 adding-replied*) test_expect_equal "$output" "adding-replied-tag:2,RS" test_begin_subtest "notmuch show works with renamed file (without notmuch new)" -output=$(notmuch show --format=json id:${gen_msg_id} | filter_show_json) -test_expect_equal_json "$output" '[[[{"id": "adding-replied-tag@notmuch-test-suite", +output=$(notmuch show --format=json id:${gen_msg_id} | notmuch_json_show_sanitize) +test_expect_equal_json "$output" '[[[{"id": "XXXXX", "match": true, "excluded": false, -"filename": "MAIL_DIR/cur/adding-replied-tag:2,RS", -"timestamp": 978709437, +"filename": "YYYYY", +"timestamp": 42, "date_relative": "2001-01-05", "tags": ["inbox","replied"], "headers": {"Subject": "Adding replied tag", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", -"Date": "Fri, 05 Jan 2001 15:43:57 +0000"}, +"Date": "GENERATED_DATE"}, "body": [{"id": 1, "content-type": "text/plain", "content": "This is just a test message (#3)\n"}]}, @@ -83,6 +78,26 @@ test_expect_equal "$output" "No new mail." # creating new directories in the mail store, then it should be # creating all necessary database state for those directories. +test_begin_subtest "Adding non-maildir tags does not move message from new to cur" +add_message [subject]='"Message to stay in new"' \ + [date]='"Sat, 01 Jan 2000 12:00:00 -0000"' \ + [filename]='message-to-stay-in-new' [dir]=new +notmuch tag +donotmove subject:"Message to stay in new" +output=$(cd "$MAIL_DIR"; ls */message-to-stay-in-new*) +test_expect_equal "$output" "new/message-to-stay-in-new" + +test_begin_subtest "Message in cur lacking maildir info gets one on any tag change" +add_message [filename]='message-to-get-maildir-info' [dir]=cur +notmuch tag +anytag id:$gen_msg_id +output=$(cd "$MAIL_DIR"; ls */message-to-get-maildir-info*) +test_expect_equal "$output" "cur/message-to-get-maildir-info:2," + +test_begin_subtest "Message in new with maildir info is moved to cur on any tag change" +add_message [filename]='message-with-info-to-be-moved-to-cur:2,' [dir]=new +notmuch tag +anytag id:$gen_msg_id +output=$(cd "$MAIL_DIR"; ls */message-with-info-to-be-moved-to-cur*) +test_expect_equal "$output" "cur/message-with-info-to-be-moved-to-cur:2," + test_begin_subtest "Removing 'S' flag from existing filename adds 'unread' tag" add_message [subject]='"Removing S flag"' [filename]='removing-s-flag:2,S' [dir]=cur output=$(notmuch search subject:"Removing S flag" | notmuch_search_sanitize) diff --git a/test/missing-headers b/test/missing-headers index f14b8784..cb38301c 100755 --- a/test/missing-headers +++ b/test/missing-headers @@ -43,7 +43,8 @@ test_expect_equal_json "$output" ' ], "thread": "XXX", "timestamp": 978709437, - "total": 1 + "total": 1, + "query": ["id:notmuch-sha1-7a6e4eac383ef958fcd3ebf2143db71b8ff01161", null] }, { "authors": "Notmuch Test Suite", @@ -56,7 +57,8 @@ test_expect_equal_json "$output" ' ], "thread": "XXX", "timestamp": 0, - "total": 1 + "total": 1, + "query": ["id:notmuch-sha1-ca55943aff7a72baf2ab21fa74fab3d632401334", null] } ]' @@ -93,7 +95,7 @@ Body test_begin_subtest "Show: json" output=$(notmuch show --format=json '*' | notmuch_json_show_sanitize) -test_expect_equal_json "$output" ' +expected=$(notmuch_json_show_sanitize <<EOF [ [ [ @@ -154,7 +156,9 @@ test_expect_equal_json "$output" ' [] ] ] -]' - +] +EOF +) +test_expect_equal_json "$output" "$expected" test_done diff --git a/test/multipart b/test/multipart index c974226e..85cbf672 100755 --- a/test/multipart +++ b/test/multipart @@ -594,12 +594,12 @@ test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "'notmuch reply' to a multipart message with json format" notmuch reply --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org' | notmuch_json_show_sanitize >OUTPUT -cat <<EOF >EXPECTED +notmuch_json_show_sanitize <<EOF >EXPECTED {"reply-headers": {"Subject": "Re: Multipart message", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Carl Worth <cworth@cworth.org>, cworth@cworth.org", "In-reply-to": "<87liy5ap00.fsf@yoom.home.cworth.org>", - "References": " <87liy5ap00.fsf@yoom.home.cworth.org>"}, + "References": "<87liy5ap00.fsf@yoom.home.cworth.org>"}, "original": {"id": "XXXXX", "match": false, "excluded": false, @@ -647,4 +647,84 @@ notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out echo -n -e "\xEF\x0D\x0A" > crlf.expected test_expect_equal_file crlf.out crlf.expected -test_done
\ No newline at end of file + +# The ISO-8859-1 encoding of U+00BD is a single byte: octal 275 +# (Portability note: Dollar-Single ($'...', ANSI C-style escape sequences) +# quoting works on bash, ksh, zsh, *BSD sh but not on dash, ash nor busybox sh) +readonly u_00bd_latin1=$'\275' + +# The Unicode fraction symbol 1/2 is U+00BD and is encoded +# in UTF-8 as two bytes: octal 302 275 +readonly u_00bd_utf8=$'\302\275' + +cat <<EOF > ${MAIL_DIR}/include-html +From: A <a@example.com> +To: B <b@example.com> +Subject: html message +Date: Sat, 01 January 2000 00:00:00 +0000 +Message-ID: <htmlmessage> +MIME-Version: 1.0 +Content-Type: multipart/alternative; boundary="==-==" + +--==-== +Content-Type: text/html; charset=UTF-8 + +<p>0.5 equals ${u_00bd_utf8}</p> + +--==-== +Content-Type: text/html; charset=ISO-8859-1 + +<p>0.5 equals ${u_00bd_latin1}</p> + +--==-== +Content-Type: text/plain; charset=UTF-8 + +0.5 equals ${u_00bd_utf8} + +--==-==-- +EOF + +notmuch new > /dev/null + +cat_expected_head () +{ + cat <<EOF +[[[{"id": "htmlmessage", "match":true, "excluded": false, "date_relative":"2000-01-01", + "timestamp": 946684800, + "filename": "${MAIL_DIR}/include-html", + "tags": ["inbox", "unread"], + "headers": { "Date": "Sat, 01 Jan 2000 00:00:00 +0000", "From": "A <a@example.com>", + "Subject": "html message", "To": "B <b@example.com>"}, + "body": [{ + "content-type": "multipart/alternative", "id": 1, +EOF +} + +cat_expected_head > EXPECTED.nohtml +cat <<EOF >> EXPECTED.nohtml +"content": [ + { "id": 2, "content-charset": "UTF-8", "content-length": 21, "content-type": "text/html"}, + { "id": 3, "content-charset": "ISO-8859-1", "content-length": 20, "content-type": "text/html"}, + { "id": 4, "content-type": "text/plain", "content": "0.5 equals \\u00bd\\n"} +]}]},[]]]] +EOF + +# Both the UTF-8 and ISO-8859-1 part should have U+00BD +cat_expected_head > EXPECTED.withhtml +cat <<EOF >> EXPECTED.withhtml +"content": [ + { "id": 2, "content-type": "text/html", "content": "<p>0.5 equals \\u00bd</p>\\n"}, + { "id": 3, "content-type": "text/html", "content": "<p>0.5 equals \\u00bd</p>\\n"}, + { "id": 4, "content-type": "text/plain", "content": "0.5 equals \\u00bd\\n"} +]}]},[]]]] +EOF + +test_begin_subtest "html parts excluded by default" +notmuch show --format=json id:htmlmessage > OUTPUT +test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED.nohtml)" + +test_begin_subtest "html parts included" +notmuch show --format=json --include-html id:htmlmessage > OUTPUT +test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED.withhtml)" + +test_done @@ -218,9 +218,10 @@ test_expect_equal "$output" "Added 1 new message to the database." test_begin_subtest "Ignore files and directories specified in new.ignore (multiple occurrences)" notmuch config set new.ignore .git ignored_file .ignored_hidden_file +notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order. touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan. +touch "${MAIL_DIR}" # likewise for MAIL_DIR mkdir -p "${MAIL_DIR}"/one/two/three/.git -notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order. touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file output=$(NOTMUCH_NEW --debug 2>&1 | sort) test_expect_equal "$output" \ diff --git a/test/notmuch-test b/test/notmuch-test index 6db79795..18593f61 100755 --- a/test/notmuch-test +++ b/test/notmuch-test @@ -19,6 +19,7 @@ cd $(dirname "$0") TESTS=" basic help-test + compact config setup new @@ -62,6 +63,7 @@ TESTS=" emacs-address-cleaning emacs-hello emacs-show + emacs-tree missing-headers hex-escaping parse-time-string @@ -97,6 +99,9 @@ trap - HUP INT TERM # Report results ./aggregate-results.sh test-results/* +ev=$? # Clean up rm -rf test-results corpus.mail + +exit $ev @@ -11,22 +11,22 @@ output=$(notmuch show --format=raw "*" 2>&1) test_expect_equal "$output" "Error: search term did not match precisely one message." test_begin_subtest "Show a raw message" -output=$(notmuch show --format=raw id:msg-001@notmuch-test-suite) +output=$(notmuch show --format=raw id:msg-001@notmuch-test-suite | notmuch_date_sanitize) test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org> Message-Id: <msg-001@notmuch-test-suite> Subject: Test message #1 -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE This is just a test message (#1)" test_begin_subtest "Show another raw message" -output=$(notmuch show --format=raw id:msg-002@notmuch-test-suite) +output=$(notmuch show --format=raw id:msg-002@notmuch-test-suite | notmuch_date_sanitize) test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org> Message-Id: <msg-002@notmuch-test-suite> Subject: Test message #2 -Date: Fri, 05 Jan 2001 15:43:57 +0000 +Date: GENERATED_DATE This is just a test message (#2)" @@ -132,7 +132,9 @@ add_message '[subject]="This subject is exactly 200 bytes in length. Other than '[body]="200-byte header"' output=$(notmuch reply id:${gen_msg_id}) test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org> -Subject: Re: This subject is exactly 200 bytes in length. Other than its length there is not much of note here. Note that the length of 200 bytes includes the Subject: and Re: prefixes with two spaces +Subject: Re: This subject is exactly 200 bytes in length. Other than its + length there is not much of note here. Note that the length of 200 bytes + includes the Subject: and Re: prefixes with two spaces In-Reply-To: <${gen_msg_id}> References: <${gen_msg_id}> @@ -193,4 +195,63 @@ References: <${gen_msg_id}> On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote: > From guessing" +test_begin_subtest "Reply with RFC 2047-encoded headers" +add_message '[subject]="=?iso-8859-1?q?=e0=df=e7?="' \ + '[from]="=?utf-8?q?=e2=98=83?= <snowman@example.com>"' \ + '[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \ + '[body]="Encoding"' + +# GMime happens to change from Q- to B-encoding. We canonicalize the +# case of the encoding and charset because different versions of GMime +# capitalize the encoding differently. +output=$(notmuch reply id:${gen_msg_id} | perl -pe 's/=\?[^?]+\?[bB]\?/lc($&)/ge') +test_expect_equal "$output" "\ +From: Notmuch Test Suite <test_suite@notmuchmail.org> +Subject: Re: =?iso-8859-1?b?4N/n?= +To: =?utf-8?b?4piD?= <snowman@example.com> +In-Reply-To: <${gen_msg_id}> +References: <${gen_msg_id}> + +On Tue, 05 Jan 2010 15:43:56 -0000, ☃ <snowman@example.com> wrote: +> Encoding" + +test_begin_subtest "Reply with RFC 2047-encoded headers (JSON)" +output=$(notmuch reply --format=json id:${gen_msg_id}) +test_expect_equal_json "$output" ' +{ + "original": { + "body": [ + { + "content": "Encoding\n", + "content-type": "text/plain", + "id": 1 + } + ], + "date_relative": "2010-01-05", + "excluded": false, + "filename": "'${MAIL_DIR}'/msg-012", + "headers": { + "Date": "Tue, 05 Jan 2010 15:43:56 +0000", + "From": "\u2603 <snowman@example.com>", + "Subject": "\u00e0\u00df\u00e7", + "To": "Notmuch Test Suite <test_suite@notmuchmail.org>" + }, + "id": "'${gen_msg_id}'", + "match": false, + "tags": [ + "inbox", + "unread" + ], + "timestamp": 1262706236 + }, + "reply-headers": { + "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", + "In-reply-to": "<'${gen_msg_id}'>", + "References": "<'${gen_msg_id}'>", + "Subject": "Re: \u00e0\u00df\u00e7", + "To": "\u2603 <snowman@example.com>" + } +}' + + test_done diff --git a/test/reply-to-sender b/test/reply-to-sender index c7d15bbe..30e5e385 100755 --- a/test/reply-to-sender +++ b/test/reply-to-sender @@ -200,7 +200,9 @@ add_message '[subject]="This subject is exactly 200 bytes in length. Other than '[body]="200-byte header"' output=$(notmuch reply --reply-to=sender id:${gen_msg_id}) test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org> -Subject: Re: This subject is exactly 200 bytes in length. Other than its length there is not much of note here. Note that the length of 200 bytes includes the Subject: and Re: prefixes with two spaces +Subject: Re: This subject is exactly 200 bytes in length. Other than its + length there is not much of note here. Note that the length of 200 bytes + includes the Subject: and Re: prefixes with two spaces In-Reply-To: <${gen_msg_id}> References: <${gen_msg_id}> diff --git a/test/search-output b/test/search-output index c2a87eb1..5ccfeaf9 100755 --- a/test/search-output +++ b/test/search-output @@ -239,6 +239,64 @@ MAIL_DIR/cur/01:2, EOF test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest "--output=files --duplicate=1" +notmuch search --output=files --duplicate=1 '*' | sed -e "s,$MAIL_DIR,MAIL_DIR," >OUTPUT +cat <<EOF >EXPECTED +MAIL_DIR/cur/52:2, +MAIL_DIR/cur/53:2, +MAIL_DIR/cur/50:2, +MAIL_DIR/cur/49:2, +MAIL_DIR/cur/48:2, +MAIL_DIR/cur/47:2, +MAIL_DIR/cur/46:2, +MAIL_DIR/cur/45:2, +MAIL_DIR/cur/44:2, +MAIL_DIR/cur/43:2, +MAIL_DIR/cur/42:2, +MAIL_DIR/cur/41:2, +MAIL_DIR/cur/40:2, +MAIL_DIR/cur/39:2, +MAIL_DIR/cur/38:2, +MAIL_DIR/cur/37:2, +MAIL_DIR/cur/36:2, +MAIL_DIR/cur/35:2, +MAIL_DIR/cur/34:2, +MAIL_DIR/cur/33:2, +MAIL_DIR/cur/32:2, +MAIL_DIR/cur/31:2, +MAIL_DIR/cur/30:2, +MAIL_DIR/cur/29:2, +MAIL_DIR/cur/28:2, +MAIL_DIR/cur/27:2, +MAIL_DIR/cur/26:2, +MAIL_DIR/cur/25:2, +MAIL_DIR/cur/24:2, +MAIL_DIR/cur/23:2, +MAIL_DIR/cur/22:2, +MAIL_DIR/cur/21:2, +MAIL_DIR/cur/19:2, +MAIL_DIR/cur/18:2, +MAIL_DIR/cur/20:2, +MAIL_DIR/cur/17:2, +MAIL_DIR/cur/16:2, +MAIL_DIR/cur/15:2, +MAIL_DIR/cur/14:2, +MAIL_DIR/cur/13:2, +MAIL_DIR/cur/12:2, +MAIL_DIR/cur/11:2, +MAIL_DIR/cur/10:2, +MAIL_DIR/cur/09:2, +MAIL_DIR/cur/08:2, +MAIL_DIR/cur/06:2, +MAIL_DIR/cur/05:2, +MAIL_DIR/cur/04:2, +MAIL_DIR/cur/03:2, +MAIL_DIR/cur/07:2, +MAIL_DIR/cur/02:2, +MAIL_DIR/cur/01:2, +EOF +test_expect_equal_file OUTPUT EXPECTED + test_begin_subtest "--output=files --format=json" notmuch search --format=json --output=files '*' | sed -e "s,$MAIL_DIR,MAIL_DIR," >OUTPUT cat <<EOF >EXPECTED @@ -298,6 +356,13 @@ cat <<EOF >EXPECTED EOF test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest "--output=files --format=json --duplicate=2" +notmuch search --format=json --output=files --duplicate=2 '*' | sed -e "s,$MAIL_DIR,MAIL_DIR," >OUTPUT +cat <<EOF >EXPECTED +["MAIL_DIR/cur/51:2,"] +EOF +test_expect_equal_file OUTPUT EXPECTED + test_begin_subtest "--output=tags" notmuch search --output=tags '*' >OUTPUT cat <<EOF >EXPECTED @@ -19,7 +19,7 @@ test_expect_equal "$output" "((((:id \"${gen_msg_id}\" :match t :excluded nil :f test_begin_subtest "Search message: sexp" add_message "[subject]=\"sexp-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"sexp-search-message\"" output=$(notmuch search --format=sexp "sexp-search-message" | notmuch_search_sanitize) -test_expect_equal "$output" "((:thread \"0000000000000002\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-subject\" :tags (\"inbox\" \"unread\")))" +test_expect_equal "$output" "((:thread \"0000000000000002\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-subject\" :query (\"id:$gen_msg_id\" nil) :tags (\"inbox\" \"unread\")))" test_begin_subtest "Show message: sexp, utf-8" add_message "[subject]=\"sexp-show-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-show-méssage\"" @@ -29,7 +29,7 @@ test_expect_equal "$output" "((((:id \"${gen_msg_id}\" :match t :excluded nil :f test_begin_subtest "Show message: sexp, inline attachment filename" subject='sexp-show-inline-attachment-filename' id="sexp-show-inline-attachment-filename@notmuchmail.org" -emacs_deliver_message \ +emacs_fcc_message \ "$subject" \ 'This is a test message with inline attachment with a filename' \ "(mml-attach-file \"$TEST_DIRECTORY/README\" nil nil \"inline\") @@ -44,7 +44,7 @@ test_expect_equal "$output" "((((:id \"$id\" :match t :excluded nil :filename \" test_begin_subtest "Search message: sexp, utf-8" add_message "[subject]=\"sexp-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\"" output=$(notmuch search --format=sexp "jsön-search-méssage" | notmuch_search_sanitize) -test_expect_equal "$output" "((:thread \"0000000000000005\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-utf8-body-sübjéct\" :tags (\"inbox\" \"unread\")))" +test_expect_equal "$output" "((:thread \"0000000000000005\" :timestamp 946728000 :date_relative \"2000-01-01\" :matched 1 :total 1 :authors \"Notmuch Test Suite\" :subject \"sexp-search-utf8-body-sübjéct\" :query (\"id:$gen_msg_id\" nil) :tags (\"inbox\" \"unread\")))" test_done diff --git a/test/test-lib.el b/test/test-lib.el index d26b49f7..37fcb3d0 100644 --- a/test/test-lib.el +++ b/test/test-lib.el @@ -77,19 +77,22 @@ invisible text." (setq start next-pos))) str)) +;; process-attributes is not defined everywhere, so define an +;; alternate way to test if a process still exists. + +(defun test-process-running (pid) + (= 0 + (signal-process pid 0))) + (defun orphan-watchdog-check (pid) "Periodically check that the process with id PID is still running, quit if it terminated." - (if (not (process-attributes pid)) + (if (not (test-process-running pid)) (kill-emacs))) (defun orphan-watchdog (pid) "Initiate orphan watchdog check." - ; If process-attributes returns nil right away, that probably means - ; it is unimplimented. So we delay two minutes before killing emacs. - (if (process-attributes pid) - (run-at-time 60 60 'orphan-watchdog-check pid) - (run-at-time 120 60 'orphan-watchdog-check pid))) + (run-at-time 60 60 'orphan-watchdog-check pid)) (defun hook-counter (hook) "Count how many times a hook is called. Increments diff --git a/test/test-lib.sh b/test/test-lib.sh index ffab1bb5..efa9fb6f 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -22,6 +22,9 @@ if [ ${BASH_VERSINFO[0]} -lt 4 ]; then exit 1 fi +# Make sure echo builtin does not expand backslash-escape sequences by default. +shopt -u xpg_echo + # if --tee was passed, write the output not only to the terminal, but # additionally to the file test-results/$BASENAME.out, too. case "$GIT_TEST_TEE_STARTED, $* " in @@ -353,7 +356,11 @@ generate_message () fi if [ -z "${template[date]}" ]; then - template[date]="Fri, 05 Jan 2001 15:43:57 +0000" + # we use decreasing timestamps here for historical reasons; + # the existing test suite when we converted to unique timestamps just + # happened to have signicantly fewer failures with that choice. + template[date]=$(TZ=UTC printf "%(%a, %d %b %Y %T %z)T\n" \ + $((978709437 - gen_msg_cnt))) fi additional_headers="" @@ -442,9 +449,9 @@ emacs_deliver_message () test_emacs \ "(let ((message-send-mail-function 'message-smtpmail-send-it) + (mail-host-address \"example.com\") (smtpmail-smtp-server \"localhost\") (smtpmail-smtp-service \"25025\")) - (notmuch-hello) (notmuch-mua-mail) (message-goto-to) (insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\") @@ -462,6 +469,36 @@ emacs_deliver_message () notmuch new >/dev/null } +# Pretend to deliver a message with emacs. Really save it to a file +# and add it to the database +# +# Uses emacs to generate and deliver a message to the mail store. +# Accepts arbitrary extra emacs/elisp functions to modify the message +# before sending, which is useful to doing things like attaching files +# to the message and encrypting/signing. +emacs_fcc_message () +{ + local subject="$1" + local body="$2" + shift 2 + # before we can send a message, we have to prepare the FCC maildir + mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp} + + test_emacs \ + "(let ((message-send-mail-function (lambda () t)) + (mail-host-address \"example.com\")) + (notmuch-mua-mail) + (message-goto-to) + (insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\") + (message-goto-subject) + (insert \"${subject}\") + (message-goto-body) + (insert \"${body}\") + $@ + (message-send-and-exit))" || return 1 + notmuch new >/dev/null +} + # Generate a corpus of email and add it to the database. # # This corpus is fixed, (it happens to be 50 messages from early in @@ -614,16 +651,36 @@ notmuch_show_sanitize_all () { sed \ -e 's| filename:.*| filename:XXXXX|' \ - -e 's| id:[^ ]* | id:XXXXX |' + -e 's| id:[^ ]* | id:XXXXX |' | \ + notmuch_date_sanitize } notmuch_json_show_sanitize () { sed \ -e 's|"id": "[^"]*",|"id": "XXXXX",|g' \ - -e 's|"filename": "/[^"]*",|"filename": "YYYYY",|g' + -e 's|"Date": "Fri, 05 Jan 2001 [^"]*0000"|"Date": "GENERATED_DATE"|g' \ + -e 's|"filename": "/[^"]*",|"filename": "YYYYY",|g' \ + -e 's|"timestamp": 97.......|"timestamp": 42|g' +} + +notmuch_emacs_error_sanitize () +{ + local command=$1 + shift + for file in "$@"; do + echo "=== $file ===" + cat "$file" + done | sed \ + -e 's/^\[.*\]$/[XXX]/' \ + -e "s|^\(command: \)\{0,1\}/.*/$command|\1YYY/$command|" } +notmuch_date_sanitize () +{ + sed \ + -e 's/^Date: Fri, 05 Jan 2001 .*0000/Date: GENERATED_DATE/' +} # End of notmuch helper functions # Use test_set_prereq to tell that a particular prerequisite is available. diff --git a/test/tree.expected-output/notmuch-tree-show-window b/test/tree.expected-output/notmuch-tree-show-window new file mode 100644 index 00000000..e16792b8 --- /dev/null +++ b/test/tree.expected-output/notmuch-tree-show-window @@ -0,0 +1,40 @@ +Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-17) (inbox signed) +Subject: [notmuch] Working with Maildir storage? +To: notmuch@notmuchmail.org +Date: Tue, 17 Nov 2009 14:00:54 -0500 + +[ multipart/mixed ] +[ multipart/signed ] +[ text/plain ] +I saw the LWN article and decided to take a look at notmuch. I'm +currently using mutt and mairix to index and read a collection of +Maildir mail folders (around 40,000 messages total). + +notmuch indexed the messages without complaint, but my attempt at +searching bombed out. Running, for example: + + notmuch search storage + +Resulted in 4604 lines of errors along the lines of: + + Error opening + /home/lars/Mail/read-messages.2008/cur/1246413773.24928_27334.hostname,U=3026:2,S: + Too many open files + +I'm curious if this is expected behavior (i.e., notmuch does not work +with Maildir) or if something else is going on. + +Cheers, + +[ 4-line signature. Click/Enter to show. ] +-- +Lars Kellogg-Stedman <lars@seas.harvard.edu> +Senior Technologist, Computing and Information Technology +Harvard University School of Engineering and Applied Sciences +[ application/pgp-signature ] +[ text/plain ] +[ 4-line signature. Click/Enter to show. ] +_______________________________________________ +notmuch mailing list +notmuch@notmuchmail.org +http://notmuchmail.org/mailman/listinfo/notmuch diff --git a/test/tree.expected-output/notmuch-tree-single-thread b/test/tree.expected-output/notmuch-tree-single-thread new file mode 100644 index 00000000..c9e5ef82 --- /dev/null +++ b/test/tree.expected-output/notmuch-tree-single-thread @@ -0,0 +1,6 @@ + 2009-11-17 Mikhail Gusarov ┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox) + 2009-11-17 Mikhail Gusarov ├─►[notmuch] [PATCH 2/2] Include <stdint.h> to get uint32_t in C++ file with gcc 4.4 (inbox, unread) + 2009-11-17 Carl Worth ╰┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) +End of search results. diff --git a/test/tree.expected-output/notmuch-tree-tag-inbox b/test/tree.expected-output/notmuch-tree-tag-inbox new file mode 100644 index 00000000..484141ec --- /dev/null +++ b/test/tree.expected-output/notmuch-tree-tag-inbox @@ -0,0 +1,53 @@ + 2010-12-29 François Boulogne ─►[aur-general] Guidelines: cp, mkdir vs install (inbox, unread) + 2010-12-16 Olivier Berger ─►Essai accentué (inbox, unread) + 2009-11-18 Chris Wilson ─►[notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox, unread) + 2009-11-18 Alex Botero-Lowry ┬►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment, inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (inbox, unread) + 2009-11-17 Ingmar Vanhassel ┬►[notmuch] [PATCH] Typsos (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Adrian Perez de Cast ┬►[notmuch] Introducing myself (inbox, signed, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Israel Herraiz ┬►[notmuch] New to the list (inbox, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] What a great idea! (inbox, unread) + 2009-11-17 Jan Janak ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] [PATCH] Older versions of install do not support -C. (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Aron Griffis ┬►[notmuch] archive (inbox, unread) + 2009-11-18 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Keith Packard ┬►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-17 Lars Kellogg-Stedman ┬►[notmuch] Working with Maildir storage? (inbox, signed, unread) + 2009-11-17 Mikhail Gusarov ├┬► ... (inbox, signed, unread) + 2009-11-17 Lars Kellogg-Stedman │╰┬► ... (inbox, signed, unread) + 2009-11-17 Mikhail Gusarov │ ├─► ... (inbox, unread) + 2009-11-17 Keith Packard │ ╰┬► ... (inbox, unread) + 2009-11-18 Lars Kellogg-Stedman │ ╰─► ... (inbox, signed, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Mikhail Gusarov ┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Mikhail Gusarov ├─►[notmuch] [PATCH 2/2] Include <stdint.h> to get uint32_t in C++ file with gcc 4.4 (inbox, unread) + 2009-11-17 Carl Worth ╰┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-18 Keith Packard ┬►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ─►[notmuch] request for pull (inbox, unread) + 2009-11-18 Jjgod Jiang ┬►[notmuch] Mac OS X/Darwin compatibility issues (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰┬► ... (inbox, unread) + 2009-11-18 Jjgod Jiang ╰┬► ... (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─► ... (inbox, unread) + 2009-11-18 Rolland Santimano ─►[notmuch] Link to mailing list archives ? (inbox, unread) + 2009-11-18 Jan Janak ─►[notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH 2/2] Read mail directory in inode number order (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox, unread) + 2009-11-18 Lars Kellogg-Stedman ┬►[notmuch] "notmuch help" outputs to stderr? (attachment, inbox, signed, unread) + 2009-11-18 Lars Kellogg-Stedman ╰─► ... (attachment, inbox, signed, unread) + 2009-11-17 Mikhail Gusarov ─►[notmuch] [PATCH] Handle rename of message file (inbox, unread) + 2009-11-17 Alex Botero-Lowry ┬►[notmuch] preliminary FreeBSD support (attachment, inbox, unread) + 2009-11-17 Carl Worth ╰─► ... (inbox, unread) +End of search results. diff --git a/test/tree.expected-output/notmuch-tree-tag-inbox-tagged b/test/tree.expected-output/notmuch-tree-tag-inbox-tagged new file mode 100644 index 00000000..1f75a34b --- /dev/null +++ b/test/tree.expected-output/notmuch-tree-tag-inbox-tagged @@ -0,0 +1,53 @@ + 2010-12-29 François Boulogne ─►[aur-general] Guidelines: cp, mkdir vs install (inbox, unread) + 2010-12-16 Olivier Berger ─►Essai accentué (inbox, test_tag, unread) + 2009-11-18 Chris Wilson ─►[notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox, unread) + 2009-11-18 Alex Botero-Lowry ┬►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment, inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (inbox, unread) + 2009-11-17 Ingmar Vanhassel ┬►[notmuch] [PATCH] Typsos (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Adrian Perez de Cast ┬►[notmuch] Introducing myself (inbox, signed, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Israel Herraiz ┬►[notmuch] New to the list (inbox, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] What a great idea! (inbox, unread) + 2009-11-17 Jan Janak ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] [PATCH] Older versions of install do not support -C. (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Aron Griffis ┬►[notmuch] archive (inbox, unread) + 2009-11-18 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Keith Packard ┬►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-17 Lars Kellogg-Stedman ┬►[notmuch] Working with Maildir storage? (inbox, signed, unread) + 2009-11-17 Mikhail Gusarov ├┬► ... (inbox, signed, unread) + 2009-11-17 Lars Kellogg-Stedman │╰┬► ... (inbox, signed, unread) + 2009-11-17 Mikhail Gusarov │ ├─► ... (inbox, unread) + 2009-11-17 Keith Packard │ ╰┬► ... (inbox, unread) + 2009-11-18 Lars Kellogg-Stedman │ ╰─► ... (inbox, signed, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Mikhail Gusarov ┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Mikhail Gusarov ├─►[notmuch] [PATCH 2/2] Include <stdint.h> to get uint32_t in C++ file with gcc 4.4 (inbox, unread) + 2009-11-17 Carl Worth ╰┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-18 Keith Packard ┬►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ─►[notmuch] request for pull (inbox, unread) + 2009-11-18 Jjgod Jiang ┬►[notmuch] Mac OS X/Darwin compatibility issues (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰┬► ... (inbox, unread) + 2009-11-18 Jjgod Jiang ╰┬► ... (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─► ... (inbox, unread) + 2009-11-18 Rolland Santimano ─►[notmuch] Link to mailing list archives ? (inbox, unread) + 2009-11-18 Jan Janak ─►[notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH 2/2] Read mail directory in inode number order (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox, unread) + 2009-11-18 Lars Kellogg-Stedman ┬►[notmuch] "notmuch help" outputs to stderr? (attachment, inbox, signed, unread) + 2009-11-18 Lars Kellogg-Stedman ╰─► ... (attachment, inbox, signed, unread) + 2009-11-17 Mikhail Gusarov ─►[notmuch] [PATCH] Handle rename of message file (inbox, unread) + 2009-11-17 Alex Botero-Lowry ┬►[notmuch] preliminary FreeBSD support (attachment, inbox, unread) + 2009-11-17 Carl Worth ╰─► ... (inbox, unread) +End of search results. diff --git a/test/tree.expected-output/notmuch-tree-tag-inbox-thread-tagged b/test/tree.expected-output/notmuch-tree-tag-inbox-thread-tagged new file mode 100644 index 00000000..a7aba6e2 --- /dev/null +++ b/test/tree.expected-output/notmuch-tree-tag-inbox-thread-tagged @@ -0,0 +1,53 @@ + 2010-12-29 François Boulogne ─►[aur-general] Guidelines: cp, mkdir vs install (inbox, unread) + 2010-12-16 Olivier Berger ─►Essai accentué (inbox, unread) + 2009-11-18 Chris Wilson ─►[notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox, unread) + 2009-11-18 Alex Botero-Lowry ┬►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment, inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (inbox, unread) + 2009-11-17 Ingmar Vanhassel ┬►[notmuch] [PATCH] Typsos (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Adrian Perez de Cast ┬►[notmuch] Introducing myself (inbox, signed, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Israel Herraiz ┬►[notmuch] New to the list (inbox, unread) + 2009-11-18 Keith Packard ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] What a great idea! (inbox, unread) + 2009-11-17 Jan Janak ├─► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Jan Janak ┬►[notmuch] [PATCH] Older versions of install do not support -C. (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Aron Griffis ┬►[notmuch] archive (inbox, unread) + 2009-11-18 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-17 Keith Packard ┬►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-18 Carl Worth ╰─►[notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox, unread) + 2009-11-17 Lars Kellogg-Stedman ┬►[notmuch] Working with Maildir storage? (inbox, signed, test_thread_tag, unread) + 2009-11-17 Mikhail Gusarov ├┬► ... (inbox, signed, test_thread_tag, unread) + 2009-11-17 Lars Kellogg-Stedman │╰┬► ... (inbox, signed, test_thread_tag, unread) + 2009-11-17 Mikhail Gusarov │ ├─► ... (inbox, test_thread_tag, unread) + 2009-11-17 Keith Packard │ ╰┬► ... (inbox, test_thread_tag, unread) + 2009-11-18 Lars Kellogg-Stedman │ ╰─► ... (inbox, signed, test_thread_tag, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, test_thread_tag, unread) + 2009-11-17 Mikhail Gusarov ┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Mikhail Gusarov ├─►[notmuch] [PATCH 2/2] Include <stdint.h> to get uint32_t in C++ file with gcc 4.4 (inbox, unread) + 2009-11-17 Carl Worth ╰┬►[notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox, unread) + 2009-11-17 Keith Packard ╰┬► ... (inbox, unread) + 2009-11-18 Carl Worth ╰─► ... (inbox, unread) + 2009-11-18 Keith Packard ┬►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─►[notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox, unread) + 2009-11-18 Alexander Botero-Low ─►[notmuch] request for pull (inbox, unread) + 2009-11-18 Jjgod Jiang ┬►[notmuch] Mac OS X/Darwin compatibility issues (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰┬► ... (inbox, unread) + 2009-11-18 Jjgod Jiang ╰┬► ... (inbox, unread) + 2009-11-18 Alexander Botero-Low ╰─► ... (inbox, unread) + 2009-11-18 Rolland Santimano ─►[notmuch] Link to mailing list archives ? (inbox, unread) + 2009-11-18 Jan Janak ─►[notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH 2/2] Read mail directory in inode number order (inbox, unread) + 2009-11-18 Stewart Smith ─►[notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox, unread) + 2009-11-18 Lars Kellogg-Stedman ┬►[notmuch] "notmuch help" outputs to stderr? (attachment, inbox, signed, unread) + 2009-11-18 Lars Kellogg-Stedman ╰─► ... (attachment, inbox, signed, unread) + 2009-11-17 Mikhail Gusarov ─►[notmuch] [PATCH] Handle rename of message file (inbox, unread) + 2009-11-17 Alex Botero-Lowry ┬►[notmuch] preliminary FreeBSD support (attachment, inbox, unread) + 2009-11-17 Carl Worth ╰─► ... (inbox, unread) +End of search results. |
