blob: d9ddb32363a0d3ad9ea05c0d17003fcae3ecd0f0 [file] [log] [blame]
Tim Peters2a799bf2002-12-16 20:18:38 +00001import unittest
Alexander Belopolskycf86e362010-07-23 19:25:47 +00002import sys
3from test.support import import_fresh_module, run_unittest
Georg Brandle5a0e0a2012-02-20 23:37:36 +01004
Alexander Belopolskycf86e362010-07-23 19:25:47 +00005TESTS = 'test.datetimetester'
Georg Brandle5a0e0a2012-02-20 23:37:36 +01006
Alexander Belopolskycf86e362010-07-23 19:25:47 +00007# XXX: import_fresh_module() is supposed to leave sys.module cache untouched,
8# XXX: but it does not, so we have to save and restore it ourselves.
9save_sys_modules = sys.modules.copy()
10try:
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'])
15finally:
16 sys.modules.clear()
17 sys.modules.update(save_sys_modules)
18test_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.
23test_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):
26 for name, cls in module.__dict__.items():
Georg Brandle5a0e0a2012-02-20 23:37:36 +010027 if not (isinstance(cls, type) and issubclass(cls, unittest.TestCase)):
28 continue
29 cls.__name__ = name + suffix
30 @classmethod
31 def setUpClass(cls_, module=module):
32 cls_._save_sys_modules = sys.modules.copy()
33 sys.modules[TESTS] = module
34 sys.modules['datetime'] = module.datetime_module
35 sys.modules['_strptime'] = module._strptime
36 @classmethod
37 def tearDownClass(cls_):
38 sys.modules.clear()
39 sys.modules.update(cls_._save_sys_modules)
40 cls.setUpClass = setUpClass
41 cls.tearDownClass = tearDownClass
42 test_classes.append(cls)
Tim Peters528ca532004-09-16 01:30:50 +000043
Tim Peters2a799bf2002-12-16 20:18:38 +000044def test_main():
Georg Brandle5a0e0a2012-02-20 23:37:36 +010045 run_unittest(*test_classes)
Tim Peters2a799bf2002-12-16 20:18:38 +000046
47if __name__ == "__main__":
48 test_main()