diff options
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/support.py | 17 | ||||
-rw-r--r-- | Lib/test/test_importhooks.py | 5 | ||||
-rw-r--r-- | Lib/test/test_pkg.py | 6 |
3 files changed, 21 insertions, 7 deletions
diff --git a/Lib/test/support.py b/Lib/test/support.py index 5672a20..18fb391 100644 --- a/Lib/test/support.py +++ b/Lib/test/support.py @@ -919,6 +919,23 @@ def run_doctest(module, verbosity=None): (module.__name__, t)) return f, t + +#======================================================================= +# Support for saving and restoring the imported modules. + +def modules_setup(): + return sys.modules.copy(), + +def modules_cleanup(oldmodules): + # Encoders/decoders are registered permanently within the internal + # codec cache. If we destroy the corresponding modules their + # globals will be set to None which will trip up the cached functions. + encodings = [(k, v) for k, v in sys.modules.items() + if k.startswith('encodings.')] + sys.modules.clear() + sys.modules.update(encodings) + sys.modules.update(oldmodules) + #======================================================================= # Threading support to prevent reporting refleaks when running regrtest.py -R diff --git a/Lib/test/test_importhooks.py b/Lib/test/test_importhooks.py index bf2870d..1da30b7 100644 --- a/Lib/test/test_importhooks.py +++ b/Lib/test/test_importhooks.py @@ -143,15 +143,14 @@ class ImportHooksBaseTestCase(unittest.TestCase): self.meta_path = sys.meta_path[:] self.path_hooks = sys.path_hooks[:] sys.path_importer_cache.clear() - self.modules_before = sys.modules.copy() + self.modules_before = support.modules_setup() def tearDown(self): sys.path[:] = self.path sys.meta_path[:] = self.meta_path sys.path_hooks[:] = self.path_hooks sys.path_importer_cache.clear() - sys.modules.clear() - sys.modules.update(self.modules_before) + support.modules_cleanup(*self.modules_before) class ImportHooksTestCase(ImportHooksBaseTestCase): diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index 0c568bb..2e293f4 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -48,13 +48,11 @@ class TestPkg(unittest.TestCase): self.root = None self.pkgname = None self.syspath = list(sys.path) - self.sysmodules = sys.modules.copy() + self.modules_before = support.modules_setup() def tearDown(self): sys.path[:] = self.syspath - sys.modules.clear() - sys.modules.update(self.sysmodules) - del self.sysmodules + support.modules_cleanup(*self.modules_before) cleanout(self.root) # delete all modules concerning the tested hiearchy |