summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_email/test_pickleable.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2012-05-31 01:53:40 (GMT)
committerR David Murray <rdmurray@bitdance.com>2012-05-31 01:53:40 (GMT)
commit56517e5cb91c896024934a520d365d6e275eb1ad (patch)
tree21eb85c9393663238a595cf25d30744150745d02 /Lib/test/test_email/test_pickleable.py
parent01d7058d6acaf30441bf211580ba9c8d03b3c3c5 (diff)
downloadcpython-56517e5cb91c896024934a520d365d6e275eb1ad.zip
cpython-56517e5cb91c896024934a520d365d6e275eb1ad.tar.gz
cpython-56517e5cb91c896024934a520d365d6e275eb1ad.tar.bz2
Make parameterized tests in email less hackish.
Or perhaps more hackish, depending on your perspective. But at least this way it is now possible to run the individual tests using the unittest CLI.
Diffstat (limited to 'Lib/test/test_email/test_pickleable.py')
-rw-r--r--Lib/test/test_email/test_pickleable.py69
1 files changed, 26 insertions, 43 deletions
diff --git a/Lib/test/test_email/test_pickleable.py b/Lib/test/test_email/test_pickleable.py
index 3a5bd11..09477e0 100644
--- a/Lib/test/test_email/test_pickleable.py
+++ b/Lib/test/test_email/test_pickleable.py
@@ -6,83 +6,66 @@ import email
import email.message
from email import policy
from email.headerregistry import HeaderRegistry
-from test.test_email import TestEmailBase
+from test.test_email import TestEmailBase, Parameterized
-class TestPickleCopyHeader(TestEmailBase):
+class TestPickleCopyHeader(TestEmailBase, metaclass=Parameterized):
header_factory = HeaderRegistry()
unstructured = header_factory('subject', 'this is a test')
- def _test_deepcopy(self, name, value):
+ header_params = {
+ 'subject': ('subject', 'this is a test'),
+ 'from': ('from', 'frodo@mordor.net'),
+ 'to': ('to', 'a: k@b.com, y@z.com;, j@f.com'),
+ 'date': ('date', 'Tue, 29 May 2012 09:24:26 +1000'),
+ }
+
+ def header_as_deepcopy(self, name, value):
header = self.header_factory(name, value)
h = copy.deepcopy(header)
self.assertEqual(str(h), str(header))
- def _test_pickle(self, name, value):
+ def header_as_pickle(self, name, value):
header = self.header_factory(name, value)
p = pickle.dumps(header)
h = pickle.loads(p)
self.assertEqual(str(h), str(header))
- headers = (
- ('subject', 'this is a test'),
- ('from', 'frodo@mordor.net'),
- ('to', 'a: k@b.com, y@z.com;, j@f.com'),
- ('date', 'Tue, 29 May 2012 09:24:26 +1000'),
- )
-
- for header in headers:
- locals()['test_deepcopy_'+header[0]] = (
- lambda self, header=header:
- self._test_deepcopy(*header))
-
- for header in headers:
- locals()['test_pickle_'+header[0]] = (
- lambda self, header=header:
- self._test_pickle(*header))
+class TestPickleCopyMessage(TestEmailBase, metaclass=Parameterized):
-class TestPickleCopyMessage(TestEmailBase):
-
- msgs = {}
+ # Message objects are a sequence, so we have to make them a one-tuple in
+ # msg_params so they get passed to the parameterized test method as a
+ # single argument instead of as a list of headers.
+ msg_params = {}
# Note: there will be no custom header objects in the parsed message.
- msgs['parsed'] = email.message_from_string(textwrap.dedent("""\
+ msg_params['parsed'] = (email.message_from_string(textwrap.dedent("""\
Date: Tue, 29 May 2012 09:24:26 +1000
From: frodo@mordor.net
To: bilbo@underhill.org
Subject: help
I think I forgot the ring.
- """), policy=policy.default)
+ """), policy=policy.default),)
- msgs['created'] = email.message.Message(policy=policy.default)
- msgs['created']['Date'] = 'Tue, 29 May 2012 09:24:26 +1000'
- msgs['created']['From'] = 'frodo@mordor.net'
- msgs['created']['To'] = 'bilbo@underhill.org'
- msgs['created']['Subject'] = 'help'
- msgs['created'].set_payload('I think I forgot the ring.')
+ msg_params['created'] = (email.message.Message(policy=policy.default),)
+ msg_params['created'][0]['Date'] = 'Tue, 29 May 2012 09:24:26 +1000'
+ msg_params['created'][0]['From'] = 'frodo@mordor.net'
+ msg_params['created'][0]['To'] = 'bilbo@underhill.org'
+ msg_params['created'][0]['Subject'] = 'help'
+ msg_params['created'][0].set_payload('I think I forgot the ring.')
- def _test_deepcopy(self, msg):
+ def msg_as_deepcopy(self, msg):
msg2 = copy.deepcopy(msg)
self.assertEqual(msg2.as_string(), msg.as_string())
- def _test_pickle(self, msg):
+ def msg_as_pickle(self, msg):
p = pickle.dumps(msg)
msg2 = pickle.loads(p)
self.assertEqual(msg2.as_string(), msg.as_string())
- for name, msg in msgs.items():
- locals()['test_deepcopy_'+name] = (
- lambda self, msg=msg:
- self._test_deepcopy(msg))
-
- for name, msg in msgs.items():
- locals()['test_pickle_'+name] = (
- lambda self, msg=msg:
- self._test_pickle(msg))
-
if __name__ == '__main__':
unittest.main()