2 test_description="output of multipart message"
5 cat <<EOF > embedded_message
6 From: Carl Worth <cworth@cworth.org>
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>
13 Content-Type: multipart/alternative; boundary="==-=-=="
16 Content-Type: text/html
18 <p>This is an embedded message, with a multipart/alternative part.</p>
21 Content-Type: text/plain
23 This is an embedded message, with a multipart/alternative part.
28 cat <<EOF > ${MAIL_DIR}/multipart
29 From: Carl Worth <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>
36 Content-Type: multipart/signed; boundary="==-=-=";
37 micalg=pgp-sha1; protocol="application/pgp-signature"
40 Content-Type: multipart/mixed; boundary="=-=-="
43 Content-Type: message/rfc822
44 Content-Disposition: inline
47 cat embedded_message >> ${MAIL_DIR}/multipart
48 cat <<EOF >> ${MAIL_DIR}/multipart
51 Content-Disposition: attachment; filename=attachment
53 This is a text attachment.
57 And this message is signed.
64 Content-Type: application/pgp-signature
66 -----BEGIN PGP SIGNATURE-----
67 Version: GnuPG v1.4.11 (GNU/Linux)
69 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
70 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
72 -----END PGP SIGNATURE-----
76 cat <<EOF > ${MAIL_DIR}/base64-part-with-crlf
77 From: Carl Worth <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>
84 Content-Type: multipart/mixed; boundary="==-=-=";
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).
94 The part should be a 3-byte file with the following sequence of 3
100 Content-Type: application/octet-stream
101 Content-Disposition: attachment; filename=crlf.bin
102 Content-Transfer-Encoding: base64
107 notmuch new > /dev/null
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
112 \fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 excluded:0 filename:${MAIL_DIR}/multipart
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
121 \fpart{ ID: 1, Content-type: multipart/signed
122 \fpart{ ID: 2, Content-type: multipart/mixed
123 \fpart{ ID: 3, Content-type: message/rfc822
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
131 \fpart{ ID: 4, Content-type: multipart/alternative
132 \fpart{ ID: 5, Content-type: text/html
133 Non-text part: text/html
135 \fpart{ ID: 6, Content-type: text/plain
136 This is an embedded message, with a multipart/alternative part.
141 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
142 This is a text attachment.
144 \fpart{ ID: 8, Content-type: text/plain
145 And this message is signed.
150 \fpart{ ID: 9, Content-type: application/pgp-signature
151 Non-text part: application/pgp-signature
157 test_expect_equal_file OUTPUT EXPECTED
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
162 \fpart{ ID: 1, Content-type: multipart/signed
163 \fpart{ ID: 2, Content-type: multipart/mixed
164 \fpart{ ID: 3, Content-type: message/rfc822
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
172 \fpart{ ID: 4, Content-type: multipart/alternative
173 \fpart{ ID: 5, Content-type: text/html
174 Non-text part: text/html
176 \fpart{ ID: 6, Content-type: text/plain
177 This is an embedded message, with a multipart/alternative part.
182 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
183 This is a text attachment.
185 \fpart{ ID: 8, Content-type: text/plain
186 And this message is signed.
191 \fpart{ ID: 9, Content-type: application/pgp-signature
192 Non-text part: application/pgp-signature
196 test_expect_equal_file OUTPUT EXPECTED
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
201 \fpart{ ID: 2, Content-type: multipart/mixed
202 \fpart{ ID: 3, Content-type: message/rfc822
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
210 \fpart{ ID: 4, Content-type: multipart/alternative
211 \fpart{ ID: 5, Content-type: text/html
212 Non-text part: text/html
214 \fpart{ ID: 6, Content-type: text/plain
215 This is an embedded message, with a multipart/alternative part.
220 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
221 This is a text attachment.
223 \fpart{ ID: 8, Content-type: text/plain
224 And this message is signed.
230 test_expect_equal_file OUTPUT EXPECTED
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
235 \fpart{ ID: 3, Content-type: message/rfc822
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
243 \fpart{ ID: 4, Content-type: multipart/alternative
244 \fpart{ ID: 5, Content-type: text/html
245 Non-text part: text/html
247 \fpart{ ID: 6, Content-type: text/plain
248 This is an embedded message, with a multipart/alternative part.
254 test_expect_equal_file OUTPUT EXPECTED
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
259 \fpart{ ID: 4, Content-type: multipart/alternative
260 \fpart{ ID: 5, Content-type: text/html
261 Non-text part: text/html
263 \fpart{ ID: 6, Content-type: text/plain
264 This is an embedded message, with a multipart/alternative part.
268 test_expect_equal_file OUTPUT EXPECTED
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
273 \fpart{ ID: 5, Content-type: text/html
274 Non-text part: text/html
277 test_expect_equal_file OUTPUT EXPECTED
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
282 \fpart{ ID: 6, Content-type: text/plain
283 This is an embedded message, with a multipart/alternative part.
286 test_expect_equal_file OUTPUT EXPECTED
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
291 \fattachment{ ID: 7, Filename: attachment, Content-type: text/plain
292 This is a text attachment.
295 test_expect_equal_file OUTPUT EXPECTED
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
300 \fpart{ ID: 8, Content-type: text/plain
301 And this message is signed.
306 test_expect_equal_file OUTPUT EXPECTED
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
311 \fpart{ ID: 9, Content-type: application/pgp-signature
312 Non-text part: application/pgp-signature
315 test_expect_equal_file OUTPUT EXPECTED
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'"
321 test_begin_subtest "--format=json --part=0, full message"
322 notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
324 {"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": [
325 {"id": 1, "content-type": "multipart/signed", "content": [
326 {"id": 2, "content-type": "multipart/mixed", "content": [
327 {"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": [
328 {"id": 4, "content-type": "multipart/alternative", "content": [
329 {"id": 5, "content-type": "text/html"},
330 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]},
331 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"},
332 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]},
333 {"id": 9, "content-type": "application/pgp-signature"}]}]}
335 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
337 test_begin_subtest "--format=json --part=1, message body"
338 notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
340 {"id": 1, "content-type": "multipart/signed", "content": [
341 {"id": 2, "content-type": "multipart/mixed", "content": [
342 {"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": [
343 {"id": 4, "content-type": "multipart/alternative", "content": [
344 {"id": 5, "content-type": "text/html"},
345 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]},
346 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"},
347 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]},
348 {"id": 9, "content-type": "application/pgp-signature"}]}
350 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
352 test_begin_subtest "--format=json --part=2, multipart/mixed"
353 notmuch show --format=json --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
355 {"id": 2, "content-type": "multipart/mixed", "content": [
356 {"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": [
357 {"id": 4, "content-type": "multipart/alternative", "content": [
358 {"id": 5, "content-type": "text/html"},
359 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]},
360 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"},
361 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}
363 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
365 test_begin_subtest "--format=json --part=3, rfc822 part"
366 notmuch show --format=json --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
368 {"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": [
369 {"id": 4, "content-type": "multipart/alternative", "content": [
370 {"id": 5, "content-type": "text/html"},
371 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]}
373 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
375 test_begin_subtest "--format=json --part=4, rfc822's multipart/alternative"
376 notmuch show --format=json --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
378 {"id": 4, "content-type": "multipart/alternative", "content": [
379 {"id": 5, "content-type": "text/html"},
380 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}]}
382 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
384 test_begin_subtest "--format=json --part=5, rfc822's html part"
385 notmuch show --format=json --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
387 {"id": 5, "content-type": "text/html"}
389 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
391 test_begin_subtest "--format=json --part=6, rfc822's text part"
392 notmuch show --format=json --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
394 {"id": 6, "content-type": "text/plain", "content": "This is an embedded message, with a multipart/alternative part.\n"}
396 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
398 test_begin_subtest "--format=json --part=7, inline attachment"
399 notmuch show --format=json --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
401 {"id": 7, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}
403 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
405 test_begin_subtest "--format=json --part=8, plain text part"
406 notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
408 {"id": 8, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}
410 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
412 test_begin_subtest "--format=json --part=9, pgp signature (unverified)"
413 notmuch show --format=json --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
415 {"id": 9, "content-type": "application/pgp-signature"}
417 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
419 test_expect_success \
420 "--format=json --part=10, no part, expect error" \
421 "notmuch show --format=json --part=10 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
423 test_begin_subtest "--format=raw"
424 notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
425 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
427 test_begin_subtest "--format=raw --part=0, full message"
428 notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
429 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
431 test_begin_subtest "--format=raw --part=1, message body"
432 notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
433 test_expect_equal_file OUTPUT "${MAIL_DIR}"/multipart
435 test_begin_subtest "--format=raw --part=2, multipart/mixed"
436 notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
438 Content-Type: multipart/mixed; boundary="=-=-="
441 Content-Type: message/rfc822
442 Content-Disposition: inline
444 From: Carl Worth <cworth@cworth.org>
445 To: cworth@cworth.org
446 Subject: html message
447 Date: Fri, 05 Jan 2001 15:42:57 +0000
448 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
449 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
451 Content-Type: multipart/alternative; boundary="==-=-=="
454 Content-Type: text/html
456 <p>This is an embedded message, with a multipart/alternative part.</p>
459 Content-Type: text/plain
461 This is an embedded message, with a multipart/alternative part.
466 Content-Disposition: attachment; filename=attachment
468 This is a text attachment.
472 And this message is signed.
478 test_expect_equal_file OUTPUT EXPECTED
480 test_begin_subtest "--format=raw --part=3, rfc822 part"
481 notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
482 test_expect_equal_file OUTPUT embedded_message
484 test_begin_subtest "--format=raw --part=4, rfc822's multipart"
485 notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
487 From: Carl Worth <cworth@cworth.org>
488 To: cworth@cworth.org
489 Subject: html message
490 Date: Fri, 05 Jan 2001 15:42:57 +0000
491 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
492 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
494 Content-Type: multipart/alternative; boundary="==-=-=="
497 Content-Type: text/html
499 <p>This is an embedded message, with a multipart/alternative part.</p>
502 Content-Type: text/plain
504 This is an embedded message, with a multipart/alternative part.
508 test_expect_equal_file OUTPUT EXPECTED
510 test_begin_subtest "--format=raw --part=5, rfc822's html part"
511 notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
513 <p>This is an embedded message, with a multipart/alternative part.</p>
515 test_expect_equal_file OUTPUT EXPECTED
517 test_begin_subtest "--format=raw --part=6, rfc822's text part"
518 notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
520 This is an embedded message, with a multipart/alternative part.
522 test_expect_equal_file OUTPUT EXPECTED
524 test_begin_subtest "--format=raw --part=7, inline attachment"
525 notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
527 This is a text attachment.
529 test_expect_equal_file OUTPUT EXPECTED
531 test_begin_subtest "--format=raw --part=8, plain text part"
532 notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
534 And this message is signed.
538 test_expect_equal_file OUTPUT EXPECTED
540 test_begin_subtest "--format=raw --part=9, pgp signature (unverified)"
541 notmuch show --format=raw --part=9 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
542 # output should *not* include newline
545 -----BEGIN PGP SIGNATURE-----
546 Version: GnuPG v1.4.11 (GNU/Linux)
548 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
549 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
551 -----END PGP SIGNATURE-----
553 test_expect_equal_file OUTPUT EXPECTED
555 test_expect_success \
556 "--format=raw --part=10, no part, expect error" \
557 "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
559 test_begin_subtest "--format=mbox"
560 notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
561 printf "From cworth@cworth.org Fri Jan 5 15:43:57 2001\n" >EXPECTED
562 cat "${MAIL_DIR}"/multipart >>EXPECTED
563 # mbox output is expected to include a blank line
565 test_expect_equal_file OUTPUT EXPECTED
567 test_expect_success \
568 "--format=mbox --part=1, incompatible, expect error" \
569 "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
571 test_begin_subtest "'notmuch reply' to a multipart message"
572 notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org' >OUTPUT
574 From: Notmuch Test Suite <test_suite@notmuchmail.org>
575 Subject: Re: Multipart message
576 To: Carl Worth <cworth@cworth.org>, cworth@cworth.org
577 In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org>
578 References: <87liy5ap00.fsf@yoom.home.cworth.org>
580 On Fri, 05 Jan 2001 15:43:57 +0000, Carl Worth <cworth@cworth.org> wrote:
581 > From: Carl Worth <cworth@cworth.org>
582 > To: cworth@cworth.org
583 > Subject: html message
584 > Date: Fri, 05 Jan 2001 15:42:57 +0000
586 Non-text part: text/html
587 > This is an embedded message, with a multipart/alternative part.
588 > This is a text attachment.
589 > And this message is signed.
593 test_expect_equal_file OUTPUT EXPECTED
595 test_begin_subtest "'notmuch reply' to a multipart message with json format"
596 notmuch reply --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org' | notmuch_json_show_sanitize >OUTPUT
598 {"reply-headers": {"Subject": "Re: Multipart message",
599 "From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
600 "To": "Carl Worth <cworth@cworth.org>, cworth@cworth.org",
601 "In-reply-to": "<87liy5ap00.fsf@yoom.home.cworth.org>",
602 "References": " <87liy5ap00.fsf@yoom.home.cworth.org>"},
603 "original": {"id": "XXXXX",
607 "timestamp": 978709437,
608 "date_relative": "2001-01-05",
609 "tags": ["attachment","inbox","signed","unread"],
610 "headers": {"Subject": "Multipart message",
611 "From": "Carl Worth <cworth@cworth.org>",
612 "To": "cworth@cworth.org",
613 "Date": "Fri, 05 Jan 2001 15:43:57 +0000"},
615 "content-type": "multipart/signed",
616 "content": [{"id": 2,
617 "content-type": "multipart/mixed",
618 "content": [{"id": 3,
619 "content-type": "message/rfc822",
620 "content": [{"headers": {"Subject": "html message",
621 "From": "Carl Worth <cworth@cworth.org>",
622 "To": "cworth@cworth.org",
623 "Date": "Fri, 05 Jan 2001 15:42:57 +0000"},
625 "content-type": "multipart/alternative",
626 "content": [{"id": 5,
627 "content-type": "text/html"},
629 "content-type": "text/plain",
630 "content": "This is an embedded message, with a multipart/alternative part.\n"}]}]}]},
632 "content-type": "text/plain",
634 "content": "This is a text attachment.\n"},
636 "content-type": "text/plain",
637 "content": "And this message is signed.\n\n-Carl\n"}]},
639 "content-type": "application/pgp-signature"}]}]}}
641 test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
643 test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair"
644 notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out
645 echo -n -e "\xEF\x0D\x0A" > crlf.expected
646 test_expect_equal_file crlf.out crlf.expected