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