| 
									
										
										
										
											2024-11-12 15:59:19 +02:00
										 |  |  | # Copyright (C) 2002 Python Software Foundation | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | # Contact: email-sig@python.org | 
					
						
							|  |  |  | # email package unit tests for (optional) Asian codecs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-06 17:35:05 -04:00
										 |  |  | from test.test_email import TestEmailBase | 
					
						
							| 
									
										
										
										
											2009-03-30 23:12:30 +00:00
										 |  |  | from email.charset import Charset | 
					
						
							|  |  |  | from email.header import Header, decode_header | 
					
						
							|  |  |  | from email.message import Message | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # We're compatible with Python 2.3, but it doesn't have the built-in Asian | 
					
						
							|  |  |  | # codecs, so we have to skip all these tests. | 
					
						
							|  |  |  | try: | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |     str(b'foo', 'euc-jp') | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | except LookupError: | 
					
						
							| 
									
										
											  
											
												Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r70554 | benjamin.peterson | 2009-03-23 16:25:15 -0500 (Mon, 23 Mar 2009) | 1 line
  complain when there's no last exception
........
  r70588 | benjamin.peterson | 2009-03-24 17:56:32 -0500 (Tue, 24 Mar 2009) | 1 line
  fix newline issue in test summary
........
  r70589 | benjamin.peterson | 2009-03-24 18:07:07 -0500 (Tue, 24 Mar 2009) | 1 line
  another style nit
........
  r70598 | benjamin.peterson | 2009-03-25 16:24:04 -0500 (Wed, 25 Mar 2009) | 1 line
  add shorthands for expected failures and unexpected success
........
  r70605 | benjamin.peterson | 2009-03-26 11:32:23 -0500 (Thu, 26 Mar 2009) | 1 line
  remove uneeded function
........
  r70611 | benjamin.peterson | 2009-03-26 13:35:37 -0500 (Thu, 26 Mar 2009) | 1 line
  add much better tests for python version information parsing
........
  r70612 | benjamin.peterson | 2009-03-26 13:55:48 -0500 (Thu, 26 Mar 2009) | 1 line
  more and more implementations now support sys.subversion
........
  r70613 | benjamin.peterson | 2009-03-26 13:58:30 -0500 (Thu, 26 Mar 2009) | 1 line
  roll old test in with new one
........
  r70614 | benjamin.peterson | 2009-03-26 14:09:21 -0500 (Thu, 26 Mar 2009) | 1 line
  add support for PyPy
........
  r70615 | benjamin.peterson | 2009-03-26 14:58:18 -0500 (Thu, 26 Mar 2009) | 5 lines
  add some useful utilities for skipping tests with unittest's new skipping ability
  most significantly apply a modified portion of the patch from #4242 with
  patches for skipping implementation details
........
  r70616 | benjamin.peterson | 2009-03-26 15:05:50 -0500 (Thu, 26 Mar 2009) | 1 line
  rename TestCase.skip() to skipTest() because it causes annoying problems with trial #5571
........
  r70617 | benjamin.peterson | 2009-03-26 15:17:27 -0500 (Thu, 26 Mar 2009) | 1 line
  apply the second part of #4242's patch; classify all the implementation details in test_descr
........
  r70618 | benjamin.peterson | 2009-03-26 15:48:25 -0500 (Thu, 26 Mar 2009) | 1 line
  remove test_support.TestSkipped and just use unittest.SkipTest
........
  r70619 | benjamin.peterson | 2009-03-26 15:49:40 -0500 (Thu, 26 Mar 2009) | 1 line
  fix naming
........
  r70620 | benjamin.peterson | 2009-03-26 16:10:30 -0500 (Thu, 26 Mar 2009) | 1 line
  fix incorrect auto-translation of TestSkipped -> unittest.SkipTest
........
  r70621 | benjamin.peterson | 2009-03-26 16:11:16 -0500 (Thu, 26 Mar 2009) | 1 line
  must pass argument to get expected behavior ;)
........
  r70623 | benjamin.peterson | 2009-03-26 16:30:10 -0500 (Thu, 26 Mar 2009) | 1 line
  add missing import
........
  r70624 | benjamin.peterson | 2009-03-26 16:30:54 -0500 (Thu, 26 Mar 2009) | 1 line
  ** is required here
........
  r70626 | benjamin.peterson | 2009-03-26 16:40:29 -0500 (Thu, 26 Mar 2009) | 1 line
  update email tests to use SkipTest
........
  r70627 | benjamin.peterson | 2009-03-26 16:44:43 -0500 (Thu, 26 Mar 2009) | 1 line
  fix another name
