mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 90540004d3
			
		
	
	
		90540004d3
		
	
	
	
	
		
			
			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")
 |