Tim Peters | 2a799bf | 2002-12-16 20:18:38 +0000 | [diff] [blame] | 1 | import unittest |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 2 | import sys |
Antoine Pitrou | 392f413 | 2014-10-03 11:25:30 +0200 | [diff] [blame] | 3 | |
Hai Shi | a7f5d93 | 2020-08-04 00:41:24 +0800 | [diff] [blame] | 4 | from test.support import run_unittest |
| 5 | from test.support.import_helper import import_fresh_module |
| 6 | |
Georg Brandl | e5a0e0a | 2012-02-20 23:37:36 +0100 | [diff] [blame] | 7 | |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 8 | TESTS = 'test.datetimetester' |
Georg Brandl | e5a0e0a | 2012-02-20 23:37:36 +0100 | [diff] [blame] | 9 | |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 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: |
Antoine Pitrou | 392f413 | 2014-10-03 11:25:30 +0200 | [diff] [blame] | 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) |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 20 | test_modules = [pure_tests, fast_tests] |
| 21 | test_suffixes = ["_Pure", "_Fast"] |
Georg Brandl | e5a0e0a | 2012-02-20 23:37:36 +0100 | [diff] [blame] | 22 | # XXX(gb) First run all the _Pure tests, then all the _Fast tests. You might |
| 23 | # not believe this, but in spite of all the sys.modules trickery running a _Pure |
| 24 | # test last will leave a mix of pure and native datetime stuff lying around. |
Utkarsh Upadhyay | 287c559 | 2017-07-21 02:14:54 +0200 | [diff] [blame] | 25 | all_test_classes = [] |
Tim Peters | 2a799bf | 2002-12-16 20:18:38 +0000 | [diff] [blame] | 26 | |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 27 | for module, suffix in zip(test_modules, test_suffixes): |
Alexander Belopolsky | 4719ae7 | 2016-07-24 14:39:28 -0400 | [diff] [blame] | 28 | test_classes = [] |
Alexander Belopolsky | cf86e36 | 2010-07-23 19:25:47 +0000 | [diff] [blame] | 29 | for name, cls in module.__dict__.items(): |
Alexander Belopolsky | 4719ae7 | 2016-07-24 14:39:28 -0400 | [diff] [blame] | 30 | if not isinstance(cls, type): |
Georg Brandl | e5a0e0a | 2012-02-20 23:37:36 +0100 | [diff] [blame] | 31 | continue |
Alexander Belopolsky | 4719ae7 | 2016-07-24 14:39:28 -0400 | [diff] [blame] | 32 | if issubclass(cls, unittest.TestCase): |
| 33 | test_classes.append(cls) |
| 34 | elif issubclass(cls, unittest.TestSuite): |
| 35 | suit = cls() |
| 36 | test_classes.extend(type(test) for test in suit) |
Serhiy Storchaka | 34b5487 | 2017-07-02 22:36:12 +0300 | [diff] [blame] | 37 | test_classes = sorted(set(test_classes), key=lambda cls: cls.__qualname__) |
Alexander Belopolsky | 4719ae7 | 2016-07-24 14:39:28 -0400 | [diff] [blame] | 38 | for cls in test_classes: |
Utkarsh Upadhyay | 287c559 | 2017-07-21 02:14:54 +0200 | [diff] [blame] | 39 | cls.__name__ += suffix |
| 40 | cls.__qualname__ += suffix |
Georg Brandl | e5a0e0a | 2012-02-20 23:37:36 +0100 | [diff] [blame] | 41 | @classmethod |
| 42 | def setUpClass(cls_, module=module): |
| 43 | cls_._save_sys_modules = sys.modules.copy() |
| 44 | sys.modules[TESTS] = module |
| 45 | sys.modules['datetime'] = module.datetime_module |
| 46 | sys.modules['_strptime'] = module._strptime |
| 47 | @classmethod |
| 48 | def tearDownClass(cls_): |
| 49 | sys.modules.clear() |
| 50 | sys.modules.update(cls_._save_sys_modules) |
| 51 | cls.setUpClass = setUpClass |
| 52 | cls.tearDownClass = tearDownClass |
Utkarsh Upadhyay | 287c559 | 2017-07-21 02:14:54 +0200 | [diff] [blame] | 53 | all_test_classes.extend(test_classes) |
Tim Peters | 528ca53 | 2004-09-16 01:30:50 +0000 | [diff] [blame] | 54 | |
Tim Peters | 2a799bf | 2002-12-16 20:18:38 +0000 | [diff] [blame] | 55 | def test_main(): |
Utkarsh Upadhyay | 287c559 | 2017-07-21 02:14:54 +0200 | [diff] [blame] | 56 | run_unittest(*all_test_classes) |
Tim Peters | 2a799bf | 2002-12-16 20:18:38 +0000 | [diff] [blame] | 57 | |
| 58 | if __name__ == "__main__": |
| 59 | test_main() |