]> git.notmuchmail.org Git - notmuch/blob - test/multipart
Merge tag 'debian/0.12-1'
[notmuch] / test / multipart
1 #!/usr/bin/env bash
2 test_description="output of multipart message"
3 . ./test-lib.sh
4
5 cat <<EOF > embedded_message
6 From: Carl Worth <cworth@cworth.org>
7 To: cworth@cworth.org
8 Subject: html message
9 Date: Fri, 05 Jan 2001 15:42:57 +0000
10 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
11 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
12 MIME-Version: 1.0
13 Content-Type: multipart/alternative; boundary="==-=-=="
14
15 --==-=-==
16 Content-Type: text/html
17
18 <p>This is an embedded message, with a multipart/alternative part.</p>
19
20 --==-=-==
21 Content-Type: text/plain
22
23 This is an embedded message, with a multipart/alternative part.
24
25 --==-=-==--
26 EOF
27
28 cat <<EOF > ${MAIL_DIR}/multipart
29 From: Carl Worth <cworth@cworth.org>
30 To: cworth@cworth.org
31 Subject: Multipart message
32 Date: Fri, 05 Jan 2001 15:43:57 +0000
33 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
34 Message-ID: <87liy5ap00.fsf@yoom.home.cworth.org>
35 MIME-Version: 1.0
36 Content-Type: multipart/signed; boundary="==-=-=";
37         micalg=pgp-sha1; protocol="application/pgp-signature"
38
39 --==-=-=
40 Content-Type: multipart/mixed; boundary="=-=-="
41
42 --=-=-=
43 Content-Type: message/rfc822
44 Content-Disposition: inline
45
46 EOF
47 cat embedded_message >> ${MAIL_DIR}/multipart
48 cat <<EOF >> ${MAIL_DIR}/multipart
49
50 --=-=-=
51 Content-Disposition: attachment; filename=attachment
52
53 This is a text attachment.
54
55 --=-=-=
56
57 And this message is signed.
58
59 -Carl
60
61 --=-=-=--
62
63 --==-=-=
64 Content-Type: application/pgp-signature
65
66 -----BEGIN PGP SIGNATURE-----
67 Version: GnuPG v1.4.11 (GNU/Linux)
68
69 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
70 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
71 =zkga
72 -----END PGP SIGNATURE-----
73 --==-=-=--
74 EOF
75
76 cat <<EOF > ${MAIL_DIR}/base64-part-with-crlf
77 From: Carl Worth <cworth@cworth.org>
78 To: cworth@cworth.org
79 Subject: Test message with a BASE64 encoded binary containing CRLF pair
80 Date: Fri, 05 Jan 2001 15:43:57 +0000
81 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
82 Message-ID: <base64-part-with-crlf>
83 MIME-Version: 1.0
84 Content-Type: multipart/mixed; boundary="==-=-=";
85
86 --==-=-=
87
88 The attached BASE64-encoded part expands to a binary containing a CRLF
89 pair (that is one bye of 0x0D followed by one byte of 0x0A). This is
90 designed to ensure that notmuch is not corrupting the output of this
91 part by converting the CRLF pair to an LF only (as would be appropriate
92 for display of a text part on a Linux system, for example).
93
94 The part should be a 3-byte file with the following sequence of 3
95 hexadecimal bytes:
96
97         EF 0D 0A
98
99 --==-=-=
100 Content-Type: application/octet-stream
101 Content-Disposition: attachment; filename=crlf.bin
102 Content-Transfer-Encoding: base64
103
104 7w0K
105 --==-=-=--
106 EOF
107 notmuch new > /dev/null
108
109 test_begin_subtest "--format=text --part=0, full message"
110 notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
111 cat <<EOF >EXPECTED
112 \fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 excluded:0 filename:${MAIL_DIR}/multipart
113 \fheader{
114 Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox signed unread)
115 Subject: Multipart message
116 From: Carl Worth <cworth@cworth.org>
117 To: cworth@cworth.org
118 Date: Fri, 05 Jan 2001 15:43:57 +0000
119 \fheader}
120 \fbody{
121 \fpart{ ID: 1, Content-type: multipart/signed
122 \fpart{ ID: 2, Content-type: multipart/mixed
123 \fpart{ ID: 3, Content-type: message/rfc822
124 \fheader{
125 Subject: html message
126 From: Carl Worth <cworth@cworth.org>
127 To: cworth@cworth.org
128 Date: Fri, 05 Jan 2001 15:42:57 +0000
129 \fheader}
130 \fbody{
131 \fpart{ ID: 4, Content-type: multipart/alternative
132 \fpart{ ID: 5, Content-type: text/html
133 Non-text part: text/html
134 \fpart}
135 \fpart{ ID: 6, Content-type: text/plain
136 This is an embedded message, with a multipart/alternative part.
137 \fpart}
138 \fpart}
139 \fbody}
140 \fpart}
141 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
142 This is a text attachment.
143 \fattachment}
144 \fpart{ ID: 8, Content-type: text/plain
145 And this message is signed.
146
147 -Carl
148 \fpart}
149 \fpart}
150 \fpart{ ID: 9, Content-type: application/pgp-signature
151 Non-text part: application/pgp-signature
152 \fpart}
153 \fpart}
154 \fbody}
155 \fmessage}
156 EOF
157 test_expect_equal_file OUTPUT EXPECTED
158
159 test_begin_subtest "--format=text --part=1, message body"
160 notmuch show --format=text --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
161 cat <<EOF >EXPECTED
162 \fpart{ ID: 1, Content-type: multipart/signed
163 \fpart{ ID: 2, Content-type: multipart/mixed
164 \fpart{ ID: 3, Content-type: message/rfc822
165 \fheader{
166 Subject: html message
167 From: Carl Worth <cworth@cworth.org>
168 To: cworth@cworth.org
169 Date: Fri, 05 Jan 2001 15:42:57 +0000
170 \fheader}
171 \fbody{
172 \fpart{ ID: 4, Content-type: multipart/alternative
173 \fpart{ ID: 5, Content-type: text/html
174 Non-text part: text/html
175 \fpart}
176 \fpart{ ID: 6, Content-type: text/plain
177 This is an embedded message, with a multipart/alternative part.
178 \fpart}
179 \fpart}
180 \fbody}
181 \fpart}
182 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
183 This is a text attachment.
184 \fattachment}
185 \fpart{ ID: 8, Content-type: text/plain
186 And this message is signed.
187
188 -Carl
189 \fpart}
190 \fpart}
191 \fpart{ ID: 9, Content-type: application/pgp-signature
192 Non-text part: application/pgp-signature
193 \fpart}
194 \fpart}
195 EOF
196 test_expect_equal_file OUTPUT EXPECTED
197
198 test_begin_subtest "--format=text --part=2, multipart/mixed"
199 notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
200 cat <<EOF >EXPECTED
201 \fpart{ ID: 2, Content-type: multipart/mixed
202 \fpart{ ID: 3, Content-type: message/rfc822
203 \fheader{
204 Subject: html message
205 From: Carl Worth <cworth@cworth.org>
206 To: cworth@cworth.org
207 Date: Fri, 05 Jan 2001 15:42:57 +0000
208 \fheader}
209 \fbody{
210 \fpart{ ID: 4, Content-type: multipart/alternative
211 \fpart{ ID: 5, Content-type: text/html
212 Non-text part: text/html
213 \fpart}
214 \fpart{ ID: 6, Content-type: text/plain
215 This is an embedded message, with a multipart/alternative part.
216 \fpart}
217 \fpart}
218 \fbody}
219 \fpart}
220 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
221 This is a text attachment.
222 \fattachment}
223 \fpart{ ID: 8, Content-type: text/plain
224 And this message is signed.
225
226 -Carl
227 \fpart}
228 \fpart}
229 EOF
230 test_expect_equal_file OUTPUT EXPECTED
231
232 test_begin_subtest "--format=text --part=3, rfc822 part"
233 notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
234 cat <<EOF >EXPECTED
235 \fpart{ ID: 3, Content-type: message/rfc822
236 \fheader{
237 Subject: html message
238 From: Carl Worth <cworth@cworth.org>
239 To: cworth@cworth.org
240 Date: Fri, 05 Jan 2001 15:42:57 +0000
241 \fheader}
242 \fbody{
243 \fpart{ ID: 4, Content-type: multipart/alternative
244 \fpart{ ID: 5, Content-type: text/html
245 Non-text part: text/html
246 \fpart}
247 \fpart{ ID: 6, Content-type: text/plain
248 This is an embedded message, with a multipart/alternative part.
249 \fpart}
250 \fpart}
251 \fbody}
252 \fpart}
253 EOF
254 test_expect_equal_file OUTPUT EXPECTED
255
256 test_begin_subtest "--format=text --part=4, rfc822's multipart"
257 notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
258 cat <<EOF >EXPECTED
259 \fpart{ ID: 4, Content-type: multipart/alternative
260 \fpart{ ID: 5, Content-type: text/html
261 Non-text part: text/html
262 \fpart}
263 \fpart{ ID: 6, Content-type: text/plain
264 This is an embedded message, with a multipart/alternative part.
265 \fpart}
266 \fpart}
267 EOF
268 test_expect_equal_file OUTPUT EXPECTED
269
270 test_begin_subtest "--format=text --part=5, rfc822's html part"
271 notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
272 cat <<EOF >EXPECTED
273 \fpart{ ID: 5, Content-type: text/html
274 Non-text part: text/html
275 \fpart}
276 EOF
277 test_expect_equal_file OUTPUT EXPECTED
278
279 test_begin_subtest "--format=text --part=6, rfc822's text part"
280 notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
281 cat <<EOF >EXPECTED
282 \fpart{ ID: 6, Content-type: text/plain
283 This is an embedded message, with a multipart/alternative part.
284 \fpart}
285 EOF
286 test_expect_equal_file OUTPUT EXPECTED
287
288 test_begin_subtest "--format=text --part=7, inline attachement"
289 notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
290 cat <<EOF >EXPECTED
291 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
292 This is a text attachment.
293 \fattachment}
294 EOF
295 test_expect_equal_file OUTPUT EXPECTED
296
297 test_begin_subtest "--format=text --part=8, plain text part"
298 notmuch show --format=text --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
299 cat <<EOF >EXPECTED
300 \fpart{ ID: 8, Content-type: text/plain
301 And this message is signed.
302
303 -Carl
304 \fpart}
305 EOF
306 test_expect_equal_file OUTPUT EXPECTED
307
308 test_begin_subtest "--format=text --part=9, pgp signature (unverified)"
309 notmuch show --format=text --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
310 cat <<EOF >EXPECTED
311 \fpart{ ID: 9, Content-type: application/pgp-signature
312 Non-text part: application/pgp-signature
313 \fpart}
314 EOF
315 test_expect_equal_file OUTPUT EXPECTED
316
317 test_expect_success \
318     "--format=text --part=8, no part, expect error" \
319     "notmuch show --format=text --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
320
321 test_begin_subtest "--format=json --part=0, full message"
322 notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
323 echo >>OUTPUT # expect *no* newline at end of output
324 cat <<EOF >EXPECTED
325
326 {"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "excluded": false, "filename": "${MAIL_DIR}/multipart", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","signed","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Date": "Fri, 05 Jan 2001 15:43:57 +0000"}, "body": [
327 {"id": 1, "content-type": "multipart/signed", "content": [
328 {"id": 2, "content-type": "multipart/mixed", "content": [
329 {"id": 3, "content-type": "message/rfc822", "content": [{"headers": {"Subject": "html message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Date": "Fri, 05 Jan 2001 15:42:57 +0000"}, "body": [
330 {"id": 4, "content-type": "multipart/alternative", "content": [
331 {"id": 5, "content-type": "text/html"}, 
332 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, 
333 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, 
334 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, 
335 {"id": 9, "content-type": "application/pgp-signature"}]}]}
336 EOF
337 test_expect_equal_file OUTPUT EXPECTED
338
339 test_begin_subtest "--format=json --part=1, message body"
340 notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
341 echo >>OUTPUT # expect *no* newline at end of output
342 cat <<EOF >EXPECTED
343
344 {"id": 1, "content-type": "multipart/signed", "content": [
345 {"id": 2, "content-type": "multipart/mixed", "content": [
346 {"id": 3, "content-type": "message/rfc822", "content": [{"headers": {"Subject": "html message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Date": "Fri, 05 Jan 2001 15:42:57 +0000"}, "body": [
347 {"id": 4, "content-type": "multipart/alternative", "content": [
348 {"id": 5, "content-type": "text/html"}, 
349 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, 
350 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, 
351 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, 
352 {"id": 9, "content-type": "application/pgp-signature"}]}
353 EOF
354 test_expect_equal_file OUTPUT EXPECTED
355
356 test_begin_subtest "--format=json --part=2, multipart/mixed"
357 notmuch show --format=json --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
358 echo >>OUTPUT # expect *no* newline at end of output
359 cat <<EOF >EXPECTED
360
361 {"id": 2, "content-type": "multipart/mixed", "content": [
362 {"id": 3, "content-type": "message/rfc822", "content": [{"headers": {"Subject": "html message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Date": "Fri, 05 Jan 2001 15:42:57 +0000"}, "body": [
363 {"id": 4, "content-type": "multipart/alternative", "content": [
364 {"id": 5, "content-type": "text/html"}, 
365 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}, 
366 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, 
367 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}
368 EOF
369 test_expect_equal_file OUTPUT EXPECTED
370
371 test_begin_subtest "--format=json --part=3, rfc822 part"
372 notmuch show --format=json --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
373 echo >>OUTPUT # expect *no* newline at end of output
374 cat <<EOF >EXPECTED
375
376 {"id": 3, "content-type": "message/rfc822", "content": [{"headers": {"Subject": "html message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Date": "Fri, 05 Jan 2001 15:42:57 +0000"}, "body": [
377 {"id": 4, "content-type": "multipart/alternative", "content": [
378 {"id": 5, "content-type": "text/html"}, 
379 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}
380 EOF
381 test_expect_equal_file OUTPUT EXPECTED
382
383 test_begin_subtest "--format=json --part=4, rfc822's multipart/alternative"
384 notmuch show --format=json --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
385 echo >>OUTPUT # expect *no* newline at end of output
386 cat <<EOF >EXPECTED
387
388 {"id": 4, "content-type": "multipart/alternative", "content": [
389 {"id": 5, "content-type": "text/html"}, 
390 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}
391 EOF
392 test_expect_equal_file OUTPUT EXPECTED
393
394 test_begin_subtest "--format=json --part=5, rfc822's html part"
395 notmuch show --format=json --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
396 echo >>OUTPUT # expect *no* newline at end of output
397 cat <<EOF >EXPECTED
398
399 {"id": 5, "content-type": "text/html"}
400 EOF
401 test_expect_equal_file OUTPUT EXPECTED
402
403 test_begin_subtest "--format=json --part=6, rfc822's text part"
404 notmuch show --format=json --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
405 echo >>OUTPUT # expect *no* newline at end of output
406 cat <<EOF >EXPECTED
407
408 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}
409 EOF
410 test_expect_equal_file OUTPUT EXPECTED
411
412 test_begin_subtest "--format=json --part=7, inline attachment"
413 notmuch show --format=json --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
414 echo >>OUTPUT # expect *no* newline at end of output
415 cat <<EOF >EXPECTED
416
417 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}
418 EOF
419 test_expect_equal_file OUTPUT EXPECTED
420
421 test_begin_subtest "--format=json --part=8, plain text part"
422 notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
423 echo >>OUTPUT # expect *no* newline at end of output
424 cat <<EOF >EXPECTED
425
426 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}
427 EOF
428 test_expect_equal_file OUTPUT EXPECTED
429
430 test_begin_subtest "--format=json --part=9, pgp signature (unverified)"
431 notmuch show --format=json --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' | sed 's|{"id":|\n{"id":|g' >OUTPUT
432 echo >>OUTPUT # expect *no* newline at end of output
433 cat <<EOF >EXPECTED
434
435 {"id": 9, "content-type": "application/pgp-signature"}
436 EOF
437 test_expect_equal_file OUTPUT EXPECTED
438
439 test_expect_success \
440     "--format=json --part=10, no part, expect error" \
441     "notmuch show --format=json --part=10 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
442
443 test_begin_subtest "--format=raw"
444 notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
445 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
446
447 test_begin_subtest "--format=raw --part=0, full message"
448 notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
449 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
450
451 test_begin_subtest "--format=raw --part=1, message body"
452 notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
453 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
454
455 test_begin_subtest "--format=raw --part=2, multipart/mixed"
456 notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
457 cat <<EOF >EXPECTED
458 Content-Type: multipart/mixed; boundary="=-=-="
459
460 --=-=-=
461 Content-Type: message/rfc822
462 Content-Disposition: inline
463
464 From: Carl Worth <cworth@cworth.org>
465 To: cworth@cworth.org
466 Subject: html message
467 Date: Fri, 05 Jan 2001 15:42:57 +0000
468 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
469 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
470 MIME-Version: 1.0
471 Content-Type: multipart/alternative; boundary="==-=-=="
472
473 --==-=-==
474 Content-Type: text/html
475
476 <p>This is an embedded message, with a multipart/alternative part.</p>
477
478 --==-=-==
479 Content-Type: text/plain
480
481 This is an embedded message, with a multipart/alternative part.
482
483 --==-=-==--
484
485 --=-=-=
486 Content-Disposition: attachment; filename=attachment
487
488 This is a text attachment.
489
490 --=-=-=
491
492 And this message is signed.
493
494 -Carl
495
496 --=-=-=--
497 EOF
498 test_expect_equal_file OUTPUT EXPECTED
499
500 test_begin_subtest "--format=raw --part=3, rfc822 part"
501 notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
502 test_expect_equal_file OUTPUT embedded_message
503
504 test_begin_subtest "--format=raw --part=4, rfc822's multipart"
505 notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
506 cat <<EOF >EXPECTED
507 From: Carl Worth <cworth@cworth.org>
508 To: cworth@cworth.org
509 Subject: html message
510 Date: Fri, 05 Jan 2001 15:42:57 +0000
511 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
512 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
513 MIME-Version: 1.0
514 Content-Type: multipart/alternative; boundary="==-=-=="
515
516 --==-=-==
517 Content-Type: text/html
518
519 <p>This is an embedded message, with a multipart/alternative part.</p>
520
521 --==-=-==
522 Content-Type: text/plain
523
524 This is an embedded message, with a multipart/alternative part.
525
526 --==-=-==--
527 EOF
528 test_expect_equal_file OUTPUT EXPECTED
529
530 test_begin_subtest "--format=raw --part=5, rfc822's html part"
531 notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
532 cat <<EOF >EXPECTED
533 <p>This is an embedded message, with a multipart/alternative part.</p>
534 EOF
535 test_expect_equal_file OUTPUT EXPECTED
536
537 test_begin_subtest "--format=raw --part=6, rfc822's text part"
538 notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
539 cat <<EOF >EXPECTED
540 This is an embedded message, with a multipart/alternative part.
541 EOF
542 test_expect_equal_file OUTPUT EXPECTED
543
544 test_begin_subtest "--format=raw --part=7, inline attachment"
545 notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
546 cat <<EOF >EXPECTED
547 This is a text attachment.
548 EOF
549 test_expect_equal_file OUTPUT EXPECTED
550
551 test_begin_subtest "--format=raw --part=8, plain text part"
552 notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
553 cat <<EOF >EXPECTED
554 And this message is signed.
555
556 -Carl
557 EOF
558 test_expect_equal_file OUTPUT EXPECTED
559
560 test_begin_subtest "--format=raw --part=9, pgp signature (unverified)"
561 notmuch show --format=raw --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
562 # output should *not* include newline
563 echo >>OUTPUT
564 cat <<EOF >EXPECTED
565 -----BEGIN PGP SIGNATURE-----
566 Version: GnuPG v1.4.11 (GNU/Linux)
567
568 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
569 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
570 =zkga
571 -----END PGP SIGNATURE-----
572 EOF
573 test_expect_equal_file OUTPUT EXPECTED
574
575 test_expect_success \
576     "--format=raw --part=10, no part, expect error" \
577     "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
578
579 test_begin_subtest "--format=mbox"
580 notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
581 printf "From cworth@cworth.org Fri Jan  5 15:43:57 2001\n" >EXPECTED
582 cat "${MAIL_DIR}"/multipart >>EXPECTED
583 # mbox output is expected to include a blank line
584 echo >>EXPECTED
585 test_expect_equal_file OUTPUT EXPECTED
586
587 test_expect_success \
588     "--format=mbox --part=1, incompatible, expect error" \
589     "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
590
591 test_begin_subtest "'notmuch reply' to a multipart message"
592 notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
593 cat <<EOF >EXPECTED
594 From: Notmuch Test Suite <test_suite@notmuchmail.org>
595 Subject: Re: Multipart message
596 To: Carl Worth <cworth@cworth.org>, cworth@cworth.org
597 In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org>
598 References: <87liy5ap00.fsf@yoom.home.cworth.org>
599
600 On Fri, 05 Jan 2001 15:43:57 +0000, Carl Worth <cworth@cworth.org> wrote:
601 > From: Carl Worth <cworth@cworth.org>
602 > To: cworth@cworth.org
603 > Subject: html message
604 > Date: Fri, 05 Jan 2001 15:42:57 +0000
605 >
606 Non-text part: text/html
607 > This is an embedded message, with a multipart/alternative part.
608 > This is a text attachment.
609 > And this message is signed.
610
611 > -Carl
612 EOF
613 test_expect_equal_file OUTPUT EXPECTED
614
615 test_begin_subtest "'notmuch reply' to a multipart message with json format"
616 notmuch reply --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org' | notmuch_json_show_sanitize >OUTPUT
617 cat <<EOF >EXPECTED
618 {"reply-headers": {"Subject": "Re: Multipart message",
619  "From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
620  "To": "Carl Worth <cworth@cworth.org>,
621  cworth@cworth.org",
622  "In-reply-to": "<87liy5ap00.fsf@yoom.home.cworth.org>",
623  "References": " <87liy5ap00.fsf@yoom.home.cworth.org>"},
624  "original": {"id": "XXXXX",
625  "match": false,
626  "excluded": false,
627  "filename": "YYYYY",
628  "timestamp": 978709437,
629  "date_relative": "2001-01-05",
630  "tags": ["attachment","inbox","signed","unread"],
631  "headers": {"Subject": "Multipart message",
632  "From": "Carl Worth <cworth@cworth.org>",
633  "To": "cworth@cworth.org",
634  "Date": "Fri,
635  05 Jan 2001 15:43:57 +0000"},
636  "body": [{"id": 1,
637  "content-type": "multipart/signed",
638  "content": [{"id": 2,
639  "content-type": "multipart/mixed",
640  "content": [{"id": 3,
641  "content-type": "message/rfc822",
642  "content": [{"headers": {"Subject": "html message",
643  "From": "Carl Worth <cworth@cworth.org>",
644  "To": "cworth@cworth.org",
645  "Date": "Fri,
646  05 Jan 2001 15:42:57 +0000"},
647  "body": [{"id": 4,
648  "content-type": "multipart/alternative",
649  "content": [{"id": 5,
650  "content-type": "text/html"},
651  {"id": 6,
652  "content-type": "text/plain",
653  "content": "This is an embedded message,
654  with a multipart/alternative part.\n"}]}]}]},
655  {"id": 7,
656  "content-type": "text/plain",
657  "filename": "YYYYY",
658  "content": "This is a text attachment.\n"},
659  {"id": 8,
660  "content-type": "text/plain",
661  "content": "And this message is signed.\n\n-Carl\n"}]},
662  {"id": 9,
663  "content-type": "application/pgp-signature"}]}]}}
664 EOF
665 test_expect_equal_file OUTPUT EXPECTED
666
667 test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair"
668 notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out
669 echo -n -e "\xEF\x0D\x0A" > crlf.expected
670 test_expect_equal_file crlf.out crlf.expected
671
672 test_done