Merged revisions 71465 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71465 | nick.coghlan | 2009-04-11 23:31:31 +1000 (Sat, 11 Apr 2009) | 1 line

  Issue 5354: Provide a standardised testing mechanism for doing fresh imports of modules, including the ability to block extension modules in order to test the pure Python fallbacks
........
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index d04c3dd..1f377ad 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -10,18 +10,14 @@
 
 import warnings as original_warnings
 
-sys.modules['_warnings'] = 0
-del sys.modules['warnings']
-
-import warnings as py_warnings
-
+py_warnings = support.import_fresh_module('warnings', ['_warnings'])
+# XXX (ncoghlan 20090412):
+# Something in Py3k doesn't like sharing the same instance of
+# _warnings between original_warnings and c_warnings
+# Will leave issue 5354 open until I understand why 3.x breaks
+# without the next line, while 2.x doesn't care
 del sys.modules['_warnings']
-del sys.modules['warnings']
-
-import warnings as c_warnings
-
-sys.modules['warnings'] = original_warnings
-
+c_warnings = support.import_fresh_module('warnings')
 
 @contextmanager
 def warnings_state(module):
@@ -351,9 +347,21 @@
 class CWarnTests(BaseTest, WarnTests):
     module = c_warnings
 
+    # As an early adopter, we sanity check the
+    # test.support.import_fresh_module utility function
+    def test_accelerated(self):
+        self.assertFalse(original_warnings is self.module)
+        self.assertFalse(hasattr(self.module.warn, '__code__'))
+
 class PyWarnTests(BaseTest, WarnTests):
     module = py_warnings
 
+    # As an early adopter, we sanity check the
+    # test.support.import_fresh_module utility function
+    def test_pure_python(self):
+        self.assertFalse(original_warnings is self.module)
+        self.assertTrue(hasattr(self.module.warn, '__code__'))
+
 
 class WCmdLineTests(unittest.TestCase):