]> git.notmuchmail.org Git - notmuch/blob - test/multipart
e73cd8b8c48b638a38d5ef2363631c5326a8f543
[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 # output should *not* include newline
454 echo >>OUTPUT
455 cat <<EOF >EXPECTED
456 Subject: html message
457 From: Carl Worth <cworth@cworth.org>
458 To: cworth@cworth.org
459 Date: Fri, 05 Jan 2001 15:42:57 +0000
460
461 <p>This is an embedded message, with a multipart/alternative part.</p>
462 This is an embedded message, with a multipart/alternative part.
463 This is a text attachment.
464 And this message is signed.
465
466 -Carl
467 -----BEGIN PGP SIGNATURE-----
468 Version: GnuPG v1.4.11 (GNU/Linux)
469
470 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
471 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
472 =zkga
473 -----END PGP SIGNATURE-----
474 EOF
475 test_expect_equal_file OUTPUT EXPECTED
476
477 test_begin_subtest "--format=raw --part=2, multipart/mixed"
478 notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
479 cat <<EOF >EXPECTED
480 Subject: html message
481 From: Carl Worth <cworth@cworth.org>
482 To: cworth@cworth.org
483 Date: Fri, 05 Jan 2001 15:42:57 +0000
484
485 <p>This is an embedded message, with a multipart/alternative part.</p>
486 This is an embedded message, with a multipart/alternative part.
487 This is a text attachment.
488 And this message is signed.
489
490 -Carl
491 EOF
492 test_expect_equal_file OUTPUT EXPECTED
493
494 test_begin_subtest "--format=raw --part=3, rfc822 part"
495 test_subtest_known_broken
496
497 notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
498 test_expect_equal_file OUTPUT embedded_message
499
500 test_begin_subtest "--format=raw --part=4, rfc822's multipart"
501 notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
502 cat <<EOF >EXPECTED
503 <p>This is an embedded message, with a multipart/alternative part.</p>
504 This is an embedded message, with a multipart/alternative part.
505 EOF
506 test_expect_equal_file OUTPUT EXPECTED
507
508 test_begin_subtest "--format=raw --part=5, rfc822's html part"
509 notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
510 cat <<EOF >EXPECTED
511 <p>This is an embedded message, with a multipart/alternative part.</p>
512 EOF
513 test_expect_equal_file OUTPUT EXPECTED
514
515 test_begin_subtest "--format=raw --part=6, rfc822's text part"
516 notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
517 cat <<EOF >EXPECTED
518 This is an embedded message, with a multipart/alternative part.
519 EOF
520 test_expect_equal_file OUTPUT EXPECTED
521
522 test_begin_subtest "--format=raw --part=7, inline attachment"
523 notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
524 cat <<EOF >EXPECTED
525 This is a text attachment.
526 EOF
527 test_expect_equal_file OUTPUT EXPECTED
528
529 test_begin_subtest "--format=raw --part=8, plain text part"
530 notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
531 cat <<EOF >EXPECTED
532 And this message is signed.
533
534 -Carl
535 EOF
536 test_expect_equal_file OUTPUT EXPECTED
537
538 test_begin_subtest "--format=raw --part=9, pgp signature (unverified)"
539 notmuch show --format=raw --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
540 # output should *not* include newline
541 echo >>OUTPUT
542 cat <<EOF >EXPECTED
543 -----BEGIN PGP SIGNATURE-----
544 Version: GnuPG v1.4.11 (GNU/Linux)
545
546 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
547 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
548 =zkga
549 -----END PGP SIGNATURE-----
550 EOF
551 test_expect_equal_file OUTPUT EXPECTED
552
553 test_expect_success \
554     "--format=raw --part=10, no part, expect error" \
555     "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
556
557 test_begin_subtest "--format=mbox"
558 notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
559 printf "From cworth@cworth.org Fri Jan  5 15:43:57 2001\n" >EXPECTED
560 cat "${MAIL_DIR}"/multipart >>EXPECTED
561 # mbox output is expected to include a blank line
562 echo >>EXPECTED
563 test_expect_equal_file OUTPUT EXPECTED
564
565 test_expect_success \
566     "--format=mbox --part=1, incompatible, expect error" \
567     "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
568
569 test_begin_subtest "'notmuch reply' to a multipart message"
570 notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
571 cat <<EOF >EXPECTED
572 From: Notmuch Test Suite <test_suite@notmuchmail.org>
573 Subject: Re: Multipart message
574 To: Carl Worth <cworth@cworth.org>, cworth@cworth.org
575 In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org>
576 References: <87liy5ap00.fsf@yoom.home.cworth.org>
577
578 On Fri, 05 Jan 2001 15:43:57 +0000, Carl Worth <cworth@cworth.org> wrote:
579 > From: Carl Worth <cworth@cworth.org>
580 > To: cworth@cworth.org
581 > Subject: html message
582 > Date: Fri, 05 Jan 2001 15:42:57 +0000
583 >
584 Non-text part: text/html
585 > This is an embedded message, with a multipart/alternative part.
586 > This is a text attachment.
587 > And this message is signed.
588
589 > -Carl
590 EOF
591 test_expect_equal_file OUTPUT EXPECTED
592
593 test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair"
594 notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out
595 echo -n -e "\xEF\x0D\x0A" > crlf.expected
596 test_expect_equal_file crlf.out crlf.expected
597
598 test_done