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