1 import os
2 import json
3 import doctest
4 import unittest
5
6 from test import support
7 from test.support import import_helper
8
9
10 # import json with and without accelerations
11 cjson = import_helper.import_fresh_module('json', fresh=['_json'])
12 pyjson = import_helper.import_fresh_module('json', blocked=['_json'])
13 # JSONDecodeError is cached inside the _json module
14 cjson.JSONDecodeError = cjson.decoder.JSONDecodeError = json.JSONDecodeError
15
16 # create two base classes that will be used by the other tests
17 class ESC[4;38;5;81mPyTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
18 json = pyjson
19 loads = staticmethod(pyjson.loads)
20 dumps = staticmethod(pyjson.dumps)
21 JSONDecodeError = staticmethod(pyjson.JSONDecodeError)
22
23 @unittest.skipUnless(cjson, 'requires _json')
24 class ESC[4;38;5;81mCTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
25 if cjson is not None:
26 json = cjson
27 loads = staticmethod(cjson.loads)
28 dumps = staticmethod(cjson.dumps)
29 JSONDecodeError = staticmethod(cjson.JSONDecodeError)
30
31 # test PyTest and CTest checking if the functions come from the right module
32 class ESC[4;38;5;81mTestPyTest(ESC[4;38;5;149mPyTest):
33 def test_pyjson(self):
34 self.assertEqual(self.json.scanner.make_scanner.__module__,
35 'json.scanner')
36 self.assertEqual(self.json.decoder.scanstring.__module__,
37 'json.decoder')
38 self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__,
39 'json.encoder')
40
41 class ESC[4;38;5;81mTestCTest(ESC[4;38;5;149mCTest):
42 def test_cjson(self):
43 self.assertEqual(self.json.scanner.make_scanner.__module__, '_json')
44 self.assertEqual(self.json.decoder.scanstring.__module__, '_json')
45 self.assertEqual(self.json.encoder.c_make_encoder.__module__, '_json')
46 self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__,
47 '_json')
48
49
50 def load_tests(loader, _, pattern):
51 suite = unittest.TestSuite()
52 for mod in (json, json.encoder, json.decoder):
53 suite.addTest(doctest.DocTestSuite(mod))
54 suite.addTest(TestPyTest('test_pyjson'))
55 suite.addTest(TestCTest('test_cjson'))
56
57 pkg_dir = os.path.dirname(__file__)
58 return support.load_package_tests(pkg_dir, loader, suite, pattern)