| Index: third_party/simplejson/simplejson/tests/test_recursion.py
|
| diff --git a/third_party/simplejson/simplejson/tests/test_recursion.py b/third_party/simplejson/simplejson/tests/test_recursion.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..97422a66c32ca5d3c6c645b473f23910e629fc81
|
| --- /dev/null
|
| +++ b/third_party/simplejson/simplejson/tests/test_recursion.py
|
| @@ -0,0 +1,67 @@
|
| +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(x)
|
| +
|
| + def test_defaultrecursion(self):
|
| + enc = RecursiveJSONEncoder()
|
| + self.assertEquals(enc.encode(JSONTestObject), '"JSONTestObject"')
|
| + enc.recurse = True
|
| + try:
|
| + enc.encode(JSONTestObject)
|
| + except ValueError:
|
| + pass
|
| + else:
|
| + self.fail("didn't raise ValueError on default recursion")
|
|
|