mirror of https://github.com/python/cpython
gh-115692: Add tests to increase `json` coverage (#115693)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
parent
9c93b7402b
commit
8fc953f606
|
@ -8,14 +8,34 @@ from test import support
|
|||
class TestDecode:
|
||||
def test_decimal(self):
|
||||
rval = self.loads('1.1', parse_float=decimal.Decimal)
|
||||
self.assertTrue(isinstance(rval, decimal.Decimal))
|
||||
self.assertIsInstance(rval, decimal.Decimal)
|
||||
self.assertEqual(rval, decimal.Decimal('1.1'))
|
||||
|
||||
def test_float(self):
|
||||
rval = self.loads('1', parse_int=float)
|
||||
self.assertTrue(isinstance(rval, float))
|
||||
self.assertIsInstance(rval, float)
|
||||
self.assertEqual(rval, 1.0)
|
||||
|
||||
def test_bytes(self):
|
||||
self.assertEqual(self.loads(b"1"), 1)
|
||||
|
||||
def test_parse_constant(self):
|
||||
for constant, expected in [
|
||||
("Infinity", "INFINITY"),
|
||||
("-Infinity", "-INFINITY"),
|
||||
("NaN", "NAN"),
|
||||
]:
|
||||
self.assertEqual(
|
||||
self.loads(constant, parse_constant=str.upper), expected
|
||||
)
|
||||
|
||||
def test_constant_invalid_case(self):
|
||||
for constant in [
|
||||
"nan", "NAN", "naN", "infinity", "INFINITY", "inFiniTy"
|
||||
]:
|
||||
with self.assertRaises(self.JSONDecodeError):
|
||||
self.loads(constant)
|
||||
|
||||
def test_empty_objects(self):
|
||||
self.assertEqual(self.loads('{}'), {})
|
||||
self.assertEqual(self.loads('[]'), [])
|
||||
|
@ -88,7 +108,8 @@ class TestDecode:
|
|||
self.json.load(StringIO(bom_json))
|
||||
self.assertIn('BOM', str(cm.exception))
|
||||
# make sure that the BOM is not detected in the middle of a string
|
||||
bom_in_str = '"{}"'.format(''.encode('utf-8-sig').decode('utf-8'))
|
||||
bom = ''.encode('utf-8-sig').decode('utf-8')
|
||||
bom_in_str = f'"{bom}"'
|
||||
self.assertEqual(self.loads(bom_in_str), '\ufeff')
|
||||
self.assertEqual(self.json.load(StringIO(bom_in_str)), '\ufeff')
|
||||
|
||||
|
|
|
@ -23,8 +23,7 @@ class TestEncodeBasestringAscii:
|
|||
for input_string, expect in CASES:
|
||||
result = self.json.encoder.encode_basestring_ascii(input_string)
|
||||
self.assertEqual(result, expect,
|
||||
'{0!r} != {1!r} for {2}({3!r})'.format(
|
||||
result, expect, fname, input_string))
|
||||
f'{result!r} != {expect!r} for {fname}({input_string!r})')
|
||||
|
||||
def test_ordered_dict(self):
|
||||
# See issue 6105
|
||||
|
|
|
@ -89,7 +89,7 @@ class TestFail:
|
|||
except self.JSONDecodeError:
|
||||
pass
|
||||
else:
|
||||
self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
|
||||
self.fail(f"Expected failure for fail{idx}.json: {doc!r}")
|
||||
|
||||
def test_non_string_keys_dict(self):
|
||||
data = {'a' : 1, (1, 2) : 2}
|
||||
|
|
|
@ -20,12 +20,17 @@ class TestUnicode:
|
|||
def test_encoding5(self):
|
||||
u = '\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
|
||||
j = self.dumps(u, ensure_ascii=False)
|
||||
self.assertEqual(j, '"{0}"'.format(u))
|
||||
self.assertEqual(j, f'"{u}"')
|
||||
|
||||
def test_encoding6(self):
|
||||
u = '\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
|
||||
j = self.dumps([u], ensure_ascii=False)
|
||||
self.assertEqual(j, '["{0}"]'.format(u))
|
||||
self.assertEqual(j, f'["{u}"]')
|
||||
|
||||
def test_encoding7(self):
|
||||
u = '\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
|
||||
j = self.dumps(u + "\n", ensure_ascii=False)
|
||||
self.assertEqual(j, f'"{u}\\n"')
|
||||
|
||||
def test_big_unicode_encode(self):
|
||||
u = '\U0001d120'
|
||||
|
@ -34,13 +39,13 @@ class TestUnicode:
|
|||
|
||||
def test_big_unicode_decode(self):
|
||||
u = 'z\U0001d120x'
|
||||
self.assertEqual(self.loads('"' + u + '"'), u)
|
||||
self.assertEqual(self.loads(f'"{u}"'), u)
|
||||
self.assertEqual(self.loads('"z\\ud834\\udd20x"'), u)
|
||||
|
||||
def test_unicode_decode(self):
|
||||
for i in range(0, 0xd7ff):
|
||||
u = chr(i)
|
||||
s = '"\\u{0:04x}"'.format(i)
|
||||
s = f'"\\u{i:04x}"'
|
||||
self.assertEqual(self.loads(s), u)
|
||||
|
||||
def test_unicode_preservation(self):
|
||||
|
|
Loading…
Reference in New Issue