summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-11-13 16:31:51 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-11-13 16:31:51 (GMT)
commitca154091950023d209819484d2d5c51ddcc1e882 (patch)
tree17e87f66d5f4a67c87e3e9f016dee4783e67d53a
parent8f6713f46d774942beb7984792a7a4c8666aab9a (diff)
downloadcpython-ca154091950023d209819484d2d5c51ddcc1e882.zip
cpython-ca154091950023d209819484d2d5c51ddcc1e882.tar.gz
cpython-ca154091950023d209819484d2d5c51ddcc1e882.tar.bz2
Merged revisions 76240 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r76240 | antoine.pitrou | 2009-11-13 17:29:04 +0100 (ven., 13 nov. 2009) | 6 lines Issue #6551: test_zipimport could import and then destroy some modules of the encodings package, which would make other tests fail further down the road because the internally cached encoders and decoders would point to empty global variables. ........
-rw-r--r--Lib/test/support.py17
-rw-r--r--Lib/test/test_importhooks.py5
-rw-r--r--Lib/test/test_pkg.py6
-rw-r--r--Misc/NEWS5
4 files changed, 26 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
diff --git a/Misc/NEWS b/Misc/NEWS
index e4791cf..fd56e89 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -144,6 +144,11 @@ Extension Modules
Tests
-----
+- Issue #6551: test_zipimport could import and then destroy some modules of
+ the encodings package, which would make other tests fail further down
+ the road because the internally cached encoders and decoders would point
+ to empty global variables.
+
- Issue #7295: Do not use a hardcoded file name in test_tarfile.
- Issue #7270: Add some dedicated unit tests for multi-thread synchronization