ยปCore Development>Code coverage>Lib/json/tests/test_scanstring.py

Python code coverage for Lib/json/tests/test_scanstring.py

#countcontent
1n/aimport sys
2n/aimport decimal
3n/afrom unittest import TestCase
4n/a
5n/aimport json
6n/aimport json.decoder
7n/a
8n/aclass TestScanString(TestCase):
9n/a def test_py_scanstring(self):
10n/a self._test_scanstring(json.decoder.py_scanstring)
11n/a
12n/a def test_c_scanstring(self):
13n/a if json.decoder.c_scanstring is not None:
14n/a self._test_scanstring(json.decoder.c_scanstring)
15n/a
16n/a def _test_scanstring(self, scanstring):
17n/a self.assertEqual(
18n/a scanstring('"z\\ud834\\udd20x"', 1, True),
19n/a ('z\U0001d120x', 16))
20n/a
21n/a if sys.maxunicode == 65535:
22n/a self.assertEqual(
23n/a scanstring('"z\U0001d120x"', 1, True),
24n/a ('z\U0001d120x', 6))
25n/a else:
26n/a self.assertEqual(
27n/a scanstring('"z\U0001d120x"', 1, True),
28n/a ('z\U0001d120x', 5))
29n/a
30n/a self.assertEqual(
31n/a scanstring('"\\u007b"', 1, True),
32n/a ('{', 8))
33n/a
34n/a self.assertEqual(
35n/a scanstring('"A JSON payload should be an object or array, not a string."', 1, True),
36n/a ('A JSON payload should be an object or array, not a string.', 60))
37n/a
38n/a self.assertEqual(
39n/a scanstring('["Unclosed array"', 2, True),
40n/a ('Unclosed array', 17))
41n/a
42n/a self.assertEqual(
43n/a scanstring('["extra comma",]', 2, True),
44n/a ('extra comma', 14))
45n/a
46n/a self.assertEqual(
47n/a scanstring('["double extra comma",,]', 2, True),
48n/a ('double extra comma', 21))
49n/a
50n/a self.assertEqual(
51n/a scanstring('["Comma after the close"],', 2, True),
52n/a ('Comma after the close', 24))
53n/a
54n/a self.assertEqual(
55n/a scanstring('["Extra close"]]', 2, True),
56n/a ('Extra close', 14))
57n/a
58n/a self.assertEqual(
59n/a scanstring('{"Extra comma": true,}', 2, True),
60n/a ('Extra comma', 14))
61n/a
62n/a self.assertEqual(
63n/a scanstring('{"Extra value after close": true} "misplaced quoted value"', 2, True),
64n/a ('Extra value after close', 26))
65n/a
66n/a self.assertEqual(
67n/a scanstring('{"Illegal expression": 1 + 2}', 2, True),
68n/a ('Illegal expression', 21))
69n/a
70n/a self.assertEqual(
71n/a scanstring('{"Illegal invocation": alert()}', 2, True),
72n/a ('Illegal invocation', 21))
73n/a
74n/a self.assertEqual(
75n/a scanstring('{"Numbers cannot have leading zeroes": 013}', 2, True),
76n/a ('Numbers cannot have leading zeroes', 37))
77n/a
78n/a self.assertEqual(
79n/a scanstring('{"Numbers cannot be hex": 0x14}', 2, True),
80n/a ('Numbers cannot be hex', 24))
81n/a
82n/a self.assertEqual(
83n/a scanstring('[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', 21, True),
84n/a ('Too deep', 30))
85n/a
86n/a self.assertEqual(
87n/a scanstring('{"Missing colon" null}', 2, True),
88n/a ('Missing colon', 16))
89n/a
90n/a self.assertEqual(
91n/a scanstring('{"Double colon":: null}', 2, True),
92n/a ('Double colon', 15))
93n/a
94n/a self.assertEqual(
95n/a scanstring('{"Comma instead of colon", null}', 2, True),
96n/a ('Comma instead of colon', 25))
97n/a
98n/a self.assertEqual(
99n/a scanstring('["Colon instead of comma": false]', 2, True),
100n/a ('Colon instead of comma', 25))
101n/a
102n/a self.assertEqual(
103n/a scanstring('["Bad value", truth]', 2, True),
104n/a ('Bad value', 12))
105n/a
106n/a def test_overflow(self):
107n/a self.assertRaises(OverflowError, json.decoder.scanstring, b"xxx", sys.maxsize+1)