annotate test/test_multipart.py @ 5305:e20f472fde7d

issue2550799: provide basic support for handling html only emails Initial implementation and testing with the dehtml html converter done. The use of beautifulsoup 4 is not tested. My test system breaks when running dehtml.py using beautiful soup. I don't get the failures when running under the test harness, but the text output is significantly different (different line breaks, number of newlines etc.) The tests for dehtml need to be generated for beautiful soup and the expected output changed. Since I have a wonky install of beautiful soup, I don't trust my output as the standard to test against. Also since beautiful soup is optional, the test harness needs to skip the beautifulsoup tests if import bs4 fails. Again something outside of my expertise. I deleted the work I had done to implement that. I could not get it working and wanted to get this feature in in some form.
author John Rouillard <rouilj@ieee.org>
date Fri, 13 Oct 2017 21:46:59 -0400
parents 364c54991861
children 91354bf0b683
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
18 import unittest
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
19 from cStringIO import StringIO
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 from roundup.mailgw import Message
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22
5035
b5bb492e4b3c Rename TestMessage to ExampleMessage
John Kristensen <john@jerrykan.com>
parents: 4570
diff changeset
23 class ExampleMessage(Message):
4425
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
24 # A note on message/rfc822: The content of such an attachment is an
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
25 # email with at least one header line. RFC2046 tells us: """ A
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
26 # media type of "message/rfc822" indicates that the body contains an
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
27 # encapsulated message, with the syntax of an RFC 822 message.
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
28 # However, unlike top-level RFC 822 messages, the restriction that
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
29 # each "message/rfc822" body must include a "From", "Date", and at
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
30 # least one destination header is removed and replaced with the
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
31 # requirement that at least one of "From", "Subject", or "Date" must
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
32 # be present."""
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
33 # This means we have to add a newline after the mime-header before
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
34 # the subject, otherwise the subject is part of the mime header not
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
35 # part of the email header.
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
36 table = {'multipart/signed': ' boundary="boundary-%(indent)s";\n',
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
37 'multipart/mixed': ' boundary="boundary-%(indent)s";\n',
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
38 'multipart/alternative': ' boundary="boundary-%(indent)s";\n',
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
39 'text/plain': ' name="foo.txt"\nfoo\n',
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
40 'text/html': ' name="bar.html"\n<html><body>bar</body></html>\n',
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
41 'application/pgp-signature': ' name="foo.gpg"\nfoo\n',
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
42 'application/pdf': ' name="foo.pdf"\nfoo\n',
4425
0bb3054274b8 - some formatting
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3915
diff changeset
43 'message/rfc822': '\nSubject: foo\n\nfoo\n'}
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
44
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
45 def __init__(self, spec):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
46 """Create a basic MIME message according to 'spec'.
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
47
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
48 Each line of a spec has one content-type, which is optionally indented.
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
49 The indentation signifies how deep in the MIME hierarchy the
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
50 content-type is.
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
51
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
52 """
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
53 parts = []
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
54 for line in spec.splitlines():
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
55 content_type = line.strip()
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
56 if not content_type:
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
57 continue
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
58
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
59 indent = self.getIndent(line)
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
60 if indent:
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
61 parts.append('\n--boundary-%s\n' % indent)
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
62 parts.append('Content-type: %s;\n' % content_type)
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
63 parts.append(self.table[content_type] % {'indent': indent + 1})
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
64
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
65 Message.__init__(self, StringIO(''.join(parts)))
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
66
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
67 def getIndent(self, line):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
68 """Get the current line's indentation, using four-space indents."""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
69 count = 0
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
70 for char in line:
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
71 if char != ' ':
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
72 break
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
73 count += 1
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
74 return count / 4
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
75
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 class MultipartTestCase(unittest.TestCase):
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 def setUp(self):
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
78 self.fp = StringIO()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 w = self.fp.write
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 w('Content-Type: multipart/mixed; boundary="foo"\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 w('This is a multipart message. Ignore this bit.\r\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
82 w('\r\n--foo\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 w('Content-Type: text/plain\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 w('Hello, world!\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 w('\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 w('Blah blah\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 w('foo\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 w('-foo\r\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
90 w('\r\n--foo\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 w('Content-Type: multipart/alternative; boundary="bar"\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 w('This is a multipart message. Ignore this bit.\r\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
94 w('\r\n--bar\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 w('Content-Type: text/plain\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 w('Hello, world!\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 w('\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 w('Blah blah\r\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
100 w('\r\n--bar\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 w('Content-Type: text/html\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 w('<b>Hello, world!</b>\r\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
104 w('\r\n--bar--\r\n')
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
105 w('\r\n--foo\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 w('Content-Type: text/plain\r\n\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 w('Last bit\n')
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
109 w('\r\n--foo--\r\n')
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 self.fp.seek(0)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 def testMultipart(self):
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 m = Message(self.fp)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 self.assert_(m is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 # skip the first bit
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
117 p = m.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 self.assert_(p is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 self.assertEqual(p.fp.read(),
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 'This is a multipart message. Ignore this bit.\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 # first text/plain
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
123 p = m.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 self.assert_(p is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 self.assertEqual(p.gettype(), 'text/plain')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 self.assertEqual(p.fp.read(),
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 'Hello, world!\r\n\r\nBlah blah\r\nfoo\r\n-foo\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 # sub-multipart
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
130 p = m.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 self.assert_(p is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 self.assertEqual(p.gettype(), 'multipart/alternative')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 # sub-multipart text/plain
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
135 q = p.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 self.assert_(q is not None)
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
137 q = p.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 self.assert_(q is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 self.assertEqual(q.gettype(), 'text/plain')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 self.assertEqual(q.fp.read(), 'Hello, world!\r\n\r\nBlah blah\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 # sub-multipart text/html
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
143 q = p.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 self.assert_(q is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 self.assertEqual(q.gettype(), 'text/html')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 self.assertEqual(q.fp.read(), '<b>Hello, world!</b>\r\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 # sub-multipart end
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
149 q = p.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 self.assert_(q is None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 # final text/plain
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
153 p = m.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 self.assert_(p is not None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 self.assertEqual(p.gettype(), 'text/plain')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 self.assertEqual(p.fp.read(),
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 'Last bit\n')
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 # end
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
160 p = m.getpart()
110
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 self.assert_(p is None)
19686b60e410 Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
163 def TestExtraction(self, spec, expected):
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
164 from roundup.dehtml import dehtml
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
165
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
166 self.assertEqual(ExampleMessage(spec).extract_content(
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
167 html2text=dehtml('dhtml').html2text), expected)
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
168
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
169 def testTextPlain(self):
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
170 self.TestExtraction('text/plain', ('foo\n', [], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
171
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
172 def testAttachedTextPlain(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
173 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
174 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
175 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
176 text/plain""",
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
177 ('foo\n',
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
178 [('foo.txt', 'text/plain', 'foo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
179
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
180 def testMultipartMixed(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
181 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
182 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
183 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
184 application/pdf""",
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
185 ('foo\n',
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
186 [('foo.pdf', 'application/pdf', 'foo\n')], False))
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
187
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
188 def testMultipartMixedHtml(self):
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
189 self.TestExtraction("""
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
190 multipart/mixed
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
191 text/html
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
192 application/pdf""",
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
193 ('bar\n',
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
194 [('bar.html', 'text/html',
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
195 '<html><body>bar</body></html>\n'),
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
196 ('foo.pdf', 'application/pdf', 'foo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
197
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
198 def testMultipartAlternative(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
199 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
200 multipart/alternative
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
201 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
202 application/pdf
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
203 """, ('foo\n', [('foo.pdf', 'application/pdf', 'foo\n')], False))
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
204
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
205 def testMultipartAlternativeHtml(self):
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
206 self.TestExtraction("""
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
207 multipart/alternative
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
208 text/html
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
209 application/pdf""",
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
210 ('bar\n',
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
211 [('bar.html', 'text/html',
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
212 '<html><body>bar</body></html>\n'),
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
213 ('foo.pdf', 'application/pdf', 'foo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
214
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
215 def testDeepMultipartAlternative(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
216 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
217 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
218 multipart/alternative
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
219 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
220 application/pdf
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
221 """, ('foo\n', [('foo.pdf', 'application/pdf', 'foo\n')], False))
3915
6b3919328381 support for receiving OpenPGP MIME messages (signed or encrypted)
Justus Pendleton <jpend@users.sourceforge.net>
parents: 1975
diff changeset
222
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
223 def testSignedText(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
224 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
225 multipart/signed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
226 text/plain
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
227 application/pgp-signature""", ('foo\n', [], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
228
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
229 def testSignedAttachments(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
230 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
231 multipart/signed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
232 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
233 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
234 application/pdf
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
235 application/pgp-signature""",
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
236 ('foo\n',
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
237 [('foo.pdf', 'application/pdf', 'foo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
238
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
239 def testAttachedSignature(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
240 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
241 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
242 text/plain
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
243 application/pgp-signature""",
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
244 ('foo\n',
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
245 [('foo.gpg', 'application/pgp-signature', 'foo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
246
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
247 def testMessageRfc822(self):
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
248 self.TestExtraction("""
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
249 multipart/mixed
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
250 message/rfc822""",
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
251 (None,
5305
e20f472fde7d issue2550799: provide basic support for handling html only emails
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
252 [('foo.eml', 'message/rfc822', 'Subject: foo\n\nfoo\n')], False))
1975
30a444b7b212 *** empty log message ***
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1873
diff changeset
253
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 110
diff changeset
254 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/