Skip to content

Commit 9c645e8

Browse files
Add more tests.
1 parent 94fe1ed commit 9c645e8

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

Lib/test/test_json/test_unicode.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,22 @@ def test_ascii_non_printable_encode(self):
3939
self.assertEqual(self.dumps(u, ensure_ascii=False),
4040
'"\\b\\t\\n\\f\\r\\u0000\\u001f\x7f"')
4141

42+
def test_ascii_non_printable_decode(self):
43+
self.assertEqual(self.loads('"\\b\\t\\n\\f\\r"'),
44+
'\b\t\n\f\r')
45+
s = ''.join(map(chr, range(32)))
46+
for c in s:
47+
self.assertRaises(self.JSONDecodeError, self.loads, f'"{c}"')
48+
self.assertEqual(self.loads(f'"{s}"', strict=False), s)
49+
self.assertEqual(self.loads('"\x7f"'), '\x7f')
50+
51+
def test_escaped_decode(self):
52+
self.assertEqual(self.loads('"\\b\\t\\n\\f\\r"'), '\b\t\n\f\r')
53+
self.assertEqual(self.loads('"\\"\\\\\\/"'), '"\\/')
54+
for c in set(map(chr, range(0x100))) - set('"\\/bfnrt'):
55+
self.assertRaises(self.JSONDecodeError, self.loads, f'"\\{c}"')
56+
self.assertRaises(self.JSONDecodeError, self.loads, f'"\\{c}"', strict=False)
57+
4258
def test_big_unicode_encode(self):
4359
u = '\U0001d120'
4460
self.assertEqual(self.dumps(u), '"\\ud834\\udd20"')
@@ -55,6 +71,18 @@ def test_unicode_decode(self):
5571
s = f'"\\u{i:04x}"'
5672
self.assertEqual(self.loads(s), u)
5773

74+
def test_single_surrogate_encode(self):
75+
self.assertEqual(self.dumps('\uD0FF'), '"\\ud0ff"')
76+
self.assertEqual(self.dumps('\uD0FF', ensure_ascii=False), '"\ud0ff"')
77+
self.assertEqual(self.dumps('\uDEAD'), '"\\udead"')
78+
self.assertEqual(self.dumps('\uDEAD', ensure_ascii=False), '"\udead"')
79+
80+
def test_single_surrogate_decode(self):
81+
self.assertEqual(self.loads('"\uD0FF"'), '\ud0ff')
82+
self.assertEqual(self.loads('"\\uD0FF"'), '\ud0ff')
83+
self.assertEqual(self.loads('"\uDEAD"'), '\udead')
84+
self.assertEqual(self.loads('"\\uDEAD"'), '\udead')
85+
5886
def test_unicode_preservation(self):
5987
self.assertEqual(type(self.loads('""')), str)
6088
self.assertEqual(type(self.loads('"a"')), str)

0 commit comments

Comments
 (0)