Rework in the test framework; updated and new tests
[mmh] / test / tests / mhlist / test-mhlist
diff --git a/test/tests/mhlist/test-mhlist b/test/tests/mhlist/test-mhlist
new file mode 100755 (executable)
index 0000000..57f0cd5
--- /dev/null
@@ -0,0 +1,425 @@
+#!/bin/sh
+######################################################
+#
+# Test mhlist
+#
+######################################################
+
+. "$MH_TEST_COMMON"
+
+
+# check with no options and no current message
+
+
+runandcheck 'mhlist' <<!
+mhlist: no c message
+!
+
+
+# check with no options and current message
+folder +inbox 5 > /dev/null
+runandcheck mhlist <<!
+ msg part  type/subtype              size description                         
+   5       text/plain                  25
+!
+# FIXME: three should be no trailing spaces
+
+
+
+# check with folder and current message
+runandcheck "mhlist +inbox" <<!
+ msg part  type/subtype              size description                         
+   5       text/plain                  25
+!
+# FIXME: three should be no trailing spaces
+
+# check with specified message
+runandcheck "mhlist 5" <<!
+ msg part  type/subtype              size description                         
+   5       text/plain                  25
+!
+# FIXME: three should be no trailing spaces
+
+
+# check -file
+runandcheck "mhlist -file $MH_TEST_DIR/Mail/inbox/5" <<!
+ msg part  type/subtype              size description                         
+   5       text/plain                  25
+!
+# FIXME: three should be no trailing spaces
+
+# check -file -
+runandcheck "mhlist -file - < $MH_TEST_DIR/Mail/inbox/5" <<!
+ msg part  type/subtype              size description                         
+   0       text/plain                  25
+!
+# FIXME: three should be no trailing spaces
+
+
+# check message number greater than highest
+runandcheck 'mhlist 11' <<!
+mhlist: message 11 doesn't exist
+!
+
+
+# check multiple messages
+runandcheck "mhlist 2 8" <<!
+ msg part  type/subtype              size description                         
+   2       text/plain                  25
+   8       text/plain                  25
+!
+
+
+# Write message with a text/plain subpart.
+
+msgfile=`mhpath b`
+cat > $msgfile <<EOF
+To: recipient@example.com
+From: sender@example.com
+Subject: mhlist test
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: multipart/related;
+    type="multipart/alternative";
+    boundary="subpart__1.1"
+
+--subpart__1.1
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test1"
+
+This is the first text/plain part, in a subpart.
+
+--subpart__1.1--
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test2"
+Content-MD5: kq+Hnc2SD/eKwAnkFBDuEA==
+Content-Transfer-Encoding: quoted-printable
+
+This is the second text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"; name="test3"
+Content-Disposition: attachment; filename="test3"
+
+This is the third text/plain part.
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Disposition: attachment; filename="test4"
+Content-Transfer-Encoding: base64
+
+VGhpcyBpcyB0aGUgZm91cnRoIHRleHQvcGxhaW4gcGFydC4K
+
+------- =_aaaaaaaaaa0--
+EOF
+
+# check -part
+runandcheck 'mhlist l -part 3' <<!
+ msg part  type/subtype              size description                         
+  11       multipart/mixed            936
+     1     multipart/related          180
+     3     text/plain                  35
+!
+
+
+# check -part of a subpart
+runandcheck 'mhlist l -part 1.1' <<!
+ msg part  type/subtype              size description                         
+  11       multipart/mixed            936
+     1     multipart/related          180
+     1.1   text/plain                  49
+!
+
+
+# check -type
+runandcheck 'mhlist l -type text/plain' <<!
+ msg part  type/subtype              size description                         
+  11       multipart/mixed            936
+     1     multipart/related          180
+     1.1   text/plain                  49
+     2     text/plain                  36
+     3     text/plain                  35
+     4     text/plain                  36
+!
+
+
+
+
+# check -verbose
+runandcheck 'mhlist 11 -verbose' <<!
+ msg part  type/subtype              size description                         
+  11       multipart/mixed            936
+               boundary="----- =_aaaaaaaaaa0"
+     1     multipart/related          180
+               type="multipart/alternative"
+               boundary="subpart__1.1"
+     1.1   text/plain                  49
+               charset="iso-8859-1"
+     2     text/plain                  36
+               charset="iso-8859-1"
+     3     text/plain                  35
+               charset="iso-8859-1"
+               name="test3"
+     4     text/plain                  36
+               charset="iso-8859-1"
+!
+
+
+
+# check MIME parser and m_getfld
+
+msgfile=`mhpath b`
+msgnum=`basename $msgfile`
+cat > $msgfile <<EOF
+To: recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    recipient@example.com, recipient@example.com, recipient@example.com,
+    re@example.com
+From: sender@example.com
+Subject: very long header
+Date: Wed, 4 Dec 2013 21:12:00 -0500
+MIME-Version: 1.0
+Content-Type: multipart/related; boundary="1"
+
+--1
+Content-Type: multipart/alternative; boundary="2"
+
+--2
+Content-Type: text/plain; charset="us-ascii"
+
+This is part 1.
+
+
+--2--
+
+--1
+Content-Type: text/plain; charset="us-ascii"
+
+This is part 2.
+
+
+--1--
+EOF
+
+runandcheck "mhlist l" <<!
+ msg part  type/subtype              size description                         
+  12       multipart/related          204
+     1     multipart/alternative       74
+     1.1   text/plain                  17
+     2     text/plain                  17
+!
+
+
+##  now check mhlist output
+
+msgfile=`mhpath b`
+msgnum=`basename $msgfile`
+cat > $msgfile <<EOF
+To: example@example.org
+From: someone <someone@example.com>
+Subject: mhlist test
+Date: Thu, 29 Jan 2015 18:12:21 +0000 (GMT)
+Content-Type: multipart/mixed; boundary="BoundaryMixed"
+
+--BoundaryMixed
+Content-type: multipart/alternative;
+ boundary="BoundaryAlternative1"
+
+--BoundaryAlternative1
+Content-type: text/enriched; CHARSET=US-ASCII
+Content-transfer-encoding: 7bit
+
+This is supposedly enriched.
+
+--BoundaryAlternative1
+Content-type: text/plain; charset=ISO-8859-1; format=flowed
+Content-transfer-encoding: 8bit
+
+This is the body text/plain part.
+
+--BoundaryAlternative1
+Content-type: text/html; CHARSET=US-ASCII
+Content-transfer-encoding: 7bit
+
+<html><body><div><span style="line-height: 1.5;">
+This is the text/html body part.
+</span></div></body></html>
+
+--BoundaryAlternative1--
+
+--BoundaryMixed
+Content-type: multipart/alternative;
+ boundary="BoundaryAlternative2"
+
+--BoundaryAlternative2
+Content-type: audio/wav
+Content-transfer-encoding: 8bit
+
+pretend wav audio
+
+--BoundaryAlternative2
+Content-type: audio/mp3
+Content-transfer-encoding: 8bit
+
+pretend mp3 audio
+
+--BoundaryAlternative2
+Content-type: audio/basic
+Content-transfer-encoding: 8bit
+
+pretend basic audio
+
+--BoundaryAlternative2--
+
+--BoundaryMixed--
+EOF
+
+# check it -- vanilla output
+runandcheck "mhlist $msgnum" <<!
+ msg part  type/subtype              size description                         
+  13       multipart/mixed           1038
+     1     multipart/alternative      518
+     1.1   text/html                  111
+     1.2   text/plain                  34
+     1.3   text/enriched               29
+     2     multipart/alternative      326
+     2.1   audio/basic                 20
+     2.2   audio/mp3                   18
+     2.3   audio/wav                   18
+!
+
+
+# check it -- just part 1
+runandcheck "mhlist -part 1 $msgnum" <<!
+ msg part  type/subtype              size description                         
+  13       multipart/mixed           1038
+     1     multipart/alternative      518
+     1.1   text/html                  111
+     1.2   text/plain                  34
+     1.3   text/enriched               29
+     2     multipart/alternative      326
+!
+
+
+
+# check it -- ask for audio/basic in part 1, should get nothing
+runandcheck "mhlist -part 1 -type audio/basic $msgnum" <<!
+ msg part  type/subtype              size description                         
+  13       multipart/mixed           1038
+     1     multipart/alternative      518
+     2     multipart/alternative      326
+!
+