| 
									
										
										
										
											2009-05-27 06:50:31 +00:00
										 |  |  | from collections import OrderedDict | 
					
						
							| 
									
										
										
										
											2013-08-08 15:03:45 +03:00
										 |  |  | from test.test_json import PyTest, CTest | 
					
						
							| 
									
										
										
										
											2015-02-01 17:53:53 -05:00
										 |  |  | from test.support import bigaddrspacetest | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | CASES = [ | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     ('/\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\x08\x0c\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?', '"/\\\\\\"\\ucafe\\ubabe\\uab98\\ufcde\\ubcda\\uef4a\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"'), | 
					
						
							|  |  |  |     ('\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'), | 
					
						
							|  |  |  |     ('controls', '"controls"'), | 
					
						
							|  |  |  |     ('\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'), | 
					
						
							|  |  |  |     ('{"object with 1 member":["array with 1 element"]}', '"{\\"object with 1 member\\":[\\"array with 1 element\\"]}"'), | 
					
						
							|  |  |  |     (' s p a c e d ', '" s p a c e d "'), | 
					
						
							|  |  |  |     ('\U0001d120', '"\\ud834\\udd20"'), | 
					
						
							|  |  |  |     ('\u03b1\u03a9', '"\\u03b1\\u03a9"'), | 
					
						
							|  |  |  |     ("`1~!@#$%^&*()_+-={':[,]}|;.</>?", '"`1~!@#$%^&*()_+-={\':[,]}|;.</>?"'), | 
					
						
							|  |  |  |     ('\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'), | 
					
						
							|  |  |  |     ('\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'), | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | class TestEncodeBasestringAscii: | 
					
						
							|  |  |  |     def test_encode_basestring_ascii(self): | 
					
						
							|  |  |  |         fname = self.json.encoder.encode_basestring_ascii.__name__ | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         for input_string, expect in CASES: | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |             result = self.json.encoder.encode_basestring_ascii(input_string) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |             self.assertEqual(result, expect, | 
					
						
							| 
									
										
										
										
											2024-04-14 15:11:06 +03:00
										 |  |  |                 f'{result!r} != {expect!r} for {fname}({input_string!r})') | 
					
						
							| 
									
										
										
										
											2009-05-27 06:50:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_ordered_dict(self): | 
					
						
							|  |  |  |         # See issue 6105 | 
					
						
							|  |  |  |         items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)] | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         s = self.dumps(OrderedDict(items)) | 
					
						
							| 
									
										
										
										
											2009-05-27 06:50:31 +00:00
										 |  |  |         self.assertEqual(s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}') | 
					
						
							| 
									
										
										
										
											2009-05-27 09:58:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_sorted_dict(self): | 
					
						
							|  |  |  |         items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)] | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         s = self.dumps(dict(items), sort_keys=True) | 
					
						
							| 
									
										
										
										
											2009-05-27 09:58:34 +00:00
										 |  |  |         self.assertEqual(s, '{"five": 5, "four": 4, "one": 1, "three": 3, "two": 2}') | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestPyEncodeBasestringAscii(TestEncodeBasestringAscii, PyTest): pass | 
					
						
							| 
									
										
										
										
											2015-02-01 17:53:53 -05:00
										 |  |  | class TestCEncodeBasestringAscii(TestEncodeBasestringAscii, CTest): | 
					
						
							|  |  |  |     @bigaddrspacetest | 
					
						
							|  |  |  |     def test_overflow(self): | 
					
						
							| 
									
										
										
										
											2015-02-02 17:47:07 -05:00
										 |  |  |         size = (2**32)//6 + 1 | 
					
						
							|  |  |  |         s = "\x00"*size | 
					
						
							| 
									
										
										
										
											2015-02-01 17:53:53 -05:00
										 |  |  |         with self.assertRaises(OverflowError): | 
					
						
							|  |  |  |             self.json.encoder.encode_basestring_ascii(s) |