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