blob: d659f369d54e46fda5fd0d9309202fe8e68b7228 [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
Alexander Belopolskycf86e362010-07-23 19:25:47 +00004from test.support import import_fresh_module, run_unittest
Georg Brandle5a0e0a2012-02-20 23:37:36 +01005
Alexander Belopolskycf86e362010-07-23 19:25:47 +00006TESTS = 'test.datetimetester'
Georg Brandle5a0e0a2012-02-20 23:37:36 +01007
Alexander Belopolskycf86e362010-07-23 19:25:47 +00008try:
9 pure_tests = import_fresh_module(TESTS, fresh=['datetime', '_strptime'],
10 blocked=['_datetime'])
11 fast_tests = import_fresh_module(TESTS, fresh=['datetime',
12 '_datetime', '_strptime'])
13finally:
Antoine Pitrou392f4132014-10-03 11:25:30 +020014 # XXX: import_fresh_module() is supposed to leave sys.module cache untouched,
15 # XXX: but it does not, so we have to cleanup ourselves.
16 for modname in ['datetime', '_datetime', '_strptime']:
17 sys.modules.pop(modname, None)
Alexander Belopolskycf86e362010-07-23 19:25:47 +000018test_modules = [pure_tests, fast_tests]
19test_suffixes = ["_Pure", "_Fast"]
Georg Brandle5a0e0a2012-02-20 23:37:36 +010020# XXX(gb) First run all the _Pure tests, then all the _Fast tests. You might
21# not believe this, but in spite of all the sys.modules trickery running a _Pure
22# test last will leave a mix of pure and native datetime stuff lying around.
Utkarsh Upadhyay287c5592017-07-21 02:14:54 +020023all_test_classes = []
Tim Peters2a799bf2002-12-16 20:18:38 +000024
Alexander Belopolskycf86e362010-07-23 19:25:47 +000025for module, suffix in zip(test_modules, test_suffixes):
Alexander Belopolsky4719ae72016-07-24 14:39:28 -040026 test_classes = []
Alexander Belopolskycf86e362010-07-23 19:25:47 +000027 for name, cls in module.__dict__.items():
Alexander Belopolsky4719ae72016-07-24 14:39:28 -040028 if not isinstance(cls, type):
Georg Brandle5a0e0a2012-02-20 23:37:36 +010029 continue
Alexander Belopolsky4719ae72016-07-24 14:39:28 -040030 if issubclass(cls, unittest.TestCase):
31 test_classes.append(cls)
32 elif issubclass(cls, unittest.TestSuite):
33 suit = cls()
34 test_classes.extend(type(test) for test in suit)
Serhiy Storchaka34b54872017-07-02 22:36:12 +030035 test_classes = sorted(set(test_classes), key=lambda cls: cls.__qualname__)
Alexander Belopolsky4719ae72016-07-24 14:39:28 -040036 for cls in test_classes:
Utkarsh Upadhyay287c5592017-07-21 02:14:54 +020037 cls.__name__ += suffix
38 cls.__qualname__ += suffix
Georg Brandle5a0e0a2012-02-20 23:37:36 +010039 @classmethod
40 def setUpClass(cls_, module=module):
41 cls_._save_sys_modules = sys.modules.copy()
42 sys.modules[TESTS] = module
43 sys.modules['datetime'] = module.datetime_module
44 sys.modules['_strptime'] = module._strptime
45 @classmethod
46 def tearDownClass(cls_):
47 sys.modules.clear()
48 sys.modules.update(cls_._save_sys_modules)
49 cls.setUpClass = setUpClass
50 cls.tearDownClass = tearDownClass
Utkarsh Upadhyay287c5592017-07-21 02:14:54 +020051 all_test_classes.extend(test_classes)
Tim Peters528ca532004-09-16 01:30:50 +000052
Tim Peters2a799bf2002-12-16 20:18:38 +000053def test_main():
Utkarsh Upadhyay287c5592017-07-21 02:14:54 +020054 run_unittest(*all_test_classes)
Tim Peters2a799bf2002-12-16 20:18:38 +000055
56if __name__ == "__main__":
57 test_main()