Christian Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 1 | import textwrap |
R David Murray | 3dd02d6 | 2011-04-12 21:02:45 -0400 | [diff] [blame] | 2 | from io import StringIO |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 3 | from test.json_tests import PyTest, CTest |
Christian Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 4 | |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 5 | |
| 6 | class TestIndent: |
Christian Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 7 | 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 Hettinger | b643ef8 | 2010-10-31 08:00:16 +0000 | [diff] [blame] | 13 | \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 Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 30 | ]""") |
| 31 | |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 32 | 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 Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 35 | |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 36 | h1 = self.loads(d1) |
| 37 | h2 = self.loads(d2) |
| 38 | h3 = self.loads(d3) |
Christian Heimes | 9054000 | 2008-05-08 14:29:10 +0000 | [diff] [blame] | 39 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 40 | 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 Murray | 3dd02d6 | 2011-04-12 21:02:45 -0400 | [diff] [blame] | 45 | |
| 46 | def test_indent0(self): |
| 47 | h = {3: 1} |
| 48 | def check(indent, expected): |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 49 | d1 = self.dumps(h, indent=indent) |
R David Murray | 3dd02d6 | 2011-04-12 21:02:45 -0400 | [diff] [blame] | 50 | self.assertEqual(d1, expected) |
| 51 | |
| 52 | sio = StringIO() |
Ezio Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 53 | self.json.dump(h, sio, indent=indent) |
R David Murray | 3dd02d6 | 2011-04-12 21:02:45 -0400 | [diff] [blame] | 54 | 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 Melotti | 6b60fb9 | 2011-05-14 06:47:51 +0300 | [diff] [blame] | 60 | |
| 61 | |
| 62 | class TestPyIndent(TestIndent, PyTest): pass |
| 63 | class TestCIndent(TestIndent, CTest): pass |