[PATCH v4 5/6] test: add some exclude tests
[notmuch-archives.git] / e3 / c457649bfa3de6da37d4ef5d8a6fcfe9112f96
1 Return-Path: <markwalters1009@gmail.com>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 65E80431FD6\r
6         for <notmuch@notmuchmail.org>; Sat,  7 Apr 2012 09:11:06 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: 0.201\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=0.201 tagged_above=-999 required=5\r
12         tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\r
13         FREEMAIL_ENVFROM_END_DIGIT=1, FREEMAIL_FROM=0.001,\r
14         RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
15 Received: from olra.theworths.org ([127.0.0.1])\r
16         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
17         with ESMTP id uz6URSb-Zc4V for <notmuch@notmuchmail.org>;\r
18         Sat,  7 Apr 2012 09:10:57 -0700 (PDT)\r
19 Received: from mail-wg0-f45.google.com (mail-wg0-f45.google.com\r
20  [74.125.82.45])        (using TLSv1 with cipher RC4-SHA (128/128 bits))        (No client\r
21  certificate requested) by olra.theworths.org (Postfix) with ESMTPS id\r
22  76023431FAF    for <notmuch@notmuchmail.org>; Sat,  7 Apr 2012 09:10:57 -0700\r
23  (PDT)\r
24 Received: by mail-wg0-f45.google.com with SMTP id dt14so822285wgb.2\r
25         for <notmuch@notmuchmail.org>; Sat, 07 Apr 2012 09:10:57 -0700 (PDT)\r
26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;\r
27         h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references\r
28         :mime-version:content-type:content-transfer-encoding;\r
29         bh=2Lp/8mioqNYXSDKEvYgI5JGga1T7YRvp8LKP5r6WM7M=;\r
30         b=BLCXr/aIV120mtYKUVwRkVd8MZyx3WjQ4b27Z6Gt1bSF11YpvuQ9n3lIrLrekKNAQt\r
31         Fk9mdwNd9VytruZhmdxgohqtpWSP6Acen2at9mvN6HCnBiDhxVNrftLcGHtl8AuDKEnS\r
32         buF9H5VyvnyapoZvfnbd+95yvd/PSgTxTuqkHxatBSbWJldQSH4AJklNG0IbZE+lZF8D\r
33         pnIxT+Iy4T4DTHiQ8XFVbDkrYxMa5ioL4rJdPzTvHrr0n/i3EdYpWWUZgqh/vl77H0Ul\r
34         JbFYtrhOZC6ZHzg2k1jdsCA3C8s3fUhlqdkYLqtTHDqXQDKNjbHCpatGzFuGHSx4UBBz\r
35         LtIA==\r
36 Received: by 10.216.134.233 with SMTP id s83mr948414wei.104.1333815057076;\r
37         Sat, 07 Apr 2012 09:10:57 -0700 (PDT)\r
38 Received: from localhost (94.197.17.51.threembb.co.uk. [94.197.17.51])\r
39         by mx.google.com with ESMTPS id h8sm25359069wix.4.2012.04.07.09.10.49\r
40         (version=TLSv1/SSLv3 cipher=OTHER);\r
41         Sat, 07 Apr 2012 09:10:56 -0700 (PDT)\r
42 From: Mark Walters <markwalters1009@gmail.com>\r
43 To: notmuch@notmuchmail.org\r
44 Subject: [PATCH v4 5/6] test: add some exclude tests\r
45 Date: Sat,  7 Apr 2012 17:10:07 +0100\r
46 Message-Id: <1333815008-24668-6-git-send-email-markwalters1009@gmail.com>\r
47 X-Mailer: git-send-email 1.7.9.1\r
48 In-Reply-To: <1333815008-24668-1-git-send-email-markwalters1009@gmail.com>\r
49 References: <1333815008-24668-1-git-send-email-markwalters1009@gmail.com>\r
50 MIME-Version: 1.0\r
51 Content-Type: text/plain; charset=UTF-8\r
52 Content-Transfer-Encoding: 8bit\r
53 X-BeenThere: notmuch@notmuchmail.org\r
54 X-Mailman-Version: 2.1.13\r
55 Precedence: list\r
56 List-Id: "Use and development of the notmuch mail system."\r
57         <notmuch.notmuchmail.org>\r
58 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
59         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
60 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
61 List-Post: <mailto:notmuch@notmuchmail.org>\r
62 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
63 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
64         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
65 X-List-Received-Date: Sat, 07 Apr 2012 16:11:06 -0000\r
66 \r
67 Systematically test the exclude options for search. Also move the\r
68 search existing exclude tests into the new test. There is some overlap\r
69 between the two sets of tests but many of the existing ones are there\r
70 because they triggered bugs in the past so I have kept them to ensure\r
71 coverage.\r
72 ---\r
73  test/count        |   21 ---\r
74  test/excludes     |  423 +++++++++++++++++++++++++++++++++++++++++++++++++++++\r
75  test/notmuch-test |    1 +\r
76  test/search       |   48 ------\r
77  4 files changed, 424 insertions(+), 69 deletions(-)\r
78  create mode 100755 test/excludes\r
79 \r
80 diff --git a/test/count b/test/count\r
81 index fd387e5..300b171 100755\r
82 --- a/test/count\r
83 +++ b/test/count\r
84 @@ -37,25 +37,4 @@ test_expect_equal \\r
85      "0" \\r
86      "`notmuch count --output=threads ${SEARCH}`"\r
87  \r
88 -test_begin_subtest "count excluding \"deleted\" messages"\r
89 -notmuch config set search.exclude_tags deleted\r
90 -generate_message '[subject]="Not deleted"'\r
91 -generate_message '[subject]="Another not deleted"'\r
92 -generate_message '[subject]="Deleted"'\r
93 -notmuch new > /dev/null\r
94 -notmuch tag +deleted id:$gen_msg_id\r
95 -test_expect_equal \\r
96 -    "2" \\r
97 -    "`notmuch count subject:deleted`"\r
98 -\r
99 -test_begin_subtest "count \"deleted\" messages, exclude overridden"\r
100 -test_expect_equal \\r
101 -    "1" \\r
102 -    "`notmuch count subject:deleted and tag:deleted`"\r
103 -\r
104 -test_begin_subtest "count \"deleted\" messages, --exclude=false"\r
105 -test_expect_equal \\r
106 -    "3" \\r
107 -    "`notmuch count --exclude=false subject:deleted`"\r
108 -\r
109  test_done\r
110 diff --git a/test/excludes b/test/excludes\r
111 new file mode 100755\r
112 index 0000000..24d653e\r
113 --- /dev/null\r
114 +++ b/test/excludes\r
115 @@ -0,0 +1,423 @@\r
116 +#!/usr/bin/env bash\r
117 +test_description='"notmuch search, count and show" with excludes in several variations'\r
118 +. ./test-lib.sh\r
119 +\r
120 +# Generates a thread consisting of a top level message and 'length'\r
121 +# replies. The subject of the top message 'subject: top message"\r
122 +# and the subject of the nth reply in the thread is "subject: reply n"\r
123 +generate_thread ()\r
124 +{\r
125 +    local subject="$1"\r
126 +    local length="$2"\r
127 +    generate_message '[subject]="'"${subject}: top message"'"' '[body]="'"body of top message"'"'\r
128 +    parent_id=$gen_msg_id\r
129 +    gen_thread_msg_id[0]=$gen_msg_id\r
130 +    for i in `seq 1 $length`\r
131 +    do\r
132 +       generate_message '[subject]="'"${subject}: reply $i"'"' \\r
133 +                        "[in-reply-to]=\<$parent_id\>" \\r
134 +                        '[body]="'"body of reply $i"'"'\r
135 +       gen_thread_msg_id[$i]=$gen_msg_id\r
136 +       parent_id=$gen_msg_id\r
137 +    done\r
138 +    notmuch new > /dev/null\r
139 +    # We cannot retrieve the thread_id until after we have run notmuch new.\r
140 +    gen_thread_id=`notmuch search --output=threads id:${gen_thread_msg_id[0]}`\r
141 +}\r
142 +\r
143 +#############################################\r
144 +# These are the original search exclude tests.\r
145 +\r
146 +test_begin_subtest "Search, exclude \"deleted\" messages from search"\r
147 +notmuch config set search.exclude_tags deleted\r
148 +generate_message '[subject]="Not deleted"'\r
149 +not_deleted_id=$gen_msg_id\r
150 +generate_message '[subject]="Deleted"'\r
151 +notmuch new > /dev/null\r
152 +notmuch tag +deleted id:$gen_msg_id\r
153 +deleted_id=$gen_msg_id\r
154 +output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
155 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)"\r
156 +\r
157 +test_begin_subtest "Search, exclude \"deleted\" messages from message search"\r
158 +output=$(notmuch search --output=messages subject:deleted | notmuch_search_sanitize)\r
159 +test_expect_equal "$output" "id:$not_deleted_id"\r
160 +\r
161 +test_begin_subtest "Search, exclude \"deleted\" messages from message search --exclude=false"\r
162 +output=$(notmuch search --exclude=false --output=messages subject:deleted | notmuch_search_sanitize)\r
163 +test_expect_equal "$output" "id:$not_deleted_id\r
164 +id:$deleted_id"\r
165 +\r
166 +test_begin_subtest "Search, exclude \"deleted\" messages from message search (non-existent exclude-tag)"\r
167 +notmuch config set search.exclude_tags deleted non_existent_tag\r
168 +output=$(notmuch search --output=messages subject:deleted | notmuch_search_sanitize)\r
169 +test_expect_equal "$output" "id:$not_deleted_id"\r
170 +notmuch config set search.exclude_tags deleted\r
171 +\r
172 +test_begin_subtest "Search, exclude \"deleted\" messages from search, overridden"\r
173 +output=$(notmuch search subject:deleted and tag:deleted | notmuch_search_sanitize)\r
174 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
175 +\r
176 +test_begin_subtest "Search, exclude \"deleted\" messages from threads"\r
177 +add_message '[subject]="Not deleted reply"' '[in-reply-to]="<$gen_msg_id>"'\r
178 +output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
179 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
180 +thread:XXX   2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inbox unread)"\r
181 +\r
182 +test_begin_subtest "Search, don't exclude \"deleted\" messages when --exclude=flag specified"\r
183 +output=$(notmuch search --exclude=flag subject:deleted | notmuch_search_sanitize)\r
184 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
185 +thread:XXX   2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inbox unread)"\r
186 +\r
187 +test_begin_subtest "Search, don't exclude \"deleted\" messages from search if not configured"\r
188 +notmuch config set search.exclude_tags\r
189 +output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
190 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
191 +thread:XXX   2001-01-05 [2/2] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
192 +\r
193 +\r
194 +########################################################\r
195 +# We construct some threads for the tests. We use the tag "test" to\r
196 +# indicate which messages we will search for.\r
197 +\r
198 +# A thread of deleted messages; test matches one of them.\r
199 +generate_thread "All messages excluded: single match" 5\r
200 +notmuch tag +deleted $gen_thread_id\r
201 +notmuch tag +test id:${gen_thread_msg_id[2]}\r
202 +\r
203 +# A thread of deleted messages; test matches two of them.\r
204 +generate_thread "All messages excluded: double match" 5\r
205 +notmuch tag +deleted $gen_thread_id\r
206 +notmuch tag +test id:${gen_thread_msg_id[2]}\r
207 +notmuch tag +test id:${gen_thread_msg_id[4]}\r
208 +\r
209 +# A thread some messages deleted; test only matches a deleted message.\r
210 +generate_thread "Some messages excluded: single excluded match" 5\r
211 +notmuch tag +deleted +test id:${gen_thread_msg_id[3]}\r
212 +\r
213 +# A thread some messages deleted; test only matches a non-deleted message.\r
214 +generate_thread "Some messages excluded: single non-excluded match" 5\r
215 +notmuch tag +deleted id:${gen_thread_msg_id[2]}\r
216 +notmuch tag +test id:${gen_thread_msg_id[4]}\r
217 +\r
218 +# A thread no messages deleted; test matches a message.\r
219 +generate_thread "No messages excluded: single match" 5\r
220 +notmuch tag +test id:${gen_thread_msg_id[3]}\r
221 +\r
222 +# Temporarily remove excludes to get list of matching messages\r
223 +notmuch config set search.exclude_tags\r
224 +matching_message_ids=( `notmuch search --output=messages tag:test` )\r
225 +notmuch config set search.exclude_tags deleted\r
226 +\r
227 +#########################################\r
228 +# Notmuch search tests\r
229 +\r
230 +test_begin_subtest "Search, default exclusion (thread summary)"\r
231 +output=$(notmuch search tag:test | notmuch_search_sanitize)\r
232 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread)\r
233 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)"\r
234 +\r
235 +test_begin_subtest "Search, default exclusion (messages)"\r
236 +output=$(notmuch search --output=messages tag:test | notmuch_search_sanitize)\r
237 +test_expect_equal "$output" "${matching_message_ids[4]}\r
238 +${matching_message_ids[5]}"\r
239 +\r
240 +test_begin_subtest "Search, exclude=true (thread summary)"\r
241 +output=$(notmuch search --exclude=true tag:test | notmuch_search_sanitize)\r
242 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread)\r
243 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)"\r
244 +\r
245 +test_begin_subtest "Search, exclude=true (messages)"\r
246 +output=$(notmuch search --exclude=true --output=messages tag:test | notmuch_search_sanitize)\r
247 +test_expect_equal "$output" "${matching_message_ids[4]}\r
248 +${matching_message_ids[5]}"\r
249 +\r
250 +test_begin_subtest "Search, exclude=false (thread summary)"\r
251 +output=$(notmuch search --exclude=false tag:test | notmuch_search_sanitize)\r
252 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)\r
253 +thread:XXX   2001-01-05 [2/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)\r
254 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)\r
255 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread)\r
256 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)"\r
257 +\r
258 +test_begin_subtest "Search, exclude=false (messages)"\r
259 +output=$(notmuch search --exclude=false --output=messages tag:test | notmuch_search_sanitize)\r
260 +test_expect_equal "$output" "${matching_message_ids[0]}\r
261 +${matching_message_ids[1]}\r
262 +${matching_message_ids[2]}\r
263 +${matching_message_ids[3]}\r
264 +${matching_message_ids[4]}\r
265 +${matching_message_ids[5]}"\r
266 +\r
267 +test_begin_subtest "Search, exclude=flag (thread summary)"\r
268 +output=$(notmuch search --exclude=flag tag:test | notmuch_search_sanitize)\r
269 +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)\r
270 +thread:XXX   2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: double match: reply 4 (deleted inbox test unread)\r
271 +thread:XXX   2001-01-05 [0/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)\r
272 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread)\r
273 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)"\r
274 +\r
275 +test_begin_subtest "Search, exclude=flag (messages)"\r
276 +output=$(notmuch search --exclude=flag --output=messages tag:test | notmuch_search_sanitize)\r
277 +test_expect_equal "$output" "${matching_message_ids[0]}\r
278 +${matching_message_ids[1]}\r
279 +${matching_message_ids[2]}\r
280 +${matching_message_ids[3]}\r
281 +${matching_message_ids[4]}\r
282 +${matching_message_ids[5]}"\r
283 +\r
284 +test_begin_subtest "Search, default exclusion: tag in query (thread summary)"\r
285 +output=$(notmuch search tag:test and tag:deleted | notmuch_search_sanitize)\r
286 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)\r
287 +thread:XXX   2001-01-05 [2/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)\r
288 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)"\r
289 +\r
290 +test_begin_subtest "Search, default exclusion: tag in query (messages)"\r
291 +output=$(notmuch search --output=messages tag:test and tag:deleted | notmuch_search_sanitize)\r
292 +test_expect_equal "$output" "${matching_message_ids[0]}\r
293 +${matching_message_ids[1]}\r
294 +${matching_message_ids[2]}\r
295 +${matching_message_ids[3]}"\r
296 +\r
297 +test_begin_subtest "Search, exclude=true: tag in query (thread summary)"\r
298 +output=$(notmuch search --exclude=true tag:test and tag:deleted | notmuch_search_sanitize)\r
299 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)\r
300 +thread:XXX   2001-01-05 [2/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)\r
301 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)"\r
302 +\r
303 +test_begin_subtest "Search, exclude=true: tag in query (messages)"\r
304 +output=$(notmuch search --exclude=true --output=messages tag:test and tag:deleted | notmuch_search_sanitize)\r
305 +test_expect_equal "$output" "${matching_message_ids[0]}\r
306 +${matching_message_ids[1]}\r
307 +${matching_message_ids[2]}\r
308 +${matching_message_ids[3]}"\r
309 +\r
310 +test_begin_subtest "Search, exclude=false: tag in query (thread summary)"\r
311 +output=$(notmuch search --exclude=false tag:test and tag:deleted | notmuch_search_sanitize)\r
312 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)\r
313 +thread:XXX   2001-01-05 [2/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)\r
314 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)"\r
315 +\r
316 +test_begin_subtest "Search, exclude=false: tag in query (messages)"\r
317 +output=$(notmuch search --exclude=false --output=messages tag:test and tag:deleted | notmuch_search_sanitize)\r
318 +test_expect_equal "$output" "${matching_message_ids[0]}\r
319 +${matching_message_ids[1]}\r
320 +${matching_message_ids[2]}\r
321 +${matching_message_ids[3]}"\r
322 +\r
323 +test_begin_subtest "Search, exclude=flag: tag in query (thread summary)"\r
324 +output=$(notmuch search --exclude=flag tag:test and tag:deleted | notmuch_search_sanitize)\r
325 +test_expect_equal "$output" "thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)\r
326 +thread:XXX   2001-01-05 [2/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)\r
327 +thread:XXX   2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)"\r
328 +\r
329 +test_begin_subtest "Search, exclude=flag: tag in query (messages)"\r
330 +output=$(notmuch search --exclude=flag --output=messages tag:test and tag:deleted | notmuch_search_sanitize)\r
331 +test_expect_equal "$output" "${matching_message_ids[0]}\r
332 +${matching_message_ids[1]}\r
333 +${matching_message_ids[2]}\r
334 +${matching_message_ids[3]}"\r
335 +\r
336 +\r
337 +#########################################################\r
338 +# Notmuch count tests\r
339 +\r
340 +test_begin_subtest "Count, default exclusion (messages)"\r
341 +output=$(notmuch count tag:test)\r
342 +test_expect_equal "$output" "2"\r
343 +\r
344 +test_begin_subtest "Count, default exclusion (threads)"\r
345 +output=$(notmuch count --output=threads tag:test)\r
346 +test_expect_equal "$output" "2"\r
347 +\r
348 +test_begin_subtest "Count, exclude=true (messages)"\r
349 +output=$(notmuch count --exclude=true tag:test)\r
350 +test_expect_equal "$output" "2"\r
351 +\r
352 +test_begin_subtest "Count, exclude=true (threads)"\r
353 +output=$(notmuch count --output=threads --exclude=true tag:test)\r
354 +test_expect_equal "$output" "2"\r
355 +\r
356 +test_begin_subtest "Count, exclude=false (messages)"\r
357 +output=$(notmuch count --exclude=false tag:test)\r
358 +test_expect_equal "$output" "6"\r
359 +\r
360 +test_begin_subtest "Count, exclude=false (threads)"\r
361 +output=$(notmuch count --output=threads --exclude=false tag:test)\r
362 +test_expect_equal "$output" "5"\r
363 +\r
364 +test_begin_subtest "Count, default exclusion: tag in query (messages)"\r
365 +output=$(notmuch count tag:test and tag:deleted)\r
366 +test_expect_equal "$output" "4"\r
367 +\r
368 +test_begin_subtest "Count, default exclusion: tag in query (threads)"\r
369 +output=$(notmuch count --output=threads tag:test and tag:deleted)\r
370 +test_expect_equal "$output" "3"\r
371 +\r
372 +test_begin_subtest "Count, exclude=true: tag in query (messages)"\r
373 +output=$(notmuch count --exclude=true tag:test and tag:deleted)\r
374 +test_expect_equal "$output" "4"\r
375 +\r
376 +test_begin_subtest "Count, exclude=true: tag in query (threads)"\r
377 +output=$(notmuch count --output=threads --exclude=true tag:test and tag:deleted)\r
378 +test_expect_equal "$output" "3"\r
379 +\r
380 +test_begin_subtest "Count, exclude=false: tag in query (messages)"\r
381 +output=$(notmuch count --exclude=false tag:test and tag:deleted)\r
382 +test_expect_equal "$output" "4"\r
383 +\r
384 +test_begin_subtest "Count, exclude=false: tag in query (threads)"\r
385 +output=$(notmuch count --output=threads --exclude=false tag:test and tag:deleted)\r
386 +test_expect_equal "$output" "3"\r
387 +\r
388 +#############################################################\r
389 +# Show tests\r
390 +\r
391 +test_begin_subtest "Show, default exclusion"\r
392 +output=$(notmuch show tag:test | notmuch_show_sanitize_all | egrep "Subject:|message{")\r
393 +test_expect_equal "$output" "\f\r
394 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
395 +Subject: Some messages excluded: single non-excluded match: reply 4\r
396 +\f\r
397 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
398 +Subject: No messages excluded: single match: reply 3"\r
399 +\r
400 +test_begin_subtest "Show, default exclusion (entire-thread)"\r
401 +output=$(notmuch show --entire-thread tag:test | notmuch_show_sanitize_all | egrep "Subject:|message{")\r
402 +test_expect_equal "$output" "\f\r
403 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
404 +Subject: Some messages excluded: single non-excluded match: top message\r
405 +\f\r
406 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
407 +Subject: Some messages excluded: single non-excluded match: reply 1\r
408 +\f\r
409 message{ id:XXXXX depth:2 match:0 excluded:1 filename:XXXXX\r
410 +Subject: Some messages excluded: single non-excluded match: reply 2\r
411 +\f\r
412 message{ id:XXXXX depth:3 match:0 excluded:0 filename:XXXXX\r
413 +Subject: Some messages excluded: single non-excluded match: reply 3\r
414 +\f\r
415 message{ id:XXXXX depth:4 match:1 excluded:0 filename:XXXXX\r
416 +Subject: Some messages excluded: single non-excluded match: reply 4\r
417 +\f\r
418 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
419 +Subject: Some messages excluded: single non-excluded match: reply 5\r
420 +\f\r
421 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
422 +Subject: No messages excluded: single match: top message\r
423 +\f\r
424 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
425 +Subject: No messages excluded: single match: reply 1\r
426 +\f\r
427 message{ id:XXXXX depth:2 match:0 excluded:0 filename:XXXXX\r
428 +Subject: No messages excluded: single match: reply 2\r
429 +\f\r
430 message{ id:XXXXX depth:3 match:1 excluded:0 filename:XXXXX\r
431 +Subject: No messages excluded: single match: reply 3\r
432 +\f\r
433 message{ id:XXXXX depth:4 match:0 excluded:0 filename:XXXXX\r
434 +Subject: No messages excluded: single match: reply 4\r
435 +\f\r
436 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
437 +Subject: No messages excluded: single match: reply 5"\r
438 +\r
439 +test_begin_subtest "Show, exclude=true"\r
440 +output=$(notmuch show --exclude=true tag:test | notmuch_show_sanitize_all | egrep "Subject:|message{")\r
441 +test_expect_equal "$output" "\f\r
442 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
443 +Subject: Some messages excluded: single non-excluded match: reply 4\r
444 +\f\r
445 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
446 +Subject: No messages excluded: single match: reply 3"\r
447 +\r
448 +test_begin_subtest "Show, exclude=true (entire-thread)"\r
449 +output=$(notmuch show --entire-thread --exclude=true tag:test | notmuch_show_sanitize_all | egrep "Subject:|message{")\r
450 +test_expect_equal "$output" "\f\r
451 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
452 +Subject: Some messages excluded: single non-excluded match: top message\r
453 +\f\r
454 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
455 +Subject: Some messages excluded: single non-excluded match: reply 1\r
456 +\f\r
457 message{ id:XXXXX depth:2 match:0 excluded:1 filename:XXXXX\r
458 +Subject: Some messages excluded: single non-excluded match: reply 2\r
459 +\f\r
460 message{ id:XXXXX depth:3 match:0 excluded:0 filename:XXXXX\r
461 +Subject: Some messages excluded: single non-excluded match: reply 3\r
462 +\f\r
463 message{ id:XXXXX depth:4 match:1 excluded:0 filename:XXXXX\r
464 +Subject: Some messages excluded: single non-excluded match: reply 4\r
465 +\f\r
466 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
467 +Subject: Some messages excluded: single non-excluded match: reply 5\r
468 +\f\r
469 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
470 +Subject: No messages excluded: single match: top message\r
471 +\f\r
472 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
473 +Subject: No messages excluded: single match: reply 1\r
474 +\f\r
475 message{ id:XXXXX depth:2 match:0 excluded:0 filename:XXXXX\r
476 +Subject: No messages excluded: single match: reply 2\r
477 +\f\r
478 message{ id:XXXXX depth:3 match:1 excluded:0 filename:XXXXX\r
479 +Subject: No messages excluded: single match: reply 3\r
480 +\f\r
481 message{ id:XXXXX depth:4 match:0 excluded:0 filename:XXXXX\r
482 +Subject: No messages excluded: single match: reply 4\r
483 +\f\r
484 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
485 +Subject: No messages excluded: single match: reply 5"\r
486 +\r
487 +test_begin_subtest "Show, exclude=false"\r
488 +output=$(notmuch show --exclude=false tag:test | notmuch_show_sanitize_all  | egrep "Subject:|message{")\r
489 +test_expect_equal "$output" "\f\r
490 message{ id:XXXXX depth:0 match:1 excluded:1 filename:XXXXX\r
491 +Subject: All messages excluded: single match: reply 2\r
492 +\f\r
493 message{ id:XXXXX depth:0 match:1 excluded:1 filename:XXXXX\r
494 +Subject: All messages excluded: double match: reply 2\r
495 +\f\r
496 message{ id:XXXXX depth:1 match:1 excluded:1 filename:XXXXX\r
497 +Subject: All messages excluded: double match: reply 4\r
498 +\f\r
499 message{ id:XXXXX depth:0 match:1 excluded:1 filename:XXXXX\r
500 +Subject: Some messages excluded: single excluded match: reply 3\r
501 +\f\r
502 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
503 +Subject: Some messages excluded: single non-excluded match: reply 4\r
504 +\f\r
505 message{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX\r
506 +Subject: No messages excluded: single match: reply 3"\r
507 +\r
508 +test_begin_subtest "Show, exclude=false (entire-thread)"\r
509 +output=$(notmuch show --entire-thread --exclude=false tag:test | notmuch_show_sanitize_all | egrep "Subject:|message{")\r
510 +test_expect_equal "$output" "\f\r
511 message{ id:XXXXX depth:0 match:0 excluded:1 filename:XXXXX\r
512 +Subject: All messages excluded: single match: top message\r
513 +\f\r
514 message{ id:XXXXX depth:1 match:0 excluded:1 filename:XXXXX\r
515 +Subject: All messages excluded: single match: reply 1\r
516 +\f\r
517 message{ id:XXXXX depth:2 match:1 excluded:1 filename:XXXXX\r
518 +Subject: All messages excluded: single match: reply 2\r
519 +\f\r
520 message{ id:XXXXX depth:3 match:0 excluded:1 filename:XXXXX\r
521 +Subject: All messages excluded: single match: reply 3\r
522 +\f\r
523 message{ id:XXXXX depth:4 match:0 excluded:1 filename:XXXXX\r
524 +Subject: All messages excluded: single match: reply 4\r
525 +\f\r
526 message{ id:XXXXX depth:5 match:0 excluded:1 filename:XXXXX\r
527 +Subject: All messages excluded: single match: reply 5\r
528 +\f\r
529 message{ id:XXXXX depth:0 match:0 excluded:1 filename:XXXXX\r
530 +Subject: All messages excluded: double match: top message\r
531 +\f\r
532 message{ id:XXXXX depth:1 match:0 excluded:1 filename:XXXXX\r
533 +Subject: All messages excluded: double match: reply 1\r
534 +\f\r
535 message{ id:XXXXX depth:2 match:1 excluded:1 filename:XXXXX\r
536 +Subject: All messages excluded: double match: reply 2\r
537 +\f\r
538 message{ id:XXXXX depth:3 match:0 excluded:1 filename:XXXXX\r
539 +Subject: All messages excluded: double match: reply 3\r
540 +\f\r
541 message{ id:XXXXX depth:4 match:1 excluded:1 filename:XXXXX\r
542 +Subject: All messages excluded: double match: reply 4\r
543 +\f\r
544 message{ id:XXXXX depth:5 match:0 excluded:1 filename:XXXXX\r
545 +Subject: All messages excluded: double match: reply 5\r
546 +\f\r
547 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
548 +Subject: Some messages excluded: single excluded match: top message\r
549 +\f\r
550 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
551 +Subject: Some messages excluded: single excluded match: reply 1\r
552 +\f\r
553 message{ id:XXXXX depth:2 match:0 excluded:0 filename:XXXXX\r
554 +Subject: Some messages excluded: single excluded match: reply 2\r
555 +\f\r
556 message{ id:XXXXX depth:3 match:1 excluded:1 filename:XXXXX\r
557 +Subject: Some messages excluded: single excluded match: reply 3\r
558 +\f\r
559 message{ id:XXXXX depth:4 match:0 excluded:0 filename:XXXXX\r
560 +Subject: Some messages excluded: single excluded match: reply 4\r
561 +\f\r
562 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
563 +Subject: Some messages excluded: single excluded match: reply 5\r
564 +\f\r
565 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
566 +Subject: Some messages excluded: single non-excluded match: top message\r
567 +\f\r
568 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
569 +Subject: Some messages excluded: single non-excluded match: reply 1\r
570 +\f\r
571 message{ id:XXXXX depth:2 match:0 excluded:1 filename:XXXXX\r
572 +Subject: Some messages excluded: single non-excluded match: reply 2\r
573 +\f\r
574 message{ id:XXXXX depth:3 match:0 excluded:0 filename:XXXXX\r
575 +Subject: Some messages excluded: single non-excluded match: reply 3\r
576 +\f\r
577 message{ id:XXXXX depth:4 match:1 excluded:0 filename:XXXXX\r
578 +Subject: Some messages excluded: single non-excluded match: reply 4\r
579 +\f\r
580 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
581 +Subject: Some messages excluded: single non-excluded match: reply 5\r
582 +\f\r
583 message{ id:XXXXX depth:0 match:0 excluded:0 filename:XXXXX\r
584 +Subject: No messages excluded: single match: top message\r
585 +\f\r
586 message{ id:XXXXX depth:1 match:0 excluded:0 filename:XXXXX\r
587 +Subject: No messages excluded: single match: reply 1\r
588 +\f\r
589 message{ id:XXXXX depth:2 match:0 excluded:0 filename:XXXXX\r
590 +Subject: No messages excluded: single match: reply 2\r
591 +\f\r
592 message{ id:XXXXX depth:3 match:1 excluded:0 filename:XXXXX\r
593 +Subject: No messages excluded: single match: reply 3\r
594 +\f\r
595 message{ id:XXXXX depth:4 match:0 excluded:0 filename:XXXXX\r
596 +Subject: No messages excluded: single match: reply 4\r
597 +\f\r
598 message{ id:XXXXX depth:5 match:0 excluded:0 filename:XXXXX\r
599 +Subject: No messages excluded: single match: reply 5"\r
600 +\r
601 +\r
602 +test_done\r
603 diff --git a/test/notmuch-test b/test/notmuch-test\r
604 index f03b594..801df73 100755\r
605 --- a/test/notmuch-test\r
606 +++ b/test/notmuch-test\r
607 @@ -27,6 +27,7 @@ TESTS="\r
608    search-position-overlap-bug\r
609    search-insufficient-from-quoting\r
610    search-limiting\r
611 +  excludes\r
612    tagging\r
613    json\r
614    multipart\r
615 diff --git a/test/search b/test/search\r
616 index 17af6a2..a7a0b18 100755\r
617 --- a/test/search\r
618 +++ b/test/search\r
619 @@ -129,52 +129,4 @@ add_message '[subject]="utf8-message-body-subject"' '[date]="Sat, 01 Jan 2000 12\r
620  output=$(notmuch search "bödý" | notmuch_search_sanitize)\r
621  test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; utf8-message-body-subject (inbox unread)"\r
622  \r
623 -test_begin_subtest "Exclude \"deleted\" messages from search"\r
624 -notmuch config set search.exclude_tags deleted\r
625 -generate_message '[subject]="Not deleted"'\r
626 -not_deleted_id=$gen_msg_id\r
627 -generate_message '[subject]="Deleted"'\r
628 -notmuch new > /dev/null\r
629 -notmuch tag +deleted id:$gen_msg_id\r
630 -deleted_id=$gen_msg_id\r
631 -output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
632 -test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
633 -thread:XXX   2001-01-05 [0/1] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
634 -\r
635 -test_begin_subtest "Exclude \"deleted\" messages from message search"\r
636 -output=$(notmuch search --output=messages subject:deleted | notmuch_search_sanitize)\r
637 -test_expect_equal "$output" "id:$not_deleted_id"\r
638 -\r
639 -test_begin_subtest "Exclude \"deleted\" messages from message search (no-exclude)"\r
640 -output=$(notmuch search --no-exclude --output=messages subject:deleted | notmuch_search_sanitize)\r
641 -test_expect_equal "$output" "id:$not_deleted_id\r
642 -id:$deleted_id"\r
643 -\r
644 -test_begin_subtest "Exclude \"deleted\" messages from message search (non-existent exclude-tag)"\r
645 -notmuch config set search.exclude_tags deleted non_existent_tag\r
646 -output=$(notmuch search --output=messages subject:deleted | notmuch_search_sanitize)\r
647 -test_expect_equal "$output" "id:$not_deleted_id"\r
648 -notmuch config set search.exclude_tags deleted\r
649 -\r
650 -test_begin_subtest "Exclude \"deleted\" messages from search, overridden"\r
651 -output=$(notmuch search subject:deleted and tag:deleted | notmuch_search_sanitize)\r
652 -test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
653 -\r
654 -test_begin_subtest "Exclude \"deleted\" messages from threads"\r
655 -add_message '[subject]="Not deleted reply"' '[in-reply-to]="<$gen_msg_id>"'\r
656 -output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
657 -test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
658 -thread:XXX   2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inbox unread)"\r
659 -\r
660 -test_begin_subtest "Don't exclude \"deleted\" messages when --no-exclude specified"\r
661 -output=$(notmuch search --no-exclude subject:deleted | notmuch_search_sanitize)\r
662 -test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
663 -thread:XXX   2001-01-05 [2/2] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
664 -\r
665 -test_begin_subtest "Don't exclude \"deleted\" messages from search if not configured"\r
666 -notmuch config set search.exclude_tags\r
667 -output=$(notmuch search subject:deleted | notmuch_search_sanitize)\r
668 -test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)\r
669 -thread:XXX   2001-01-05 [2/2] Notmuch Test Suite; Deleted (deleted inbox unread)"\r
670 -\r
671  test_done\r
672 -- \r
673 1.7.9.1\r
674 \r