| 
									
										
										
										
											2002-12-16 20:18:38 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2010-07-23 19:25:47 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2024-06-08 10:13:53 +02:00
										 |  |  | import functools | 
					
						
							| 
									
										
										
										
											2014-10-03 11:25:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-04 00:41:24 +08:00
										 |  |  | from test.support.import_helper import import_fresh_module | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-20 23:37:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 19:25:47 +00:00
										 |  |  | TESTS = 'test.datetimetester' | 
					
						
							| 
									
										
										
										
											2012-02-20 23:37:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-01 10:57:58 +03:00
										 |  |  | def load_tests(loader, tests, pattern): | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2023-03-23 10:36:47 -04:00
										 |  |  |         pure_tests = import_fresh_module(TESTS, | 
					
						
							|  |  |  |                                          fresh=['datetime', '_pydatetime', '_strptime'], | 
					
						
							|  |  |  |                                          blocked=['_datetime']) | 
					
						
							|  |  |  |         fast_tests = import_fresh_module(TESTS, | 
					
						
							|  |  |  |                                          fresh=['datetime', '_strptime'], | 
					
						
							|  |  |  |                                          blocked=['_pydatetime']) | 
					
						
							| 
									
										
										
										
											2021-10-01 10:57:58 +03:00
										 |  |  |     finally: | 
					
						
							|  |  |  |         # XXX: import_fresh_module() is supposed to leave sys.module cache untouched, | 
					
						
							|  |  |  |         # XXX: but it does not, so we have to cleanup ourselves. | 
					
						
							|  |  |  |         for modname in ['datetime', '_datetime', '_strptime']: | 
					
						
							|  |  |  |             sys.modules.pop(modname, None) | 
					
						
							| 
									
										
										
										
											2010-07-23 19:25:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-01 10:57:58 +03:00
										 |  |  |     test_modules = [pure_tests, fast_tests] | 
					
						
							|  |  |  |     test_suffixes = ["_Pure", "_Fast"] | 
					
						
							|  |  |  |     # XXX(gb) First run all the _Pure tests, then all the _Fast tests.  You might | 
					
						
							|  |  |  |     # not believe this, but in spite of all the sys.modules trickery running a _Pure | 
					
						
							|  |  |  |     # test last will leave a mix of pure and native datetime stuff lying around. | 
					
						
							|  |  |  |     for module, suffix in zip(test_modules, test_suffixes): | 
					
						
							|  |  |  |         test_classes = [] | 
					
						
							|  |  |  |         for name, cls in module.__dict__.items(): | 
					
						
							|  |  |  |             if not isinstance(cls, type): | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             if issubclass(cls, unittest.TestCase): | 
					
						
							|  |  |  |                 test_classes.append(cls) | 
					
						
							|  |  |  |             elif issubclass(cls, unittest.TestSuite): | 
					
						
							|  |  |  |                 suit = cls() | 
					
						
							|  |  |  |                 test_classes.extend(type(test) for test in suit) | 
					
						
							|  |  |  |         test_classes = sorted(set(test_classes), key=lambda cls: cls.__qualname__) | 
					
						
							|  |  |  |         for cls in test_classes: | 
					
						
							|  |  |  |             cls.__name__ += suffix | 
					
						
							|  |  |  |             cls.__qualname__ += suffix | 
					
						
							| 
									
										
										
										
											2024-06-08 10:13:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             @functools.wraps(cls, updated=()) | 
					
						
							|  |  |  |             class Wrapper(cls): | 
					
						
							|  |  |  |                 @classmethod | 
					
						
							|  |  |  |                 def setUpClass(cls_, module=module): | 
					
						
							|  |  |  |                     cls_._save_sys_modules = sys.modules.copy() | 
					
						
							|  |  |  |                     sys.modules[TESTS] = module | 
					
						
							|  |  |  |                     sys.modules['datetime'] = module.datetime_module | 
					
						
							|  |  |  |                     if hasattr(module, '_pydatetime'): | 
					
						
							|  |  |  |                         sys.modules['_pydatetime'] = module._pydatetime | 
					
						
							|  |  |  |                     sys.modules['_strptime'] = module._strptime | 
					
						
							|  |  |  |                     super().setUpClass() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 @classmethod | 
					
						
							|  |  |  |                 def tearDownClass(cls_): | 
					
						
							|  |  |  |                     super().tearDownClass() | 
					
						
							|  |  |  |                     sys.modules.clear() | 
					
						
							|  |  |  |                     sys.modules.update(cls_._save_sys_modules) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             tests.addTests(loader.loadTestsFromTestCase(Wrapper)) | 
					
						
							| 
									
										
										
										
											2021-10-01 10:57:58 +03:00
										 |  |  |     return tests | 
					
						
							| 
									
										
										
										
											2004-09-16 01:30:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-16 20:18:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2021-10-01 10:57:58 +03:00
										 |  |  |     unittest.main() |