| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | import textwrap | 
					
						
							| 
									
										
										
										
											2011-04-12 21:02:45 -04: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-05-14 06:47:51 +03:00
										 |  |  | class TestIndent: | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     def test_indent(self): | 
					
						
							|  |  |  |         h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', | 
					
						
							|  |  |  |              {'nifty': 87}, {'field': 'yes', 'morefield': False} ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect = textwrap.dedent("""\
 | 
					
						
							|  |  |  |         [ | 
					
						
							| 
									
										
										
										
											2010-10-31 08:00:16 +00:00
										 |  |  |         \t[ | 
					
						
							|  |  |  |         \t\t"blorpie" | 
					
						
							|  |  |  |         \t], | 
					
						
							|  |  |  |         \t[ | 
					
						
							|  |  |  |         \t\t"whoops" | 
					
						
							|  |  |  |         \t], | 
					
						
							|  |  |  |         \t[], | 
					
						
							|  |  |  |         \t"d-shtaeou", | 
					
						
							|  |  |  |         \t"d-nthiouh", | 
					
						
							|  |  |  |         \t"i-vhbjkhnth", | 
					
						
							|  |  |  |         \t{ | 
					
						
							|  |  |  |         \t\t"nifty": 87 | 
					
						
							|  |  |  |         \t}, | 
					
						
							|  |  |  |         \t{ | 
					
						
							|  |  |  |         \t\t"field": "yes", | 
					
						
							|  |  |  |         \t\t"morefield": false | 
					
						
							|  |  |  |         \t} | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         ]""")
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         d1 = self.dumps(h) | 
					
						
							|  |  |  |         d2 = self.dumps(h, indent=2, sort_keys=True, separators=(',', ': ')) | 
					
						
							|  |  |  |         d3 = self.dumps(h, indent='\t', sort_keys=True, separators=(',', ': ')) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         h1 = self.loads(d1) | 
					
						
							|  |  |  |         h2 = self.loads(d2) | 
					
						
							|  |  |  |         h3 = self.loads(d3) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(h1, h) | 
					
						
							|  |  |  |         self.assertEqual(h2, h) | 
					
						
							|  |  |  |         self.assertEqual(h3, h) | 
					
						
							|  |  |  |         self.assertEqual(d2, expect.expandtabs(2)) | 
					
						
							|  |  |  |         self.assertEqual(d3, expect) | 
					
						
							| 
									
										
										
										
											2011-04-12 21:02:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_indent0(self): | 
					
						
							|  |  |  |         h = {3: 1} | 
					
						
							|  |  |  |         def check(indent, expected): | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |             d1 = self.dumps(h, indent=indent) | 
					
						
							| 
									
										
										
										
											2011-04-12 21:02:45 -04:00
										 |  |  |             self.assertEqual(d1, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sio = StringIO() | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |             self.json.dump(h, sio, indent=indent) | 
					
						
							| 
									
										
										
										
											2011-04-12 21:02:45 -04:00
										 |  |  |             self.assertEqual(sio.getvalue(), expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # indent=0 should emit newlines | 
					
						
							|  |  |  |         check(0, '{\n"3": 1\n}') | 
					
						
							|  |  |  |         # indent=None is more compact | 
					
						
							|  |  |  |         check(None, '{"3": 1}') | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestPyIndent(TestIndent, PyTest): pass | 
					
						
							|  |  |  | class TestCIndent(TestIndent, CTest): pass |