| Viewing file:  test_recursion.py (1.64 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
from unittest import TestCase
 import simplejson as json
 
 class JSONTestObject:
 pass
 
 
 class RecursiveJSONEncoder(json.JSONEncoder):
 recurse = False
 def default(self, o):
 if o is JSONTestObject:
 if self.recurse:
 return [JSONTestObject]
 else:
 return 'JSONTestObject'
 return json.JSONEncoder.default(o)
 
 
 class TestRecursion(TestCase):
 def test_listrecursion(self):
 x = []
 x.append(x)
 try:
 json.dumps(x)
 except ValueError:
 pass
 else:
 self.fail("didn't raise ValueError on list recursion")
 x = []
 y = [x]
 x.append(y)
 try:
 json.dumps(x)
 except ValueError:
 pass
 else:
 self.fail("didn't raise ValueError on alternating list recursion")
 y = []
 x = [y, y]
 # ensure that the marker is cleared
 json.dumps(x)
 
 def test_dictrecursion(self):
 x = {}
 x["test"] = x
 try:
 json.dumps(x)
 except ValueError:
 pass
 else:
 self.fail("didn't raise ValueError on dict recursion")
 x = {}
 y = {"a": x, "b": x}
 # ensure that the marker is cleared
 json.dumps(y)
 
 def test_defaultrecursion(self):
 enc = RecursiveJSONEncoder()
 self.assertEqual(enc.encode(JSONTestObject), '"JSONTestObject"')
 enc.recurse = True
 try:
 enc.encode(JSONTestObject)
 except ValueError:
 pass
 else:
 self.fail("didn't raise ValueError on default recursion")
 
 |