mirror of
https://github.com/python/cpython.git
synced 2025-01-19 06:54:52 +08:00
The email package's tests live much better in a subpackage
(i.e. email.test), so move the guts of them here from Lib/test. The latter directory will retain stubs to run the email.test tests using Python's standard regression test. test_email_torture.py is a torture tester which will not run under Python's test suite because I don't want to commit megs of data to that project (it will fail cleanly there). When run under the mimelib project it'll stress test the package with megs of message samples collected from various locations in the wild.
This commit is contained in:
parent
629038093c
commit
190390b026
2
Lib/email/test/__init__.py
Normal file
2
Lib/email/test/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
# Copyright (C) 2002 Python Software Foundation
|
||||
# Author: barry@zope.com (Barry Warsaw)
|
2078
Lib/email/test/test_email.py
Normal file
2078
Lib/email/test/test_email.py
Normal file
File diff suppressed because it is too large
Load Diff
70
Lib/email/test/test_email_codecs.py
Normal file
70
Lib/email/test/test_email_codecs.py
Normal file
@ -0,0 +1,70 @@
|
||||
# Copyright (C) 2002 Python Software Foundation
|
||||
# email package unit tests for (optional) Asian codecs
|
||||
|
||||
import unittest
|
||||
from test.test_support import TestSkipped, run_unittest
|
||||
|
||||
from email.test.test_email import TestEmailBase
|
||||
from email.Charset import Charset
|
||||
from email.Header import Header, decode_header
|
||||
|
||||
# See if we have the Japanese codecs package installed
|
||||
try:
|
||||
unicode('foo', 'japanese.iso-2022-jp')
|
||||
except LookupError:
|
||||
raise TestSkipped, 'Optional Japanese codecs not installed'
|
||||
|
||||
|
||||
|
||||
class TestEmailAsianCodecs(TestEmailBase):
|
||||
def test_japanese_codecs(self):
|
||||
eq = self.ndiffAssertEqual
|
||||
j = Charset("euc-jp")
|
||||
g = Charset("iso-8859-1")
|
||||
h = Header("Hello World!")
|
||||
jhello = '\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc\xa5\xeb\xa5\xc9\xa1\xaa'
|
||||
ghello = 'Gr\xfc\xdf Gott!'
|
||||
h.append(jhello, j)
|
||||
h.append(ghello, g)
|
||||
eq(h.encode(), 'Hello World! =?iso-2022-jp?b?GyRCJU8lbSE8JW8hPCVrJUkhKhsoQg==?=\n =?iso-8859-1?q?Gr=FC=DF_Gott!?=')
|
||||
eq(decode_header(h.encode()),
|
||||
[('Hello World!', None),
|
||||
('\x1b$B%O%m!<%o!<%k%I!*\x1b(B', 'iso-2022-jp'),
|
||||
('Gr\xfc\xdf Gott!', 'iso-8859-1')])
|
||||
long = 'test-ja \xa4\xd8\xc5\xea\xb9\xc6\xa4\xb5\xa4\xec\xa4\xbf\xa5\xe1\xa1\xbc\xa5\xeb\xa4\xcf\xbb\xca\xb2\xf1\xbc\xd4\xa4\xce\xbe\xb5\xc7\xa7\xa4\xf2\xc2\xd4\xa4\xc3\xa4\xc6\xa4\xa4\xa4\xde\xa4\xb9'
|
||||
h = Header(long, j, header_name="Subject")
|
||||
# test a very long header
|
||||
enc = h.encode()
|
||||
# BAW: The following used to pass. Sadly, the test afterwards is what
|
||||
# happens now. I've no idea which is right. Please, any Japanese and
|
||||
# RFC 2047 experts, please verify!
|
||||
## eq(enc, '''\
|
||||
##=?iso-2022-jp?b?dGVzdC1qYSAbJEIkWEVqOUYkNSRsJD8lYRsoQg==?=
|
||||
## =?iso-2022-jp?b?GyRCITwlayRPO0oycTxUJE4+NRsoQg==?=
|
||||
## =?iso-2022-jp?b?GyRCRyckckJUJEMkRiQkJF4kORsoQg==?=''')
|
||||
eq(enc, """\
|
||||
=?iso-2022-jp?b?dGVzdC1qYSAbJEIkWEVqOUYkNSRsJD8lYRsoQg==?=
|
||||
=?iso-2022-jp?b?GyRCITwlayRPO0oycTxUJE4+NUcnJHJCVCRDJEYkJCReJDkbKEI=?=""")
|
||||
# BAW: same deal here. :(
|
||||
## self.assertEqual(
|
||||
## decode_header(enc),
|
||||
## [("test-ja \x1b$B$XEj9F$5$l$?%a\x1b(B\x1b$B!<%k$O;J2q<T$N>5\x1b(B\x1b$BG'$rBT$C$F$$$^$9\x1b(B", 'iso-2022-jp')])
|
||||
self.assertEqual(
|
||||
decode_header(enc),
|
||||
[("test-ja \x1b$B$XEj9F$5$l$?%a\x1b(B\x1b$B!<%k$O;J2q<T$N>5G'$rBT$C$F$$$^$9\x1b(B", 'iso-2022-jp')])
|
||||
|
||||
|
||||
|
||||
def suite():
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTest(unittest.makeSuite(TestEmailAsianCodecs))
|
||||
return suite
|
||||
|
||||
|
||||
def test_main():
|
||||
run_unittest(TestEmailAsianCodecs)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(defaultTest='suite')
|
140
Lib/email/test/test_email_torture.py
Normal file
140
Lib/email/test/test_email_torture.py
Normal file
@ -0,0 +1,140 @@
|
||||
# Copyright (C) 2002 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 cStringIO import StringIO
|
||||
from types import ListType
|
||||
from test_email import TestEmailBase
|
||||
|
||||
try:
|
||||
import test_support
|
||||
TestSkipped = test_support.TestSkipped
|
||||
except ImportError:
|
||||
test_support = None
|
||||
TestSkipped = ImportError
|
||||
|
||||
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)
|
||||
|
||||
# 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
|
||||
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\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)
|
||||
eq(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
|
||||
binary
|
||||
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')
|
File diff suppressed because it is too large
Load Diff
@ -1,68 +1,8 @@
|
||||
# Copyright (C) 2002 Python Software Foundation
|
||||
# email package unit tests for (optional) Asian codecs
|
||||
|
||||
import unittest
|
||||
import test_support
|
||||
from test_email import TestEmailBase
|
||||
|
||||
from email.Charset import Charset
|
||||
from email.Header import Header, decode_header
|
||||
|
||||
# See if we have the Japanese codecs package installed
|
||||
try:
|
||||
unicode('foo', 'japanese.iso-2022-jp')
|
||||
except LookupError:
|
||||
raise test_support.TestSkipped, 'Optional Japanese codecs not installed'
|
||||
|
||||
|
||||
|
||||
class TestEmailAsianCodecs(TestEmailBase):
|
||||
def test_japanese_codecs(self):
|
||||
eq = self.ndiffAssertEqual
|
||||
j = Charset("euc-jp")
|
||||
g = Charset("iso-8859-1")
|
||||
h = Header("Hello World!")
|
||||
jhello = '\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc\xa5\xeb\xa5\xc9\xa1\xaa'
|
||||
ghello = 'Gr\xfc\xdf Gott!'
|
||||
h.append(jhello, j)
|
||||
h.append(ghello, g)
|
||||
eq(h.encode(), 'Hello World! =?iso-2022-jp?b?GyRCJU8lbSE8JW8hPCVrJUkhKhsoQg==?=\n =?iso-8859-1?q?Gr=FC=DF_Gott!?=')
|
||||
eq(decode_header(h.encode()),
|
||||
[('Hello World!', None),
|
||||
('\x1b$B%O%m!<%o!<%k%I!*\x1b(B', 'iso-2022-jp'),
|
||||
('Gr\xfc\xdf Gott!', 'iso-8859-1')])
|
||||
long = 'test-ja \xa4\xd8\xc5\xea\xb9\xc6\xa4\xb5\xa4\xec\xa4\xbf\xa5\xe1\xa1\xbc\xa5\xeb\xa4\xcf\xbb\xca\xb2\xf1\xbc\xd4\xa4\xce\xbe\xb5\xc7\xa7\xa4\xf2\xc2\xd4\xa4\xc3\xa4\xc6\xa4\xa4\xa4\xde\xa4\xb9'
|
||||
h = Header(long, j, header_name="Subject")
|
||||
# test a very long header
|
||||
enc = h.encode()
|
||||
# BAW: The following used to pass. Sadly, the test afterwards is what
|
||||
# happens now. I've no idea which is right. Please, any Japanese and
|
||||
# RFC 2047 experts, please verify!
|
||||
## eq(enc, '''\
|
||||
##=?iso-2022-jp?b?dGVzdC1qYSAbJEIkWEVqOUYkNSRsJD8lYRsoQg==?=
|
||||
## =?iso-2022-jp?b?GyRCITwlayRPO0oycTxUJE4+NRsoQg==?=
|
||||
## =?iso-2022-jp?b?GyRCRyckckJUJEMkRiQkJF4kORsoQg==?=''')
|
||||
eq(enc, """\
|
||||
=?iso-2022-jp?b?dGVzdC1qYSAbJEIkWEVqOUYkNSRsJD8lYRsoQg==?=
|
||||
=?iso-2022-jp?b?GyRCITwlayRPO0oycTxUJE4+NUcnJHJCVCRDJEYkJCReJDkbKEI=?=""")
|
||||
# BAW: same deal here. :(
|
||||
## self.assertEqual(
|
||||
## decode_header(enc),
|
||||
## [("test-ja \x1b$B$XEj9F$5$l$?%a\x1b(B\x1b$B!<%k$O;J2q<T$N>5\x1b(B\x1b$BG'$rBT$C$F$$$^$9\x1b(B", 'iso-2022-jp')])
|
||||
self.assertEqual(
|
||||
decode_header(enc),
|
||||
[("test-ja \x1b$B$XEj9F$5$l$?%a\x1b(B\x1b$B!<%k$O;J2q<T$N>5G'$rBT$C$F$$$^$9\x1b(B", 'iso-2022-jp')])
|
||||
|
||||
|
||||
|
||||
def suite():
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTest(unittest.makeSuite(TestEmailAsianCodecs))
|
||||
return suite
|
||||
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(TestEmailAsianCodecs)
|
||||
# The specific tests now live in Lib/email/test
|
||||
from email.test.test_email_codecs import *
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user