]> git.notmuchmail.org Git - notmuch/blob - test/T080-search.sh
emacs: Add new option notmuch-search-hide-excluded
[notmuch] / test / T080-search.sh
1 #!/usr/bin/env bash
2 test_description='"notmuch search" in several variations'
3 . $(dirname "$0")/test-lib.sh || exit 1
4
5 add_email_corpus
6
7 test_begin_subtest "Search body"
8 add_message '[subject]="body search"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [body]=bodysearchtest
9 output=$(notmuch search bodysearchtest | notmuch_search_sanitize)
10 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)"
11
12 test_begin_subtest "Search by from:"
13 add_message '[subject]="search by from"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom
14 output=$(notmuch search from:searchbyfrom | notmuch_search_sanitize)
15 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)"
16
17 test_begin_subtest "Search by to:"
18 add_message '[subject]="search by to"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto
19 output=$(notmuch search to:searchbyto | notmuch_search_sanitize)
20 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)"
21
22 test_begin_subtest "Search by subject:"
23 add_message [subject]=subjectsearchtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
24 output=$(notmuch search subject:subjectsearchtest | notmuch_search_sanitize)
25 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)"
26
27 test_begin_subtest "Search by subject (utf-8):"
28 add_message [subject]=utf8-sübjéct '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
29 output=$(notmuch search subject:utf8-sübjéct | notmuch_search_sanitize)
30 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-sübjéct (inbox unread)"
31
32 test_begin_subtest "Search by id:"
33 add_message '[subject]="search by id"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
34 output=$(notmuch search id:${gen_msg_id} | notmuch_search_sanitize)
35 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)"
36
37 test_begin_subtest "Message-Id with spaces"
38 test_subtest_known_broken
39 add_message '[id]="message id@example.com"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
40 output=$(notmuch search --output=messages id:"message id@example.com")
41 test_expect_equal "$output" "messageid@example.com"
42
43 test_begin_subtest "Search by mid:"
44 add_message '[subject]="search by mid"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
45 output=$(notmuch search mid:${gen_msg_id} | notmuch_search_sanitize)
46 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by mid (inbox unread)"
47
48 test_begin_subtest "Search by tag:"
49 add_message '[subject]="search by tag"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
50 notmuch tag +searchbytag id:${gen_msg_id}
51 output=$(notmuch search tag:searchbytag | notmuch_search_sanitize)
52 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)"
53
54 test_begin_subtest "Search by thread:"
55 add_message '[subject]="search by thread"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
56 thread_id=$(notmuch search id:${gen_msg_id} | sed -e "s/thread:\([a-f0-9]*\).*/\1/")
57 output=$(notmuch search thread:${thread_id} | notmuch_search_sanitize)
58 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)"
59
60 test_begin_subtest "Search body (phrase)"
61 add_message '[subject]="body search (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="body search (phrase)"'
62 add_message '[subject]="negative result"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="This phrase should not match the body search"'
63 output=$(notmuch search '"body search (phrase)"' | notmuch_search_sanitize)
64 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)"
65
66 test_begin_subtest "Search by from: (address)"
67 add_message '[subject]="search by from (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom@example.com
68 output=$(notmuch search from:searchbyfrom@example.com | notmuch_search_sanitize)
69 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)"
70
71 test_begin_subtest "Search by from: (name)"
72 add_message '[subject]="search by from (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[from]="Search By From Name <test@example.com>"'
73 output=$(notmuch search 'from:"Search By From Name"' | notmuch_search_sanitize)
74 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"
75
76 test_begin_subtest "Search by from: (name and address)"
77 output=$(notmuch search 'from:"Search By From Name <test@example.com>"' | notmuch_search_sanitize)
78 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"
79
80 test_begin_subtest "Search by from: without prefix (name and address)"
81 output=$(notmuch search '"Search By From Name <test@example.com>"' | notmuch_search_sanitize)
82 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"
83
84 test_begin_subtest "Search by to: (address)"
85 add_message '[subject]="search by to (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto@example.com
86 output=$(notmuch search to:searchbyto@example.com | notmuch_search_sanitize)
87 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)"
88
89 test_begin_subtest "Search by to: (name)"
90 add_message '[subject]="search by to (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[to]="Search By To Name <test@example.com>"'
91 output=$(notmuch search 'to:"Search By To Name"' | notmuch_search_sanitize)
92 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"
93
94 test_begin_subtest "Search by to: (name and address)"
95 output=$(notmuch search 'to:"Search By To Name <test@example.com>"' | notmuch_search_sanitize)
96 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"
97
98 test_begin_subtest "Search by to: without prefix (name and address)"
99 output=$(notmuch search '"Search By To Name <test@example.com>"' | notmuch_search_sanitize)
100 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"
101
102 test_begin_subtest "Search by subject: (phrase)"
103 add_message '[subject]="subject search test (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
104 add_message '[subject]="this phrase should not match the subject search test"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
105 output=$(notmuch search 'subject:"subject search test (phrase)"' | notmuch_search_sanitize)
106 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)"
107
108 test_begin_subtest 'Search for all messages ("*")'
109 notmuch search '*' | notmuch_search_sanitize > OUTPUT
110 cat <<EOF >EXPECTED
111 thread:XXX   2010-12-29 [1/1] François Boulogne; [aur-general] Guidelines: cp, mkdir vs install (inbox unread)
112 thread:XXX   2010-12-16 [1/1] Olivier Berger; Essai accentué (inbox unread)
113 thread:XXX   2009-11-18 [1/1] Chris Wilson; [notmuch] [PATCH 1/2] Makefile: evaluate pkg-config once (inbox unread)
114 thread:XXX   2009-11-18 [2/2] Alex Botero-Lowry, Carl Worth; [notmuch] [PATCH] Error out if no query is supplied to search instead of going into an infinite loop (attachment inbox unread)
115 thread:XXX   2009-11-18 [2/2] Ingmar Vanhassel, Carl Worth; [notmuch] [PATCH] Typsos (inbox unread)
116 thread:XXX   2009-11-18 [3/3] Adrian Perez de Castro, Keith Packard, Carl Worth; [notmuch] Introducing myself (inbox signed unread)
117 thread:XXX   2009-11-18 [3/3] Israel Herraiz, Keith Packard, Carl Worth; [notmuch] New to the list (inbox unread)
118 thread:XXX   2009-11-18 [3/3] Jan Janak, Carl Worth; [notmuch] What a great idea! (inbox unread)
119 thread:XXX   2009-11-18 [2/2] Jan Janak, Carl Worth; [notmuch] [PATCH] Older versions of install do not support -C. (inbox unread)
120 thread:XXX   2009-11-18 [3/3(4)] Aron Griffis, Keith Packard, Carl Worth; [notmuch] archive (inbox unread)
121 thread:XXX   2009-11-18 [2/2] Keith Packard, Carl Worth; [notmuch] [PATCH] Make notmuch-show 'X' (and 'x') commands remove inbox (and unread) tags (inbox unread)
122 thread:XXX   2009-11-18 [7/7] Lars Kellogg-Stedman, Mikhail Gusarov, Keith Packard, Carl Worth; [notmuch] Working with Maildir storage? (inbox signed unread)
123 thread:XXX   2009-11-18 [5/5] Mikhail Gusarov, Carl Worth, Keith Packard; [notmuch] [PATCH 1/2] Close message file after parsing message headers (inbox unread)
124 thread:XXX   2009-11-18 [2/2] Keith Packard, Alexander Botero-Lowry; [notmuch] [PATCH] Create a default notmuch-show-hook that highlights URLs and uses word-wrap (inbox unread)
125 thread:XXX   2009-11-18 [1/1] Alexander Botero-Lowry; [notmuch] request for pull (inbox unread)
126 thread:XXX   2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread)
127 thread:XXX   2009-11-18 [1/1] Rolland Santimano; [notmuch] Link to mailing list archives ? (inbox unread)
128 thread:XXX   2009-11-18 [1/1] Jan Janak; [notmuch] [PATCH] notmuch new: Support for conversion of spool subdirectories into tags (inbox unread)
129 thread:XXX   2009-11-18 [1/1] Stewart Smith; [notmuch] [PATCH] count_files: sort directory in inode order before statting (inbox unread)
130 thread:XXX   2009-11-18 [1/1] Stewart Smith; [notmuch] [PATCH 2/2] Read mail directory in inode number order (inbox unread)
131 thread:XXX   2009-11-18 [1/1] Stewart Smith; [notmuch] [PATCH] Fix linking with gcc to use g++ to link in C++ libs. (inbox unread)
132 thread:XXX   2009-11-18 [2/2] Lars Kellogg-Stedman; [notmuch] "notmuch help" outputs to stderr? (attachment inbox signed unread)
133 thread:XXX   2009-11-17 [1/1] Mikhail Gusarov; [notmuch] [PATCH] Handle rename of message file (inbox unread)
134 thread:XXX   2009-11-17 [2/2] Alex Botero-Lowry, Carl Worth; [notmuch] preliminary FreeBSD support (attachment inbox unread)
135 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)
136 thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)
137 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)
138 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)
139 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-sübjéct (inbox unread)
140 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)
141 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; Message-Id with spaces (inbox unread)
142 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by mid (inbox unread)
143 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)
144 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)
145 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)
146 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; negative result (inbox unread)
147 thread:XXX   2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)
148 thread:XXX   2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)
149 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)
150 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)
151 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)
152 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; this phrase should not match the subject search test (inbox unread)
153 EOF
154 test_expect_equal_file EXPECTED OUTPUT
155
156 test_begin_subtest "Search body (utf-8):"
157 add_message '[subject]="utf8-message-body-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="message body utf8: bödý"'
158 output=$(notmuch search "bödý" | notmuch_search_sanitize)
159 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-message-body-subject (inbox unread)"
160
161
162 cat <<EOF > ${MAIL_DIR}/termpos
163 From: Source <source@example.com>
164 To: Dest <dest@example.com>
165 Subject: part overlap test
166 Date: Sat, 01 January 2000 00:00:00 +0000
167 Message-ID: <termpos>
168 MIME-Version: 1.0
169 Content-Type: multipart/mixed; boundary="==-=="
170
171 --==-==
172 Content-Type: text/plain
173
174 a b c
175
176 --==-==
177 Content-Type: text/plain
178
179 x y z
180
181 --==-==--
182 EOF
183 notmuch new > /dev/null
184
185 test_begin_subtest "headers do not have adjacent term positions"
186 # Regression test for a bug where term positions for non-prefixed
187 # terms weren't updated
188 output=$(notmuch search id:termpos and '"com dest"')
189 test_expect_equal "$output" ""
190
191 test_begin_subtest "parts have non-overlapping term positions"
192 output=$(notmuch search id:termpos and '"a y c"')
193 test_expect_equal "$output" ""
194
195 test_begin_subtest "parts do not have adjacent term positions"
196 output=$(notmuch search id:termpos and '"c x"')
197 test_expect_equal "$output" ""
198
199 test_done