mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00

Completely get rid of StringIO.py and cStringIO.c. I had to fix a few tests and modules beyond what Christian did, and invent a few conventions. E.g. in elementtree, I chose to write/return Unicode strings whe no encoding is given, but bytes when an explicit encoding is given. Also mimetools was made to always assume binary files.
136 lines
3.6 KiB
Python
136 lines
3.6 KiB
Python
# Copyright (C) 2002-2004 Python Software Foundation
|
||
#
|
||
# A torture test of the email package. This should not be run as part of the
|
||
# standard Python test suite since it requires several meg of email messages
|
||
# collected in the wild. These source messages are not checked into the
|
||
# Python distro, but are available as part of the standalone email package at
|
||
# http://sf.net/projects/mimelib
|
||
|
||
import sys
|
||
import os
|
||
import unittest
|
||
from io import StringIO
|
||
from types import ListType
|
||
|
||
from email.test.test_email import TestEmailBase
|
||
from test.test_support import TestSkipped
|
||
|
||
import email
|
||
from email import __file__ as testfile
|
||
from email.Iterators import _structure
|
||
|
||
def openfile(filename):
|
||
from os.path import join, dirname, abspath
|
||
path = abspath(join(dirname(testfile), os.pardir, 'moredata', filename))
|
||
return open(path, 'r')
|
||
|
||
# Prevent this test from running in the Python distro
|
||
try:
|
||
openfile('crispin-torture.txt')
|
||
except IOError:
|
||
raise TestSkipped
|
||
|
||
|
||
|
||
class TortureBase(TestEmailBase):
|
||
def _msgobj(self, filename):
|
||
fp = openfile(filename)
|
||
try:
|
||
msg = email.message_from_file(fp)
|
||
finally:
|
||
fp.close()
|
||
return msg
|
||
|
||
|
||
|
||
class TestCrispinTorture(TortureBase):
|
||
# Mark Crispin's torture test from the SquirrelMail project
|
||
def test_mondo_message(self):
|
||
eq = self.assertEqual
|
||
neq = self.ndiffAssertEqual
|
||
msg = self._msgobj('crispin-torture.txt')
|
||
payload = msg.get_payload()
|
||
eq(type(payload), ListType)
|
||
eq(len(payload), 12)
|
||
eq(msg.preamble, None)
|
||
eq(msg.epilogue, '\n')
|
||
# Probably the best way to verify the message is parsed correctly is to
|
||
# dump its structure and compare it against the known structure.
|
||
fp = StringIO()
|
||
_structure(msg, fp=fp)
|
||
neq(fp.getvalue(), """\
|
||
multipart/mixed
|
||
text/plain
|
||
message/rfc822
|
||
multipart/alternative
|
||
text/plain
|
||
multipart/mixed
|
||
text/richtext
|
||
application/andrew-inset
|
||
message/rfc822
|
||
audio/basic
|
||
audio/basic
|
||
image/pbm
|
||
message/rfc822
|
||
multipart/mixed
|
||
multipart/mixed
|
||
text/plain
|
||
audio/x-sun
|
||
multipart/mixed
|
||
image/gif
|
||
image/gif
|
||
application/x-be2
|
||
application/atomicmail
|
||
audio/x-sun
|
||
message/rfc822
|
||
multipart/mixed
|
||
text/plain
|
||
image/pgm
|
||
text/plain
|
||
message/rfc822
|
||
multipart/mixed
|
||
text/plain
|
||
image/pbm
|
||
message/rfc822
|
||
application/postscript
|
||
image/gif
|
||
message/rfc822
|
||
multipart/mixed
|
||
audio/basic
|
||
audio/basic
|
||
message/rfc822
|
||
multipart/mixed
|
||
application/postscript
|
||
text/plain
|
||
message/rfc822
|
||
multipart/mixed
|
||
text/plain
|
||
multipart/parallel
|
||
image/gif
|
||
audio/basic
|
||
application/atomicmail
|
||
message/rfc822
|
||
audio/x-sun
|
||
""")
|
||
|
||
|
||
def _testclasses():
|
||
mod = sys.modules[__name__]
|
||
return [getattr(mod, name) for name in dir(mod) if name.startswith('Test')]
|
||
|
||
|
||
def suite():
|
||
suite = unittest.TestSuite()
|
||
for testclass in _testclasses():
|
||
suite.addTest(unittest.makeSuite(testclass))
|
||
return suite
|
||
|
||
|
||
def test_main():
|
||
for testclass in _testclasses():
|
||
test_support.run_unittest(testclass)
|
||
|
||
|
||
|
||
if __name__ == '__main__':
|
||
unittest.main(defaultTest='suite')
|