]> granicus.if.org Git - python/commitdiff
Using CleanImport to revert a reload of the os module doesn't work due to function...
authorNick Coghlan <ncoghlan@gmail.com>
Sun, 18 Oct 2009 05:38:48 +0000 (05:38 +0000)
committerNick Coghlan <ncoghlan@gmail.com>
Sun, 18 Oct 2009 05:38:48 +0000 (05:38 +0000)
Lib/test/test_imp.py
Lib/test/test_import.py

index 1e629409398bea30dcc465d2e40b432fb490f31d..77e44bec923a2e7fd68ff3958b181a05dbedb194 100644 (file)
@@ -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)
 
index 4e0a6860fcf878fb5a1b8720b78405290b501bfc..31375dc6eeeafbfaf36e7e58e8d9af4bbb509412 100644 (file)
@@ -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