import os | |
import sys | |
import json | |
import doctest | |
import unittest | |
from test import test_support | |
# import json with and without accelerations | |
cjson = test_support.import_fresh_module('json', fresh=['_json']) | |
pyjson = test_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 = "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() |