blob: 4c706463396d315978c28d19932ec0f979535312 [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=(',', ': '))
Christian Heimes90540002008-05-08 14:29:10 +000035
Ezio Melotti6b60fb92011-05-14 06:47:51 +030036 h1 = self.loads(d1)
37 h2 = self.loads(d2)
38 h3 = self.loads(d3)
Christian Heimes90540002008-05-08 14:29:10 +000039
Ezio Melottib3aedd42010-11-20 19:04:17 +000040 self.assertEqual(h1, h)
41 self.assertEqual(h2, h)
42 self.assertEqual(h3, h)
43 self.assertEqual(d2, expect.expandtabs(2))
44 self.assertEqual(d3, expect)
R David Murray3dd02d62011-04-12 21:02:45 -040045
46 def test_indent0(self):
47 h = {3: 1}
48 def check(indent, expected):
Ezio Melotti6b60fb92011-05-14 06:47:51 +030049 d1 = self.dumps(h, indent=indent)
R David Murray3dd02d62011-04-12 21:02:45 -040050 self.assertEqual(d1, expected)
51
52 sio = StringIO()
Ezio Melotti6b60fb92011-05-14 06:47:51 +030053 self.json.dump(h, sio, indent=indent)
R David Murray3dd02d62011-04-12 21:02:45 -040054 self.assertEqual(sio.getvalue(), expected)
55
56 # indent=0 should emit newlines
57 check(0, '{\n"3": 1\n}')
58 # indent=None is more compact
59 check(None, '{"3": 1}')
Ezio Melotti6b60fb92011-05-14 06:47:51 +030060
61
62class TestPyIndent(TestIndent, PyTest): pass
63class TestCIndent(TestIndent, CTest): pass