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

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

#countcontent
1n/afrom unittest import TestCase
2n/a
3n/aimport json
4n/a
5n/aclass JSONTestObject:
6n/a pass
7n/a
8n/a
9n/aclass RecursiveJSONEncoder(json.JSONEncoder):
10n/a recurse = False
11n/a def default(self, o):
12n/a if o is JSONTestObject:
13n/a if self.recurse:
14n/a return [JSONTestObject]
15n/a else:
16n/a return 'JSONTestObject'
17n/a return json.JSONEncoder.default(o)
18n/a
19n/a
20n/aclass TestRecursion(TestCase):
21n/a def test_listrecursion(self):
22n/a x = []
23n/a x.append(x)
24n/a try:
25n/a json.dumps(x)
26n/a except ValueError:
27n/a pass
28n/a else:
29n/a self.fail("didn't raise ValueError on list recursion")
30n/a x = []
31n/a y = [x]
32n/a x.append(y)
33n/a try:
34n/a json.dumps(x)
35n/a except ValueError:
36n/a pass
37n/a else:
38n/a self.fail("didn't raise ValueError on alternating list recursion")
39n/a y = []
40n/a x = [y, y]
41n/a # ensure that the marker is cleared
42n/a json.dumps(x)
43n/a
44n/a def test_dictrecursion(self):
45n/a x = {}
46n/a x["test"] = x
47n/a try:
48n/a json.dumps(x)
49n/a except ValueError:
50n/a pass
51n/a else:
52n/a self.fail("didn't raise ValueError on dict recursion")
53n/a x = {}
54n/a y = {"a": x, "b": x}
55n/a # ensure that the marker is cleared
56n/a json.dumps(x)
57n/a
58n/a def test_defaultrecursion(self):
59n/a enc = RecursiveJSONEncoder()
60n/a self.assertEqual(enc.encode(JSONTestObject), '"JSONTestObject"')
61n/a enc.recurse = True
62n/a try:
63n/a enc.encode(JSONTestObject)
64n/a except ValueError:
65n/a pass
66n/a else:
67n/a self.fail("didn't raise ValueError on default recursion")