14b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannonimport textwrap
2ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murrayfrom StringIO import StringIO
3e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melottifrom json.tests import PyTest, CTest
4e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti
54b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
6e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotticlass TestIndent(object):
74b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon    def test_indent(self):
84b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon        h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth',
94b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon             {'nifty': 87}, {'field': 'yes', 'morefield': False} ]
104b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
114b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon        expect = textwrap.dedent("""\
124b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon        [
134b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          [
144b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon            "blorpie"
154b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          ],
164b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          [
174b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon            "whoops"
184b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          ],
194b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          [],
204b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          "d-shtaeou",
214b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          "d-nthiouh",
224b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          "i-vhbjkhnth",
234b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          {
244b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon            "nifty": 87
254b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          },
264b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          {
274b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon            "field": "yes",
284b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon            "morefield": false
294b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon          }
304b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon        ]""")
314b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
324b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
33e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti        d1 = self.dumps(h)
34e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti        d2 = self.dumps(h, indent=2, sort_keys=True, separators=(',', ': '))
354b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
36e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti        h1 = self.loads(d1)
37e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti        h2 = self.loads(d2)
384b964f9c904744b7d7d88054e54a2e4ca8aeb395Brett Cannon
392623a37852153363335956afab010cb0beb7e74eEzio Melotti        self.assertEqual(h1, h)
402623a37852153363335956afab010cb0beb7e74eEzio Melotti        self.assertEqual(h2, h)
412623a37852153363335956afab010cb0beb7e74eEzio Melotti        self.assertEqual(d2, expect)
42ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray
43ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray    def test_indent0(self):
44ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        h = {3: 1}
45ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        def check(indent, expected):
46e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti            d1 = self.dumps(h, indent=indent)
47ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray            self.assertEqual(d1, expected)
48ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray
49ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray            sio = StringIO()
50e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti            self.json.dump(h, sio, indent=indent)
51ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray            self.assertEqual(sio.getvalue(), expected)
52ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray
53ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        # indent=0 should emit newlines
54ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        check(0, '{\n"3": 1\n}')
55ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        # indent=None is more compact
56ea8b6ef15f047536d4222f2b810d10756adc0dacR David Murray        check(None, '{"3": 1}')
57e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti
58e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotti
59e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotticlass TestPyIndent(TestIndent, PyTest): pass
60e3992eb7430101f5bc6725d5f74290777a2ef939Ezio Melotticlass TestCIndent(TestIndent, CTest): pass
61