diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2009-10-18 05:38:48 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2009-10-18 05:38:48 (GMT) |
commit | 9039b83c534251d8a28a16ac25fac20c17382945 (patch) | |
tree | b4dbf28fbea47f546b26787ca9db1e4c021aa20f | |
parent | 83f1ef681ff2f0c393bc79bd0c1ccdb558634be4 (diff) | |
download | cpython-9039b83c534251d8a28a16ac25fac20c17382945.zip cpython-9039b83c534251d8a28a16ac25fac20c17382945.tar.gz cpython-9039b83c534251d8a28a16ac25fac20c17382945.tar.bz2 |
Using CleanImport to revert a reload of the os module doesn't work due to function registrations in copy_reg. The perils of reloading modules even for tests...
-rw-r--r-- | Lib/test/test_imp.py | 9 | ||||
-rw-r--r-- | Lib/test/test_import.py | 20 |
2 files changed, 24 insertions, 5 deletions
diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index 1e62940..77e44be 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -43,7 +43,14 @@ class ReloadTests(unittest.TestCase): reload().""" def test_source(self): - with test_support.CleanImport('os'): + # XXX (ncoghlan): It would be nice to use test_support.CleanImport + # here, but that breaks because the os module registers some + # handlers in copy_reg on import. Since CleanImport doesn't + # revert that registration, the module is left in a broken + # state after reversion. Reinitialising the module contents + # and just reverting os.environ to its previous state is an OK + # workaround + with test_support.EnvironmentVarGuard(): import os imp.reload(os) diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 4e0a686..31375dc 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -8,7 +8,7 @@ import py_compile import warnings import marshal from test.test_support import (unlink, TESTFN, unload, run_unittest, - check_warnings, TestFailed, CleanImport) + check_warnings, TestFailed, EnvironmentVarGuard) def remove_files(name): @@ -121,10 +121,22 @@ class ImportTest(unittest.TestCase): def testImpModule(self): # Verify that the imp module can correctly load and find .py files - import imp - with CleanImport("os"): + import imp, os + # XXX (ncoghlan): It would be nice to use test_support.CleanImport + # here, but that breaks because the os module registers some + # handlers in copy_reg on import. Since CleanImport doesn't + # revert that registration, the module is left in a broken + # state after reversion. Reinitialising the module contents + # and just reverting os.environ to its previous state is an OK + # workaround + orig_path = os.path + orig_getenv = os.getenv + with EnvironmentVarGuard(): x = imp.find_module("os") - os = imp.load_module("os", *x) + new_os = imp.load_module("os", *x) + self.assertIs(os, new_os) + self.assertIs(orig_path, new_os.path) + self.assertIsNot(orig_getenv, new_os.getenv) def test_module_with_large_stack(self, module='longlist'): # create module w/list of 65000 elements to test bug #561858 |