| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | from io import StringIO | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | from test.json_tests import PyTest, CTest | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-04 10:39:54 +02:00
										 |  |  | from test.support import bigmemtest, _1G | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | class TestDump: | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     def test_dump(self): | 
					
						
							|  |  |  |         sio = StringIO() | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.json.dump({}, sio) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(sio.getvalue(), '{}') | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_dumps(self): | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.assertEqual(self.dumps({}), '{}') | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_encode_truefalse(self): | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.assertEqual(self.dumps( | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |                  {True: False, False: True}, sort_keys=True), | 
					
						
							|  |  |  |                  '{"false": true, "true": false}') | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.assertEqual(self.dumps( | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |                 {2: 3.0, 4.0: 5, False: 1, 6: True}, sort_keys=True), | 
					
						
							|  |  |  |                 '{"false": 1, "2": 3.0, "4.0": 5, "6": true}') | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-01 19:52:06 +01:00
										 |  |  |     # Issue 16228: Crash on encoding resized list | 
					
						
							|  |  |  |     def test_encode_mutated(self): | 
					
						
							|  |  |  |         a = [object()] * 10 | 
					
						
							|  |  |  |         def crasher(obj): | 
					
						
							|  |  |  |             del a[-1] | 
					
						
							|  |  |  |         self.assertEqual(self.dumps(a, default=crasher), | 
					
						
							|  |  |  |                  '[null, null, null, null, null]') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class TestPyDump(TestDump, PyTest): pass | 
					
						
							| 
									
										
										
										
											2011-08-19 18:03:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class TestCDump(TestDump, CTest): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The size requirement here is hopefully over-estimated (actual | 
					
						
							|  |  |  |     # memory consumption depending on implementation details, and also | 
					
						
							|  |  |  |     # system memory management, since this may allocate a lot of | 
					
						
							|  |  |  |     # small objects). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-04 10:39:54 +02:00
										 |  |  |     @bigmemtest(size=_1G, memuse=1) | 
					
						
							| 
									
										
										
										
											2011-08-19 18:03:14 +02:00
										 |  |  |     def test_large_list(self, size): | 
					
						
							|  |  |  |         N = int(30 * 1024 * 1024 * (size / _1G)) | 
					
						
							|  |  |  |         l = [1] * N | 
					
						
							|  |  |  |         encoded = self.dumps(l) | 
					
						
							|  |  |  |         self.assertEqual(len(encoded), N * 3) | 
					
						
							|  |  |  |         self.assertEqual(encoded[:1], "[") | 
					
						
							|  |  |  |         self.assertEqual(encoded[-2:], "1]") | 
					
						
							|  |  |  |         self.assertEqual(encoded[1:-2], "1, " * (N - 1)) |