Skip to content

Commit 5cd13f6

Browse files
Add more tests.
1 parent 94fe1ed commit 5cd13f6

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

Lib/test/test_json/test_unicode.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,21 @@ 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+
4257
def test_big_unicode_encode(self):
4358
u = '\U0001d120'
4459
self.assertEqual(self.dumps(u), '"\\ud834\\udd20"')
@@ -55,6 +70,18 @@ def test_unicode_decode(self):
5570
s = f'"\\u{i:04x}"'
5671
self.assertEqual(self.loads(s), u)
5772

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

0 commit comments

Comments
 (0)