| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | import doctest | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from test import support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # import json with and without accelerations | 
					
						
							|  |  |  | cjson = support.import_fresh_module('json', fresh=['_json']) | 
					
						
							|  |  |  | pyjson = support.import_fresh_module('json', blocked=['_json']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # create two base classes that will be used by the other tests | 
					
						
							|  |  |  | class PyTest(unittest.TestCase): | 
					
						
							|  |  |  |     json = pyjson | 
					
						
							|  |  |  |     loads = staticmethod(pyjson.loads) | 
					
						
							|  |  |  |     dumps = staticmethod(pyjson.dumps) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @unittest.skipUnless(cjson, 'requires _json') | 
					
						
							|  |  |  | class CTest(unittest.TestCase): | 
					
						
							|  |  |  |     if cjson is not None: | 
					
						
							|  |  |  |         json = cjson | 
					
						
							|  |  |  |         loads = staticmethod(cjson.loads) | 
					
						
							|  |  |  |         dumps = staticmethod(cjson.dumps) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # test PyTest and CTest checking if the functions come from the right module | 
					
						
							|  |  |  | class TestPyTest(PyTest): | 
					
						
							|  |  |  |     def test_pyjson(self): | 
					
						
							|  |  |  |         self.assertEqual(self.json.scanner.make_scanner.__module__, | 
					
						
							|  |  |  |                          'json.scanner') | 
					
						
							|  |  |  |         self.assertEqual(self.json.decoder.scanstring.__module__, | 
					
						
							|  |  |  |                          'json.decoder') | 
					
						
							|  |  |  |         self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, | 
					
						
							|  |  |  |                          'json.encoder') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestCTest(CTest): | 
					
						
							|  |  |  |     def test_cjson(self): | 
					
						
							|  |  |  |         self.assertEqual(self.json.scanner.make_scanner.__module__, '_json') | 
					
						
							|  |  |  |         self.assertEqual(self.json.decoder.scanstring.__module__, '_json') | 
					
						
							|  |  |  |         self.assertEqual(self.json.encoder.c_make_encoder.__module__, '_json') | 
					
						
							|  |  |  |         self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, | 
					
						
							|  |  |  |                          '_json') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | here = os.path.dirname(__file__) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_suite(): | 
					
						
							|  |  |  |     suite = additional_tests() | 
					
						
							|  |  |  |     loader = unittest.TestLoader() | 
					
						
							|  |  |  |     for fn in os.listdir(here): | 
					
						
							|  |  |  |         if fn.startswith("test") and fn.endswith(".py"): | 
					
						
							| 
									
										
										
										
											2010-11-30 03:03:30 +00:00
										 |  |  |             modname = "test.json_tests." + fn[:-3] | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             __import__(modname) | 
					
						
							|  |  |  |             module = sys.modules[modname] | 
					
						
							|  |  |  |             suite.addTests(loader.loadTestsFromModule(module)) | 
					
						
							|  |  |  |     return suite | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def additional_tests(): | 
					
						
							|  |  |  |     suite = unittest.TestSuite() | 
					
						
							|  |  |  |     for mod in (json, json.encoder, json.decoder): | 
					
						
							|  |  |  |         suite.addTest(doctest.DocTestSuite(mod)) | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |     suite.addTest(TestPyTest('test_pyjson')) | 
					
						
							|  |  |  |     suite.addTest(TestCTest('test_cjson')) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     return suite | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     suite = test_suite() | 
					
						
							|  |  |  |     runner = unittest.TextTestRunner() | 
					
						
							|  |  |  |     runner.run(suite) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) | 
					
						
							|  |  |  |     main() |