[Python-checkins] r87925 - in python/branches/py3k/Lib/test: support.py test_zipimport_support.py

nick.coghlan python-checkins at python.org
Tue Jan 11 11:05:20 CET 2011


Author: nick.coghlan
Date: Tue Jan 11 11:05:20 2011
New Revision: 87925
Log:
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Modified:
 python/branches/py3k/Lib/test/support.py
 python/branches/py3k/Lib/test/test_zipimport_support.py
Modified: python/branches/py3k/Lib/test/support.py
==============================================================================
--- python/branches/py3k/Lib/test/support.py	(original)
+++ python/branches/py3k/Lib/test/support.py	Tue Jan 11 11:05:20 2011
@@ -1199,6 +1199,12 @@
 if k.startswith('encodings.')]
 sys.modules.clear()
 sys.modules.update(encodings)
+ # XXX: This kind of problem can affect more than just encodings. In particular
+ # extension modules (such as _ssl) don't cope with releoding properly.
+ # Really, test modules should be cleaning out the test specific modules they
+ # know they added (ala test_runpy) rather than relying on this function (as
+ # test_importhooks and test_pkg do currently).
+ # Implicitly imported *real* modules should be left alone (see issue 10556).
 sys.modules.update(oldmodules)
 
 #=======================================================================
Modified: python/branches/py3k/Lib/test/test_zipimport_support.py
==============================================================================
--- python/branches/py3k/Lib/test/test_zipimport_support.py	(original)
+++ python/branches/py3k/Lib/test/test_zipimport_support.py	Tue Jan 11 11:05:20 2011
@@ -13,6 +13,7 @@
 import inspect
 import linecache
 import pdb
+import unittest
 from test.script_helper import (spawn_python, kill_python, assert_python_ok,
 temp_dir, make_script, make_zip_script)
 
@@ -29,7 +30,6 @@
 
 # Retrieve some helpers from other test cases
 from test import test_doctest, sample_doctest
-from test.test_importhooks import ImportHooksBaseTestCase
 
 
 def _run_object_doctest(obj, module):
@@ -59,17 +59,28 @@
 
 
 
-class ZipSupportTests(ImportHooksBaseTestCase):
- # We use the ImportHooksBaseTestCase to restore
+class ZipSupportTests(unittest.TestCase):
+ # This used to use the ImportHooksBaseTestCase to restore
 # the state of the import related information
- # in the sys module after each test
+ # in the sys module after each test. However, that restores
+ # *too much* information and breaks for the invocation of
+ # of test_doctest. So we do our own thing and leave
+ # sys.modules alone.
 # We also clear the linecache and zipimport cache
 # just to avoid any bogus errors due to name reuse in the tests
 def setUp(self):
 linecache.clearcache()
 zipimport._zip_directory_cache.clear()
- ImportHooksBaseTestCase.setUp(self)
-
+ self.path = sys.path[:]
+ self.meta_path = sys.meta_path[:]
+ self.path_hooks = sys.path_hooks[:]
+ sys.path_importer_cache.clear()
+
+ def tearDown(self):
+ sys.path[:] = self.path
+ sys.meta_path[:] = self.meta_path
+ sys.path_hooks[:] = self.path_hooks
+ sys.path_importer_cache.clear()
 
 def test_inspect_getsource_issue4223(self):
 test_src = "def foo(): pass\n"


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /