home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 May / maximum-cd-2010-05.iso / DiscContents / boxee-0.9.20.10711.exe / system / python / local / simplejson / tests / test_recursion.py < prev    next >
Encoding:
Python Source  |  2009-07-20  |  1.6 KB  |  68 lines

  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.         y = {"a": x, "b": x}
  55.         # ensure that the marker is cleared
  56.         json.dumps(x)
  57.  
  58.     def test_defaultrecursion(self):
  59.         enc = RecursiveJSONEncoder()
  60.         self.assertEquals(enc.encode(JSONTestObject), '"JSONTestObject"')
  61.         enc.recurse = True
  62.         try:
  63.             enc.encode(JSONTestObject)
  64.         except ValueError:
  65.             pass
  66.         else:
  67.             self.fail("didn't raise ValueError on default recursion")
  68.