mirror of
https://github.com/python/cpython.git
synced 2025-07-21 02:05:20 +00:00

svn+ssh://pythondev@svn.python.org/python/trunk ........ r62734 | brett.cannon | 2008-05-05 22:21:38 +0200 (Mon, 05 May 2008) | 5 lines Add the 'json' package. Code taken from simplejson 1.9 and contributed by Bob Ippolito. Closes issue #2750. ........ r62736 | georg.brandl | 2008-05-05 22:53:39 +0200 (Mon, 05 May 2008) | 2 lines Fix JSON module docs. ........ r62748 | benjamin.peterson | 2008-05-06 04:51:10 +0200 (Tue, 06 May 2008) | 2 lines PEP 8 nits in json package ........ r62769 | christian.heimes | 2008-05-06 18:18:41 +0200 (Tue, 06 May 2008) | 2 lines Intern static string Use float constructors instead of magic code for float constants ........
67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
from unittest import TestCase
|
|
|
|
import 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")
|