mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +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")
 |