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