test_email.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 1,770 行 · 第 1/5 页

PY
1,770
字号
        # headers, i.e. a bunch of Message objects.        dsn1 = subpart.get_payload(0)        unless(isinstance(dsn1, Message))        eq(dsn1['original-envelope-id'], '0GK500B4HD0888@cougar.noc.ucla.edu')        eq(dsn1.get_param('dns', header='reporting-mta'), '')        # Try a missing one <wink>        eq(dsn1.get_param('nsd', header='reporting-mta'), None)        dsn2 = subpart.get_payload(1)        unless(isinstance(dsn2, Message))        eq(dsn2['action'], 'failed')        eq(dsn2.get_params(header='original-recipient'),           [('rfc822', ''), ('jangel1@cougar.noc.ucla.edu', '')])        eq(dsn2.get_param('rfc822', header='final-recipient'), '')        # Subpart 3 is the original message        subpart = msg.get_payload(2)        eq(subpart.get_type(), 'message/rfc822')        payload = subpart.get_payload()        unless(isinstance(payload, ListType))        eq(len(payload), 1)        subsubpart = payload[0]        unless(isinstance(subsubpart, Message))        eq(subsubpart.get_type(), 'text/plain')        eq(subsubpart['message-id'],           '<002001c144a6$8752e060$56104586@oxy.edu>')    def test_epilogue(self):        eq = self.ndiffAssertEqual        fp = openfile('msg_21.txt')        try:            text = fp.read()        finally:            fp.close()        msg = Message()        msg['From'] = 'aperson@dom.ain'        msg['To'] = 'bperson@dom.ain'        msg['Subject'] = 'Test'        msg.preamble = 'MIME message\n'        msg.epilogue = 'End of MIME message\n'        msg1 = MIMEText('One')        msg2 = MIMEText('Two')        msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')        msg.attach(msg1)        msg.attach(msg2)        sfp = StringIO()        g = Generator(sfp)        g.flatten(msg)        eq(sfp.getvalue(), text)    def test_no_nl_preamble(self):        eq = self.ndiffAssertEqual        msg = Message()        msg['From'] = 'aperson@dom.ain'        msg['To'] = 'bperson@dom.ain'        msg['Subject'] = 'Test'        msg.preamble = 'MIME message'        msg.epilogue = ''        msg1 = MIMEText('One')        msg2 = MIMEText('Two')        msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')        msg.attach(msg1)        msg.attach(msg2)        eq(msg.as_string(), """\From: aperson@dom.ainTo: bperson@dom.ainSubject: TestContent-Type: multipart/mixed; boundary="BOUNDARY"MIME message--BOUNDARYContent-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitOne--BOUNDARYContent-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitTwo--BOUNDARY--""")    def test_default_type(self):        eq = self.assertEqual        fp = openfile('msg_30.txt')        try:            msg = email.message_from_file(fp)        finally:            fp.close()        container1 = msg.get_payload(0)        eq(container1.get_default_type(), 'message/rfc822')        eq(container1.get_type(), None)        container2 = msg.get_payload(1)        eq(container2.get_default_type(), 'message/rfc822')        eq(container2.get_type(), None)        container1a = container1.get_payload(0)        eq(container1a.get_default_type(), 'text/plain')        eq(container1a.get_type(), 'text/plain')        container2a = container2.get_payload(0)        eq(container2a.get_default_type(), 'text/plain')        eq(container2a.get_type(), 'text/plain')    def test_default_type_with_explicit_container_type(self):        eq = self.assertEqual        fp = openfile('msg_28.txt')        try:            msg = email.message_from_file(fp)        finally:            fp.close()        container1 = msg.get_payload(0)        eq(container1.get_default_type(), 'message/rfc822')        eq(container1.get_type(), 'message/rfc822')        container2 = msg.get_payload(1)        eq(container2.get_default_type(), 'message/rfc822')        eq(container2.get_type(), 'message/rfc822')        container1a = container1.get_payload(0)        eq(container1a.get_default_type(), 'text/plain')        eq(container1a.get_type(), 'text/plain')        container2a = container2.get_payload(0)        eq(container2a.get_default_type(), 'text/plain')        eq(container2a.get_type(), 'text/plain')    def test_default_type_non_parsed(self):        eq = self.assertEqual        neq = self.ndiffAssertEqual        # Set up container        container = MIMEMultipart('digest', 'BOUNDARY')        container.epilogue = '\n'        # Set up subparts        subpart1a = MIMEText('message 1\n')        subpart2a = MIMEText('message 2\n')        subpart1 = MIMEMessage(subpart1a)        subpart2 = MIMEMessage(subpart2a)        container.attach(subpart1)        container.attach(subpart2)        eq(subpart1.get_type(), 'message/rfc822')        eq(subpart1.get_default_type(), 'message/rfc822')        eq(subpart2.get_type(), 'message/rfc822')        eq(subpart2.get_default_type(), 'message/rfc822')        neq(container.as_string(0), '''\Content-Type: multipart/digest; boundary="BOUNDARY"MIME-Version: 1.0--BOUNDARYContent-Type: message/rfc822MIME-Version: 1.0Content-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitmessage 1--BOUNDARYContent-Type: message/rfc822MIME-Version: 1.0Content-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitmessage 2--BOUNDARY--''')        del subpart1['content-type']        del subpart1['mime-version']        del subpart2['content-type']        del subpart2['mime-version']        eq(subpart1.get_type(), None)        eq(subpart1.get_default_type(), 'message/rfc822')        eq(subpart2.get_type(), None)        eq(subpart2.get_default_type(), 'message/rfc822')        neq(container.as_string(0), '''\Content-Type: multipart/digest; boundary="BOUNDARY"MIME-Version: 1.0--BOUNDARYContent-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitmessage 1--BOUNDARYContent-Type: text/plain; charset="us-ascii"MIME-Version: 1.0Content-Transfer-Encoding: 7bitmessage 2--BOUNDARY--''')# A general test of parser->model->generator idempotency.  IOW, read a message# in, parse it into a message object tree, then without touching the tree,# regenerate the plain text.  The original text and the transformed text# should be identical.  Note: that we ignore the Unix-From since that may# contain a changed date.class TestIdempotent(TestEmailBase):    def _msgobj(self, filename):        fp = openfile(filename)        try:            data = fp.read()        finally:            fp.close()        msg = email.message_from_string(data)        return msg, data    def _idempotent(self, msg, text):        eq = self.ndiffAssertEqual        s = StringIO()        g = Generator(s, maxheaderlen=0)        g.flatten(msg)        eq(text, s.getvalue())    def test_parse_text_message(self):        eq = self.assertEquals        msg, text = self._msgobj('msg_01.txt')        eq(msg.get_type(), 'text/plain')        eq(msg.get_main_type(), 'text')        eq(msg.get_subtype(), 'plain')        eq(msg.get_params()[1], ('charset', 'us-ascii'))        eq(msg.get_param('charset'), 'us-ascii')        eq(msg.preamble, None)        eq(msg.epilogue, None)        self._idempotent(msg, text)    def test_parse_untyped_message(self):        eq = self.assertEquals        msg, text = self._msgobj('msg_03.txt')        eq(msg.get_type(), None)        eq(msg.get_params(), None)        eq(msg.get_param('charset'), None)        self._idempotent(msg, text)    def test_simple_multipart(self):        msg, text = self._msgobj('msg_04.txt')        self._idempotent(msg, text)    def test_MIME_digest(self):        msg, text = self._msgobj('msg_02.txt')        self._idempotent(msg, text)    def test_long_header(self):        msg, text = self._msgobj('msg_27.txt')        self._idempotent(msg, text)    def test_MIME_digest_with_part_headers(self):        msg, text = self._msgobj('msg_28.txt')        self._idempotent(msg, text)    def test_mixed_with_image(self):        msg, text = self._msgobj('msg_06.txt')        self._idempotent(msg, text)    def test_multipart_report(self):        msg, text = self._msgobj('msg_05.txt')        self._idempotent(msg, text)    def test_dsn(self):        msg, text = self._msgobj('msg_16.txt')        self._idempotent(msg, text)    def test_preamble_epilogue(self):        msg, text = self._msgobj('msg_21.txt')        self._idempotent(msg, text)    def test_multipart_one_part(self):        msg, text = self._msgobj('msg_23.txt')        self._idempotent(msg, text)    def test_multipart_no_parts(self):        msg, text = self._msgobj('msg_24.txt')        self._idempotent(msg, text)    def test_no_start_boundary(self):        msg, text = self._msgobj('msg_31.txt')        self._idempotent(msg, text)    def test_rfc2231_charset(self):        msg, text = self._msgobj('msg_32.txt')        self._idempotent(msg, text)    def test_more_rfc2231_parameters(self):        msg, text = self._msgobj('msg_33.txt')        self._idempotent(msg, text)    def test_text_plain_in_a_multipart_digest(self):        msg, text = self._msgobj('msg_34.txt')        self._idempotent(msg, text)    def test_content_type(self):        eq = self.assertEquals        unless = self.failUnless        # Get a message object and reset the seek pointer for other tests        msg, text = self._msgobj('msg_05.txt')        eq(msg.get_type(), 'multipart/report')        # Test the Content-Type: parameters        params = {}        for pk, pv in msg.get_params():            params[pk] = pv        eq(params['report-type'], 'delivery-status')        eq(params['boundary'], 'D1690A7AC1.996856090/mail.example.com')        eq(msg.preamble, 'This is a MIME-encapsulated message.\n\n')        eq(msg.epilogue, '\n\n')        eq(len(msg.get_payload()), 3)        # Make sure the subparts are what we expect        msg1 = msg.get_payload(0)        eq(msg1.get_type(), 'text/plain')        eq(msg1.get_payload(), 'Yadda yadda yadda\n')        msg2 = msg.get_payload(1)        eq(msg2.get_type(), None)        eq(msg2.get_payload(), 'Yadda yadda yadda\n')        msg3 = msg.get_payload(2)        eq(msg3.get_type(), 'message/rfc822')        self.failUnless(isinstance(msg3, Message))        payload = msg3.get_payload()        unless(isinstance(payload, ListType))        eq(len(payload), 1)        msg4 = payload[0]        unless(isinstance(msg4, Message))        eq(msg4.get_payload(), 'Yadda yadda yadda\n')    def test_parser(self):        eq = self.assertEquals        unless = self.failUnless        msg, text = self._msgobj('msg_06.txt')        # Check some of the outer headers        eq(msg.get_type(), 'message/rfc822')        # Make sure the payload is a list of exactly one sub-Message, and that        # that submessage has a type of text/plain        payload = msg.get_payload()        unless(isinstance(payload, ListType))        eq(len(payload), 1)        msg1 = payload[0]        self.failUnless(isinstance(msg1, Message))        eq(msg1.get_type(), 'text/plain')        self.failUnless(isinstance(msg1.get_payload(), StringType))        eq(msg1.get_payload(), '\n')# Test various other bits of the package's functionalityclass TestMiscellaneous(unittest.TestCase):    def test_message_from_string(self):        fp = openfile('msg_01.txt')        try: 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?