1import textwrap 2from io import StringIO 3from test.test_json import PyTest, CTest 4 5 6class TestIndent: 7 def test_indent(self): 8 h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', 9 {'nifty': 87}, {'field': 'yes', 'morefield': False} ] 10 11 expect = textwrap.dedent("""\ 12 [ 13 \t[ 14 \t\t"blorpie" 15 \t], 16 \t[ 17 \t\t"whoops" 18 \t], 19 \t[], 20 \t"d-shtaeou", 21 \t"d-nthiouh", 22 \t"i-vhbjkhnth", 23 \t{ 24 \t\t"nifty": 87 25 \t}, 26 \t{ 27 \t\t"field": "yes", 28 \t\t"morefield": false 29 \t} 30 ]""") 31 32 d1 = self.dumps(h) 33 d2 = self.dumps(h, indent=2, sort_keys=True, separators=(',', ': ')) 34 d3 = self.dumps(h, indent='\t', sort_keys=True, separators=(',', ': ')) 35 d4 = self.dumps(h, indent=2, sort_keys=True) 36 d5 = self.dumps(h, indent='\t', sort_keys=True) 37 38 h1 = self.loads(d1) 39 h2 = self.loads(d2) 40 h3 = self.loads(d3) 41 42 self.assertEqual(h1, h) 43 self.assertEqual(h2, h) 44 self.assertEqual(h3, h) 45 self.assertEqual(d2, expect.expandtabs(2)) 46 self.assertEqual(d3, expect) 47 self.assertEqual(d4, d2) 48 self.assertEqual(d5, d3) 49 50 def test_indent0(self): 51 h = {3: 1} 52 def check(indent, expected): 53 d1 = self.dumps(h, indent=indent) 54 self.assertEqual(d1, expected) 55 56 sio = StringIO() 57 self.json.dump(h, sio, indent=indent) 58 self.assertEqual(sio.getvalue(), expected) 59 60 # indent=0 should emit newlines 61 check(0, '{\n"3": 1\n}') 62 # indent=None is more compact 63 check(None, '{"3": 1}') 64 65 66class TestPyIndent(TestIndent, PyTest): pass 67class TestCIndent(TestIndent, CTest): pass 68