test: Expand multipart test to cover part output in all formats.
authorJameson Graef Rollins <jrollins@finestructure.net>
Mon, 23 May 2011 07:46:44 +0000 (00:46 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 24 May 2011 19:19:18 +0000 (12:19 -0700)
The example multipart message is made a bit more complicated by adding
a message/rfc822 message, and the all parts are output and tested in
all output formats.

test/multipart

index 8bb9fa42fff4c397d6b4013a67cd85ea4c2fc9f8..42cbb7658f2afa66510d6ae873e9edb4f8895a79 100755 (executable)
@@ -17,8 +17,19 @@ Content-Type: multipart/signed; boundary="==-=-=";
 Content-Type: multipart/mixed; boundary="=-=-="
 
 --=-=-=
+Content-Type: message/rfc822
+Content-Disposition: inline
 
-This is an inline text part.
+From: Carl Worth <cworth@cworth.org>
+To: cworth@cworth.org
+Subject: html message
+Date: Tue, 05 Jan 2001 15:42:57 -0000
+User-Agent: Notmuch/0.5 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)
+Message-ID: <87liy5ap01.fsf@yoom.home.cworth.org>
+MIME-Version: 1.0
+Content-Type: text/html
+
+<p>This is an imbeded message, with a single html part.</p>
 
 --=-=-=
 Content-Disposition: attachment; filename=attachment
@@ -47,9 +58,10 @@ W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
 EOF
 notmuch new > /dev/null
 
