17db96d56Sopenharmony_ciimport textwrap 27db96d56Sopenharmony_cifrom io import StringIO 37db96d56Sopenharmony_cifrom test.test_json import PyTest, CTest 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciclass TestIndent: 77db96d56Sopenharmony_ci def test_indent(self): 87db96d56Sopenharmony_ci h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', 97db96d56Sopenharmony_ci {'nifty': 87}, {'field': 'yes', 'morefield': False} ] 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci expect = textwrap.dedent("""\ 127db96d56Sopenharmony_ci [ 137db96d56Sopenharmony_ci \t[ 147db96d56Sopenharmony_ci \t\t"blorpie" 157db96d56Sopenharmony_ci \t], 167db96d56Sopenharmony_ci \t[ 177db96d56Sopenharmony_ci \t\t"whoops" 187db96d56Sopenharmony_ci \t], 197db96d56Sopenharmony_ci \t[], 207db96d56Sopenharmony_ci \t"d-shtaeou", 217db96d56Sopenharmony_ci \t"d-nthiouh", 227db96d56Sopenharmony_ci \t"i-vhbjkhnth", 237db96d56Sopenharmony_ci \t{ 247db96d56Sopenharmony_ci \t\t"nifty": 87 257db96d56Sopenharmony_ci \t}, 267db96d56Sopenharmony_ci \t{ 277db96d56Sopenharmony_ci \t\t"field": "yes", 287db96d56Sopenharmony_ci \t\t"morefield": false 297db96d56Sopenharmony_ci \t} 307db96d56Sopenharmony_ci ]""") 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci d1 = self.dumps(h) 337db96d56Sopenharmony_ci d2 = self.dumps(h, indent=2, sort_keys=True, separators=(',', ': ')) 347db96d56Sopenharmony_ci d3 = self.dumps(h, indent='\t', sort_keys=True, separators=(',', ': ')) 357db96d56Sopenharmony_ci d4 = self.dumps(h, indent=2, sort_keys=True) 367db96d56Sopenharmony_ci d5 = self.dumps(h, indent='\t', sort_keys=True) 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci h1 = self.loads(d1) 397db96d56Sopenharmony_ci h2 = self.loads(d2) 407db96d56Sopenharmony_ci h3 = self.loads(d3) 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci self.assertEqual(h1, h) 437db96d56Sopenharmony_ci self.assertEqual(h2, h) 447db96d56Sopenharmony_ci self.assertEqual(h3, h) 457db96d56Sopenharmony_ci self.assertEqual(d2, expect.expandtabs(2)) 467db96d56Sopenharmony_ci self.assertEqual(d3, expect) 477db96d56Sopenharmony_ci self.assertEqual(d4, d2) 487db96d56Sopenharmony_ci self.assertEqual(d5, d3) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci def test_indent0(self): 517db96d56Sopenharmony_ci h = {3: 1} 527db96d56Sopenharmony_ci def check(indent, expected): 537db96d56Sopenharmony_ci d1 = self.dumps(h, indent=indent) 547db96d56Sopenharmony_ci self.assertEqual(d1, expected) 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci sio = StringIO() 577db96d56Sopenharmony_ci self.json.dump(h, sio, indent=indent) 587db96d56Sopenharmony_ci self.assertEqual(sio.getvalue(), expected) 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci # indent=0 should emit newlines 617db96d56Sopenharmony_ci check(0, '{\n"3": 1\n}') 627db96d56Sopenharmony_ci # indent=None is more compact 637db96d56Sopenharmony_ci check(None, '{"3": 1}') 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ciclass TestPyIndent(TestIndent, PyTest): pass 677db96d56Sopenharmony_ciclass TestCIndent(TestIndent, CTest): pass 68