........
											
										 
											2009-03-28 21:42:05 +00:00
										 |  |  |     raise unittest.SkipTest | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-06 17:35:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | class TestEmailAsianCodecs(TestEmailBase): | 
					
						
							|  |  |  |     def test_japanese_codecs(self): | 
					
						
							|  |  |  |         eq = self.ndiffAssertEqual | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |         jcode = "euc-jp" | 
					
						
							|  |  |  |         gcode = "iso-8859-1" | 
					
						
							|  |  |  |         j = Charset(jcode) | 
					
						
							|  |  |  |         g = Charset(gcode) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |         h = Header("Hello World!") | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |         jhello = str(b'\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc' | 
					
						
							|  |  |  |                      b'\xa5\xeb\xa5\xc9\xa1\xaa', jcode) | 
					
						
							|  |  |  |         ghello = str(b'Gr\xfc\xdf Gott!', gcode) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |         h.append(jhello, j) | 
					
						
							|  |  |  |         h.append(ghello, g) | 
					
						
							|  |  |  |         # BAW: This used to -- and maybe should -- fold the two iso-8859-1 | 
					
						
							|  |  |  |         # chunks into a single encoded word.  However it doesn't violate the | 
					
						
							|  |  |  |         # standard to have them as two encoded chunks and maybe it's | 
					
						
							|  |  |  |         # reasonable <wink> for each .append() call to result in a separate | 
					
						
							|  |  |  |         # encoded word. | 
					
						
							|  |  |  |         eq(h.encode(), """\
 | 
					
						
							|  |  |  | Hello World! =?iso-2022-jp?b?GyRCJU8lbSE8JW8hPCVrJUkhKhsoQg==?= | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |  =?iso-8859-1?q?Gr=FC=DF_Gott!?=""")
 | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |         eq(decode_header(h.encode()), | 
					
						
							| 
									
										
										
										
											2012-06-02 17:56:49 -04:00
										 |  |  |            [(b'Hello World! ', None), | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |             (b'\x1b$B%O%m!<%o!<%k%I!*\x1b(B', 'iso-2022-jp'), | 
					
						
							|  |  |  |             (b'Gr\xfc\xdf Gott!', gcode)]) | 
					
						
							|  |  |  |         subject_bytes = (b'test-ja \xa4\xd8\xc5\xea\xb9\xc6\xa4\xb5' | 
					
						
							|  |  |  |             b'\xa4\xec\xa4\xbf\xa5\xe1\xa1\xbc\xa5\xeb\xa4\xcf\xbb\xca\xb2' | 
					
						
							|  |  |  |             b'\xf1\xbc\xd4\xa4\xce\xbe\xb5\xc7\xa7\xa4\xf2\xc2\xd4\xa4\xc3' | 
					
						
							|  |  |  |             b'\xa4\xc6\xa4\xa4\xa4\xde\xa4\xb9') | 
					
						
							|  |  |  |         subject = str(subject_bytes, jcode) | 
					
						
							|  |  |  |         h = Header(subject, j, header_name="Subject") | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |         # test a very long header | 
					
						
							|  |  |  |         enc = h.encode() | 
					
						
							|  |  |  |         # TK: splitting point may differ by codec design and/or Header encoding | 
					
						
							|  |  |  |         eq(enc , """\
 | 
					
						
							|  |  |  | =?iso-2022-jp?b?dGVzdC1qYSAbJEIkWEVqOUYkNSRsJD8lYSE8JWskTztKGyhC?= | 
					
						
							|  |  |  |  =?iso-2022-jp?b?GyRCMnE8VCROPjVHJyRyQlQkQyRGJCQkXiQ5GyhC?=""")
 | 
					
						
							|  |  |  |         # TK: full decode comparison | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |         eq(str(h).encode(jcode), subject_bytes) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_payload_encoding_utf8(self): | 
					
						
							|  |  |  |         jhello = str(b'\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc' | 
					
						
							|  |  |  |                      b'\xa5\xeb\xa5\xc9\xa1\xaa', 'euc-jp') | 
					
						
							|  |  |  |         msg = Message() | 
					
						
							|  |  |  |         msg.set_payload(jhello, 'utf-8') | 
					
						
							|  |  |  |         ustr = msg.get_payload(decode=True).decode(msg.get_content_charset()) | 
					
						
							|  |  |  |         self.assertEqual(jhello, ustr) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_payload_encoding(self): | 
					
						
							|  |  |  |         jcode  = 'euc-jp' | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |         jhello = str(b'\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc' | 
					
						
							|  |  |  |                      b'\xa5\xeb\xa5\xc9\xa1\xaa', jcode) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |         msg = Message() | 
					
						
							|  |  |  |         msg.set_payload(jhello, jcode) | 
					
						
							| 
									
										
										
										
											2011-03-15 12:20:02 -04:00
										 |  |  |         ustr = msg.get_payload(decode=True).decode(msg.get_content_charset()) | 
					
						
							|  |  |  |         self.assertEqual(jhello, ustr) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-06 17:35:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2011-03-21 17:17:06 -04:00
										 |  |  |     unittest.main() |