14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport json 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport doctest 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# import json with and without accelerations 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmcjson = test_support.import_fresh_module('json', fresh=['_json']) 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpyjson = test_support.import_fresh_module('json', blocked=['_json']) 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# create two base classes that will be used by the other tests 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass PyTest(unittest.TestCase): 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm json = pyjson 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm loads = staticmethod(pyjson.loads) 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dumps = staticmethod(pyjson.dumps) 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm@unittest.skipUnless(cjson, 'requires _json') 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CTest(unittest.TestCase): 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if cjson is not None: 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm json = cjson 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm loads = staticmethod(cjson.loads) 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dumps = staticmethod(cjson.dumps) 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# test PyTest and CTest checking if the functions come from the right module 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestPyTest(PyTest): 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_pyjson(self): 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.scanner.make_scanner.__module__, 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'json.scanner') 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.decoder.scanstring.__module__, 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'json.decoder') 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'json.encoder') 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestCTest(CTest): 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_cjson(self): 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.scanner.make_scanner.__module__, '_json') 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.decoder.scanstring.__module__, '_json') 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.encoder.c_make_encoder.__module__, '_json') 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__, 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '_json') 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhere = os.path.dirname(__file__) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite(): 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = additional_tests() 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm loader = unittest.TestLoader() 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for fn in os.listdir(here): 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if fn.startswith("test") and fn.endswith(".py"): 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm modname = "json.tests." + fn[:-3] 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __import__(modname) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm module = sys.modules[modname] 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTests(loader.loadTestsFromModule(module)) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return suite 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef additional_tests(): 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for mod in (json, json.encoder, json.decoder): 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(doctest.DocTestSuite(mod)) 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(TestPyTest('test_pyjson')) 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(TestCTest('test_cjson')) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return suite 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef main(): 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = test_suite() 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner() 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(suite) 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm main() 74