-test_begin_subtest "Show multipart MIME message (--format=text)"
-output=$(notmuch show --format=text 'id:87liy5ap00.fsf@yoom.home.cworth.org')
-test_expect_equal "$output" "\fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
+test_begin_subtest "--format=text --part=0, full message"
+output=$(notmuch show --format=text --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fmessage{ id:87liy5ap00.fsf@yoom.home.cworth.org depth:0 match:1 filename:${MAIL_DIR}/multipart
 \fheader{
 Carl Worth <cworth@cworth.org> (2001-01-05) (attachment inbox unread)
 Subject: Multipart message
@@ -60,29 +72,237 @@ Date: Tue, 05 Jan 2001 15:43:57 -0000
 \fbody{
 \fpart{ ID: 1, Content-type: multipart/signed
 \fpart{ ID: 2, Content-type: multipart/mixed
-\fpart{ ID: 3, Content-type: text/plain
-This is an inline text part.
+\fpart{ ID: 3, Content-type: message/rfc822
+\fpart{ ID: 4, Content-type: text/html
+Non-text part: text/html
+\fpart}
 \fpart}
-\fattachment{ ID: 4, Content-type: text/plain
+\fattachment{ ID: 5, Content-type: text/plain
 Attachment: attachment (text/plain)
 This is a text attachment.
 \fattachment}
-\fpart{ ID: 5, Content-type: text/plain
+\fpart{ ID: 6, Content-type: text/plain
 And this message is signed.
 
 -Carl
 \fpart}
 \fpart}
-\fpart{ ID: 6, Content-type: application/pgp-signature
+\fpart{ ID: 7, Content-type: application/pgp-signature
 Non-text part: application/pgp-signature
 \fpart}
 \fpart}
 \fbody}
 \fmessage}"
 
-test_begin_subtest "Show multipart MIME message (--format=json)"
-output=$(notmuch show --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org')
-test_expect_equal "$output" '[[[{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}"'/multipart", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","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": "text/plain", "content": "This is an inline text part.\n"}, {"id": 4, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 5, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}]}, {"id": 6, "content-type": "application/pgp-signature"}]}]}, []]]]'
+test_begin_subtest "--format=text --part=1, message body"
+output=$(notmuch show --format=text --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 1, Content-type: multipart/signed
+\fpart{ ID: 2, Content-type: multipart/mixed
+\fpart{ ID: 3, Content-type: message/rfc822
+\fpart{ ID: 4, Content-type: text/html
+Non-text part: text/html
+\fpart}
+\fpart}
+\fattachment{ ID: 5, Content-type: text/plain
+Attachment: attachment (text/plain)
+This is a text attachment.
+\fattachment}
+\fpart{ ID: 6, Content-type: text/plain
+And this message is signed.
 
-test_done
+-Carl
+\fpart}
+\fpart}
+\fpart{ ID: 7, Content-type: application/pgp-signature
+Non-text part: application/pgp-signature
+\fpart}
+\fpart}"
+
+test_begin_subtest "--format=text --part=2, multipart/mixed"
+output=$(notmuch show --format=text --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 2, Content-type: multipart/mixed
+\fpart{ ID: 3, Content-type: message/rfc822
+\fpart{ ID: 4, Content-type: text/html
+Non-text part: text/html
+\fpart}
+\fpart}
+\fattachment{ ID: 5, Content-type: text/plain
+Attachment: attachment (text/plain)
+This is a text attachment.
+\fattachment}
+\fpart{ ID: 6, Content-type: text/plain
+And this message is signed.
+
+-Carl
+\fpart}
+\fpart}"
+
+test_begin_subtest "--format=text --part=3, rfc822 multipart"
+output=$(notmuch show --format=text --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 3, Content-type: message/rfc822
+\fpart{ ID: 4, Content-type: text/html
+Non-text part: text/html
+\fpart}
+\fpart}"
+
+test_begin_subtest "--format=text --part=4, html part"
+output=$(notmuch show --format=text --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 4, Content-type: text/html
+Non-text part: text/html
+\fpart}"
+
+test_begin_subtest "--format=text --part=5, inline attachement"
+output=$(notmuch show --format=text --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fattachment{ ID: 5, Content-type: text/plain
+Attachment: attachment (text/plain)
+This is a text attachment.
+\fattachment}"
+
+test_begin_subtest "--format=text --part=6, plain text part"
+output=$(notmuch show --format=text --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 6, Content-type: text/plain
+And this message is signed.
+
+-Carl
+\fpart}"
+
+test_begin_subtest "--format=text --part=7, pgp signature (unverified)"
+output=$(notmuch show --format=text --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+"\fpart{ ID: 7, Content-type: application/pgp-signature
+Non-text part: application/pgp-signature
+\fpart}"
+
+test_expect_success \
+    "--format=text --part=8, no part, expect error" \
+    "notmuch show --format=text --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
 
+test_begin_subtest "--format=json --part=0, full message"
+output=$(notmuch show --format=json --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "'"${MAIL_DIR}/multipart"'", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","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"}]}]}'
+
+test_begin_subtest "--format=json --part=1, message body"
+output=$(notmuch show --format=json --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"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"}]}'
+
+test_begin_subtest "--format=json --part=2, multipart/mixed"
+output=$(notmuch show --format=json --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"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"}]}'
+
+test_begin_subtest "--format=json --part=3, rfc822 multipart"
+output=$(notmuch show --format=json --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": 3, "content-type": "message/rfc822", "content": [{"id": 4, "content-type": "text/html"}]}'
+
+test_begin_subtest "--format=json --part=4, html part"
+output=$(notmuch show --format=json --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": 4, "content-type": "text/html"}'
+
+test_begin_subtest "--format=json --part=5, inline attachment"
+output=$(notmuch show --format=json --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": 5, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}'
+
+test_begin_subtest "--format=json --part=6, plain text part"
+output=$(notmuch show --format=json --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": 6, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}'
+
+test_begin_subtest "--format=json --part=7, pgp signature (unverified)"
+output=$(notmuch show --format=json --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'{"id": 7, "content-type": "application/pgp-signature"}'
+
+test_expect_success \
+    "--format=json --part=8, no part, expect error" \
+    "notmuch show --format=json --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
+
+test_begin_subtest "--format=raw"
+output=$(notmuch show --format=raw 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)"
+
+test_begin_subtest "--format=raw --part=0, full message"
+output=$(notmuch show --format=raw --part=0 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" "$(cat "${MAIL_DIR}"/multipart)"
+
+test_begin_subtest "--format=raw --part=1, message body"
+output=$(notmuch show --format=raw --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'<p>This is an imbeded message, with a single html part.</p>
+This is a text attachment.
+And this message is signed.
+
+-Carl
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
+W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
+=zkga
+-----END PGP SIGNATURE-----'
+
+test_begin_subtest "--format=raw --part=2, multipart/mixed"
+output=$(notmuch show --format=raw --part=2 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'<p>This is an imbeded message, with a single html part.</p>
+This is a text attachment.
+And this message is signed.
+
+-Carl'
+
+test_begin_subtest "--format=raw --part=3, rfc822 multipart"
+output=$(notmuch show --format=raw --part=3 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'<p>This is an imbeded message, with a single html part.</p>'
+
+test_begin_subtest "--format=raw --part=4, html part"
+output=$(notmuch show --format=raw --part=4 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'<p>This is an imbeded message, with a single html part.</p>'
+
+test_begin_subtest "--format=raw --part=5, inline attachment"
+output=$(notmuch show --format=raw --part=5 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'This is a text attachment.'
+
+test_begin_subtest "--format=raw --part=6, plain text part"
+output=$(notmuch show --format=raw --part=6 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'And this message is signed.
+
+-Carl'
+
+test_begin_subtest "--format=raw --part=7, pgp signature (unverified)"
+output=$(notmuch show --format=raw --part=7 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" \
+'-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iEYEARECAAYFAk3SA/gACgkQ6JDdNq8qSWj0sACghqVJEQJUs3yV8zbTzhgnSIcD
+W6cAmQE4dcYrx/LPLtYLZm1jsGauE5hE
+=zkga
+-----END PGP SIGNATURE-----'
+
+test_expect_success \
+    "--format=raw --part=8, no part, expect error" \
+    "notmuch show --format=raw --part=8 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
+
+test_begin_subtest "--format=mbox"
+output=$(notmuch show --format=mbox 'id:87liy5ap00.fsf@yoom.home.cworth.org')
+test_expect_equal "$output" "$(printf "From cworth@cworth.org Fri Jan  5 15:43:57 2001\n"; cat "${MAIL_DIR}"/multipart)"
+
+test_expect_success \
+    "--format=mbox --part=1, incompatible, expect error" \
+    "! notmuch show --format=mbox --part=1 'id:87liy5ap00.fsf@yoom.home.cworth.org'"
+
+test_done