17db96d56Sopenharmony_ciimport unittest
27db96d56Sopenharmony_ciimport textwrap
37db96d56Sopenharmony_ciimport copy
47db96d56Sopenharmony_ciimport pickle
57db96d56Sopenharmony_ciimport email
67db96d56Sopenharmony_ciimport email.message
77db96d56Sopenharmony_cifrom email import policy
87db96d56Sopenharmony_cifrom email.headerregistry import HeaderRegistry
97db96d56Sopenharmony_cifrom test.test_email import TestEmailBase, parameterize
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci@parameterize
137db96d56Sopenharmony_ciclass TestPickleCopyHeader(TestEmailBase):
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci    header_factory = HeaderRegistry()
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci    unstructured = header_factory('subject', 'this is a test')
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci    header_params = {
207db96d56Sopenharmony_ci        'subject': ('subject', 'this is a test'),
217db96d56Sopenharmony_ci        'from':    ('from',    'frodo@mordor.net'),
227db96d56Sopenharmony_ci        'to':      ('to',      'a: k@b.com, y@z.com;, j@f.com'),
237db96d56Sopenharmony_ci        'date':    ('date',    'Tue, 29 May 2012 09:24:26 +1000'),
247db96d56Sopenharmony_ci        }
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci    def header_as_deepcopy(self, name, value):
277db96d56Sopenharmony_ci        header = self.header_factory(name, value)
287db96d56Sopenharmony_ci        h = copy.deepcopy(header)
297db96d56Sopenharmony_ci        self.assertEqual(str(h), str(header))
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci    def header_as_pickle(self, name, value):
327db96d56Sopenharmony_ci        header = self.header_factory(name, value)
337db96d56Sopenharmony_ci        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
347db96d56Sopenharmony_ci            p = pickle.dumps(header, proto)
357db96d56Sopenharmony_ci            h = pickle.loads(p)
367db96d56Sopenharmony_ci            self.assertEqual(str(h), str(header))
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci@parameterize
407db96d56Sopenharmony_ciclass TestPickleCopyMessage(TestEmailBase):
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci    # Message objects are a sequence, so we have to make them a one-tuple in
437db96d56Sopenharmony_ci    # msg_params so they get passed to the parameterized test method as a
447db96d56Sopenharmony_ci    # single argument instead of as a list of headers.
457db96d56Sopenharmony_ci    msg_params = {}
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci    # Note: there will be no custom header objects in the parsed message.
487db96d56Sopenharmony_ci    msg_params['parsed'] = (email.message_from_string(textwrap.dedent("""\
497db96d56Sopenharmony_ci        Date: Tue, 29 May 2012 09:24:26 +1000
507db96d56Sopenharmony_ci        From: frodo@mordor.net
517db96d56Sopenharmony_ci        To: bilbo@underhill.org
527db96d56Sopenharmony_ci        Subject: help
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci        I think I forgot the ring.
557db96d56Sopenharmony_ci        """), policy=policy.default),)
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci    msg_params['created'] = (email.message.Message(policy=policy.default),)
587db96d56Sopenharmony_ci    msg_params['created'][0]['Date'] = 'Tue, 29 May 2012 09:24:26 +1000'
597db96d56Sopenharmony_ci    msg_params['created'][0]['From'] = 'frodo@mordor.net'
607db96d56Sopenharmony_ci    msg_params['created'][0]['To'] = 'bilbo@underhill.org'
617db96d56Sopenharmony_ci    msg_params['created'][0]['Subject'] = 'help'
627db96d56Sopenharmony_ci    msg_params['created'][0].set_payload('I think I forgot the ring.')
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci    def msg_as_deepcopy(self, msg):
657db96d56Sopenharmony_ci        msg2 = copy.deepcopy(msg)
667db96d56Sopenharmony_ci        self.assertEqual(msg2.as_string(), msg.as_string())
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci    def msg_as_pickle(self, msg):
697db96d56Sopenharmony_ci        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
707db96d56Sopenharmony_ci            p = pickle.dumps(msg, proto)
717db96d56Sopenharmony_ci            msg2 = pickle.loads(p)
727db96d56Sopenharmony_ci            self.assertEqual(msg2.as_string(), msg.as_string())
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ciif __name__ == '__main__':
767db96d56Sopenharmony_ci    unittest.main()
77