blob: 4eb4f892d0040d792ac95295733970e6440eb070 [file] [log] [blame]
Christian Heimes90540002008-05-08 14:29:10 +00001import textwrap
R David Murray3dd02d62011-04-12 21:02:45 -04002from io import StringIO
Ezio Melotti6b60fb92011-05-14 06:47:51 +03003from test.json_tests import PyTest, CTest
Christian Heimes90540002008-05-08 14:29:10 +00004
Ezio Melotti6b60fb92011-05-14 06:47:51 +03005
6class TestIndent:
Christian Heimes90540002008-05-08 14:29:10 +00007 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 [
Raymond Hettingerb643ef82010-10-31 08:00:16 +000013 \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}
Christian Heimes90540002008-05-08 14:29:10 +000030 ]""")
31
Ezio Melotti6b60fb92011-05-14 06:47:51 +030032 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=(',', ': '))
Ezio Melotti10031442012-11-29 00:42:56 +020035 d4 = self.dumps(h, indent=2, sort_keys=True)
36 d5 = self.dumps(h, indent='\t', sort_keys=True)
Christian Heimes90540002008-05-08 14:29:10 +000037
Ezio Melotti6b60fb92011-05-14 06:47:51 +030038 h1 = self.loads(d1)
39 h2 = self.loads(d2)
40 h3 = self.loads(d3)
Christian Heimes90540002008-05-08 14:29:10 +000041
Ezio Melottib3aedd42010-11-20 19:04:17 +000042 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)
Ezio Melotti10031442012-11-29 00:42:56 +020047 self.assertEqual(d4, d2)
48 self.assertEqual(d5, d3)
R David Murray3dd02d62011-04-12 21:02:45 -040049
50 def test_indent0(self):
51 h = {3: 1}
52 def check(indent, expected):
Ezio Melotti6b60fb92011-05-14 06:47:51 +030053 d1 = self.dumps(h, indent=indent)
R David Murray3dd02d62011-04-12 21:02:45 -040054 self.assertEqual(d1, expected)
55
56 sio = StringIO()
Ezio Melotti6b60fb92011-05-14 06:47:51 +030057 self.json.dump(h, sio, indent=indent)
R David Murray3dd02d62011-04-12 21:02:45 -040058 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}')
Ezio Melotti6b60fb92011-05-14 06:47:51 +030064
65
66class TestPyIndent(TestIndent, PyTest): pass
67class TestCIndent(TestIndent, CTest): pass