2 test_description="output of multipart message"
5 cat <<EOF > ${MAIL_DIR}/multipart
6 From: Carl Worth <cworth@cworth.org>
8 Subject: Multipart message
9 Date: Tue, 05 Jan 2001 15:43:57 -0000
10 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
11 Message-ID: <87liy5ap00.fsf@yoom.home.cworth.org>
13 Content-Type: multipart/signed; boundary="==-=-=";
14 micalg=pgp-sha1; protocol="application/pgp-signature"
17 Content-Type: multipart/mixed; boundary="=-=-="
20 Content-Type: message/rfc822
21 Content-Disposition: inline
23 From: Carl Worth <cworth@cworth.org>
26 Date: Tue, 05 Jan 2001 15:42:57 -0000
27 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
28 Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
30 Content-Type: text/html
32 <p>This is an embedded message, with a single html part.</p>
35 Content-Disposition: attachment; filename=attachment
37 This is a text attachment.
41 And this message is signed.
48 Content-Type: application/pgp-signature
50 -----BEGIN PGP SIGNATURE-----
51 Version: GnuPG v1.4.11 (GNU/Linux)
53 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
54 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
56 -----END PGP SIGNATURE-----
60 cat <<EOF > ${MAIL_DIR}/base64-part-with-crlf
61 From: Carl Worth <cworth@cworth.org>
63 Subject: Test message with a BASE64 encoded binary containing CRLF pair
64 Date: Tue, 05 Jan 2001 15:43:57 -0000
65 User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
66 Message-ID: <base64-part-with-crlf>
68 Content-Type: multipart/mixed; boundary="==-=-=";
72 The attached BASE64-encoded part expands to a binary containing a CRLF
73 pair (that is one bye of 0x0D followed by one byte of 0x0A). This is
74 designed to ensure that notmuch is not corrupting the output of this
75 part by converting the CRLF pair to an LF only (as would be appropriate
76 for display of a text part on a Linux system, for example).
78 The part should be a 3-byte file with the following sequence of 3
84 Content-Type: application/octet-stream
85 Content-Disposition: attachment; filename=crlf.bin
86 Content-Transfer-Encoding: base64
91 increment_mtime "$MAIL_DIR"
92 notmuch new > /dev/null
94 test_begin_subtest "--format=text --part=0, full message"
95 output=$(notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
96 test_expect_equal "$output" \
97 "
\fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
99 Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox signed unread)
100 Subject: Multipart message
101 From: Carl Worth <cworth@cworth.org>
102 To: cworth@cworth.org
103 Date: Tue, 05 Jan 2001 15:43:57 -0000
106 \fpart{ ID: 1, Content-type: multipart/signed
107 \fpart{ ID: 2, Content-type: multipart/mixed
108 \fpart{ ID: 3, Content-type: message/rfc822
109 \fpart{ ID: 4, Content-type: text/html
110 Non-text part: text/html
113 \fattachment{ ID: 5, Content-type: text/plain
114 Attachment: attachment (text/plain)
115 This is a text attachment.
117 \fpart{ ID: 6, Content-type: text/plain
118 And this message is signed.
123 \fpart{ ID: 7, Content-type: application/pgp-signature
124 Non-text part: application/pgp-signature
130 test_begin_subtest "--format=text --part=1, message body"
131 output=$(notmuch show --format=text --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
132 test_expect_equal "$output" \
133 "
\fpart{ ID: 1, Content-type: multipart/signed
134 \fpart{ ID: 2, Content-type: multipart/mixed
135 \fpart{ ID: 3, Content-type: message/rfc822
136 \fpart{ ID: 4, Content-type: text/html
137 Non-text part: text/html
140 \fattachment{ ID: 5, Content-type: text/plain
141 Attachment: attachment (text/plain)
142 This is a text attachment.
144 \fpart{ ID: 6, Content-type: text/plain
145 And this message is signed.
150 \fpart{ ID: 7, Content-type: application/pgp-signature
151 Non-text part: application/pgp-signature
155 test_begin_subtest "--format=text --part=2, multipart/mixed"
156 output=$(notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
157 test_expect_equal "$output" \
158 "
\fpart{ ID: 2, Content-type: multipart/mixed
159 \fpart{ ID: 3, Content-type: message/rfc822
160 \fpart{ ID: 4, Content-type: text/html
161 Non-text part: text/html
164 \fattachment{ ID: 5, Content-type: text/plain
165 Attachment: attachment (text/plain)
166 This is a text attachment.
168 \fpart{ ID: 6, Content-type: text/plain
169 And this message is signed.
175 test_begin_subtest "--format=text --part=3, rfc822 multipart"
176 output=$(notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
177 test_expect_equal "$output" \
178 "
\fpart{ ID: 3, Content-type: message/rfc822
179 \fpart{ ID: 4, Content-type: text/html
180 Non-text part: text/html
184 test_begin_subtest "--format=text --part=4, html part"
185 output=$(notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
186 test_expect_equal "$output" \
187 "
\fpart{ ID: 4, Content-type: text/html
188 Non-text part: text/html
191 test_begin_subtest "--format=text --part=5, inline attachement"
192 output=$(notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
193 test_expect_equal "$output" \
194 "
\fattachment{ ID: 5, Content-type: text/plain
195 Attachment: attachment (text/plain)
196 This is a text attachment.
199 test_begin_subtest "--format=text --part=6, plain text part"
200 output=$(notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
201 test_expect_equal "$output" \
202 "
\fpart{ ID: 6, Content-type: text/plain
203 And this message is signed.
208 test_begin_subtest "--format=text --part=7, pgp signature (unverified)"
209 output=$(notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
210 test_expect_equal "$output" \
211 "
\fpart{ ID: 7, Content-type: application/pgp-signature
212 Non-text part: application/pgp-signature
215 test_expect_success \
216 "--format=text --part=8, no part, expect error" \
217 "notmuch show --format=text --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
219 test_begin_subtest "--format=json --part=0, full message"
220 output=$(notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
221 test_expect_equal "$output" \
222 '{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "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", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}]}'
224 test_begin_subtest "--format=json --part=1, message body"
225 output=$(notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
226 test_expect_equal "$output" \
227 '{"id": 1, "content-type": "multipart/signed", "content": [{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 7, "content-type": "application/pgp-signature"}]}'
229 test_begin_subtest "--format=json --part=2, multipart/mixed"
230 output=$(notmuch show --format=json --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
231 test_expect_equal "$output" \
232 '{"id": 2, "content-type": "multipart/mixed", "content": [{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}, {"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}'
234 test_begin_subtest "--format=json --part=3, rfc822 multipart"
235 output=$(notmuch show --format=json --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
236 test_expect_equal "$output" \
237 '{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}'
239 test_begin_subtest "--format=json --part=4, html part"
240 output=$(notmuch show --format=json --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
241 test_expect_equal "$output" \
242 '{"id": 4, "content-type": "text/html"}'
244 test_begin_subtest "--format=json --part=5, inline attachment"
245 output=$(notmuch show --format=json --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
246 test_expect_equal "$output" \
247 '{"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}'
249 test_begin_subtest "--format=json --part=6, plain text part"
250 output=$(notmuch show --format=json --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
251 test_expect_equal "$output" \
252 '{"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}'
254 test_begin_subtest "--format=json --part=7, pgp signature (unverified)"
255 output=$(notmuch show --format=json --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
256 test_expect_equal "$output" \
257 '{"id": 7, "content-type": "application/pgp-signature"}'
259 test_expect_success \
260 "--format=json --part=8, no part, expect error" \
261 "notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
263 test_begin_subtest "--format=raw"
264 output=$(notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org')
265 test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)"
267 test_begin_subtest "--format=raw --part=0, full message"
268 output=$(notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
269 test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)"
271 test_begin_subtest "--format=raw --part=1, message body"
272 output=$(notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
273 test_expect_equal "$output" \
274 '<p>This is an embedded message, with a single html part.</p>
275 This is a text attachment.
276 And this message is signed.
279 -----BEGIN PGP SIGNATURE-----
280 Version: GnuPG v1.4.11 (GNU/Linux)
282 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
283 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
285 -----END PGP SIGNATURE-----'
287 test_begin_subtest "--format=raw --part=2, multipart/mixed"
288 output=$(notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
289 test_expect_equal "$output" \
290 '<p>This is an embedded message, with a single html part.</p>
291 This is a text attachment.
292 And this message is signed.
296 test_begin_subtest "--format=raw --part=3, rfc822 multipart"
297 output=$(notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
298 test_expect_equal "$output" \
299 '<p>This is an embedded message, with a single html part.</p>'
301 test_begin_subtest "--format=raw --part=4, html part"
302 output=$(notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
303 test_expect_equal "$output" \
304 '<p>This is an embedded message, with a single html part.</p>'
306 test_begin_subtest "--format=raw --part=5, inline attachment"
307 output=$(notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
308 test_expect_equal "$output" \
309 'This is a text attachment.'
311 test_begin_subtest "--format=raw --part=6, plain text part"
312 output=$(notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
313 test_expect_equal "$output" \
314 'And this message is signed.
318 test_begin_subtest "--format=raw --part=7, pgp signature (unverified)"
319 output=$(notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
320 test_expect_equal "$output" \
321 '-----BEGIN PGP SIGNATURE-----
322 Version: GnuPG v1.4.11 (GNU/Linux)
324 iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
325 W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
327 -----END PGP SIGNATURE-----'
329 test_expect_success \
330 "--format=raw --part=8, no part, expect error" \
331 "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
333 test_begin_subtest "--format=mbox"
334 output=$(notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org')
335 test_expect_equal "$output" "$(printf "From cworth@cworth.org Fri Jan 5 15:43:57 2001\n"; cat "${MAIL_DIR}"/multipart)"
337 test_expect_success \
338 "--format=mbox --part=1, incompatible, expect error" \
339 "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
341 test_begin_subtest "'notmuch reply' to a multipart message"
342 output=$(notmuch reply 'id:87liy5ap00.fsf@yoom.home.cworth.org')
343 test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
344 Subject: Re: Multipart message
345 To: Carl Worth <cworth@cworth.org>, cworth@cworth.org
346 In-Reply-To: <87liy5ap00.fsf@yoom.home.cworth.org>
347 References: <87liy5ap00.fsf@yoom.home.cworth.org>
349 On Tue, 05 Jan 2001 15:43:57 -0000, Carl Worth <cworth@cworth.org> wrote:
350 Non-text part: multipart/signed
351 Non-text part: multipart/mixed
352 Non-text part: message/rfc822
353 Non-text part: text/html
354 > This is a text attachment.
355 > And this message is signed.
358 Non-text part: application/pgp-signature"
360 test_begin_subtest "'notmuch show --part' does not corrupt a part with CRLF pair"
361 notmuch show --format=raw --part=3 id:base64-part-with-crlf > crlf.out
362 echo -n -e "\xEF\x0D\x0A" > crlf.expected
363 test_expect_equal_file crlf.out crlf.expected