1 import textwrap
2 from io import StringIO
3 from test.test_json import PyTest, CTest
4
5
6 class ESC[4;38;5;81mTestIndent:
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
66 class ESC[4;38;5;81mTestPyIndent(ESC[4;38;5;149mTestIndent, ESC[4;38;5;149mPyTest): pass
67 class ESC[4;38;5;81mTestCIndent(ESC[4;38;5;149mTestIndent, ESC[4;38;5;149mCTest): pass