blob: 7f9094fa7bd4e61dd494651cdd7ac042148c50e8 [file] [log] [blame]
Tim Peters2a799bf2002-12-16 20:18:38 +00001import unittest
Alexander Belopolskycf86e362010-07-23 19:25:47 +00002import sys
Antoine Pitrou392f4132014-10-03 11:25:30 +02003
Hai Shia7f5d932020-08-04 00:41:24 +08004from test.support.import_helper import import_fresh_module
5
Georg Brandle5a0e0a2012-02-20 23:37:36 +01006
Alexander Belopolskycf86e362010-07-23 19:25:47 +00007TESTS = 'test.datetimetester'
Georg Brandle5a0e0a2012-02-20 23:37:36 +01008
Miss Islington (bot)ef7c7292021-10-01 00:36:17 -07009def load_tests(loader, tests, pattern):
10 try:
11 pure_tests = import_fresh_module(TESTS, fresh=['datetime', '_strptime'],
12 blocked=['_datetime'])
13 fast_tests = import_fresh_module(TESTS, fresh=['datetime',
14 '_datetime', '_strptime'])
15 finally:
16 # XXX: import_fresh_module() is supposed to leave sys.module cache untouched,
17 # XXX: but it does not, so we have to cleanup ourselves.
18 for modname in ['datetime', '_datetime', '_strptime']:
19 sys.modules.pop(modname, None)
Tim Peters2a799bf2002-12-16 20:18:38 +000020
Miss Islington (bot)ef7c7292021-10-01 00:36:17 -070021 test_modules = [pure_tests, fast_tests]
22 test_suffixes = ["_Pure", "_Fast"]
23 # XXX(gb) First run all the _Pure tests, then all the _Fast tests. You might
24 # not believe this, but in spite of all the sys.modules trickery running a _Pure
25 # test last will leave a mix of pure and native datetime stuff lying around.
26 for module, suffix in zip(test_modules, test_suffixes):
27 test_classes = []
28 for name, cls in module.__dict__.items():
29 if not isinstance(cls, type):
30 continue
31 if issubclass(cls, unittest.TestCase):
32 test_classes.append(cls)
33 elif issubclass(cls, unittest.TestSuite):
34 suit = cls()
35 test_classes.extend(type(test) for test in suit)
36 test_classes = sorted(set(test_classes), key=lambda cls: cls.__qualname__)
37 for cls in test_classes:
38 cls.__name__ += suffix
39 cls.__qualname__ += suffix
40 @classmethod
41 def setUpClass(cls_, module=module):
42 cls_._save_sys_modules = sys.modules.copy()
43 sys.modules[TESTS] = module
44 sys.modules['datetime'] = module.datetime_module
45 sys.modules['_strptime'] = module._strptime
46 @classmethod
47 def tearDownClass(cls_):
48 sys.modules.clear()
49 sys.modules.update(cls_._save_sys_modules)
50 cls.setUpClass = setUpClass
51 cls.tearDownClass = tearDownClass
52 tests.addTests(loader.loadTestsFromTestCase(cls))
53 return tests
Tim Peters528ca532004-09-16 01:30:50 +000054
Tim Peters2a799bf2002-12-16 20:18:38 +000055
56if __name__ == "__main__":
Miss Islington (bot)ef7c7292021-10-01 00:36:17 -070057 unittest.main()