symbian-qemu-0.9.1-12/python-2.6.1/Lib/json/tests/test_recursion.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 from unittest import TestCase
       
     2 
       
     3 import 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")