#!/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
!

