mirror of
				https://github.com/python/cpython.git
				synced 2025-10-28 12:15:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import sys
 | |
| import json
 | |
| import doctest
 | |
| 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')
 | |
| 
 | |
| 
 | |
| 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"):
 | |
|             modname = "test.json_tests." + fn[:-3]
 | |
|             __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))
 | |
|     suite.addTest(TestPyTest('test_pyjson'))
 | |
|     suite.addTest(TestCTest('test_cjson'))
 | |
|     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()
 | 
