[Python-checkins] r77981 - in python/branches/py3k: Lib/test/test_with.py

benjamin.peterson python-checkins at python.org
Fri Feb 5 03:07:05 CET 2010


Author: benjamin.peterson
Date: Fri Feb  5 03:07:05 2010
New Revision: 77981

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

........
  r77980 | benjamin.peterson | 2010-02-04 19:53:27 -0600 (Thu, 04 Feb 2010) | 1 line
  
  add a test for #7853; the exception must be normalized for with
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_with.py

Modified: python/branches/py3k/Lib/test/test_with.py
==============================================================================
--- python/branches/py3k/Lib/test/test_with.py	(original)
+++ python/branches/py3k/Lib/test/test_with.py	Fri Feb  5 03:07:05 2010
@@ -215,11 +215,17 @@
     def raiseTestException(self):
         raise self.TEST_EXCEPTION
 
-    def assertAfterWithManagerInvariantsWithError(self, mock_manager):
+    def assertAfterWithManagerInvariantsWithError(self, mock_manager,
+                                                  exc_type=None):
         self.assertTrue(mock_manager.enter_called)
         self.assertTrue(mock_manager.exit_called)
-        self.assertEqual(mock_manager.exit_args[0], RuntimeError)
-        self.assertEqual(mock_manager.exit_args[1], self.TEST_EXCEPTION)
+        if exc_type is None:
+            self.assertEqual(mock_manager.exit_args[1], self.TEST_EXCEPTION)
+            exc_type = type(self.TEST_EXCEPTION)
+        self.assertEqual(mock_manager.exit_args[0], exc_type)
+        # Test the __exit__ arguments. Issue #7853
+        self.assertIsInstance(mock_manager.exit_args[1], exc_type)
+        self.assertIsNot(mock_manager.exit_args[2], None)
 
     def assertAfterWithGeneratorInvariantsWithError(self, mock_generator):
         self.assertTrue(mock_generator.yielded)
@@ -357,6 +363,17 @@
         self.assertAfterWithManagerInvariantsWithError(cm)
         self.assertAfterWithGeneratorInvariantsWithError(self.resource)
 
+    @unittest.expectedFailure
+    def testExceptionNormalized(self):
+        cm = mock_contextmanager_generator()
+        def shouldThrow():
+            with cm as self.resource:
+                # Note this relies on the fact that 1 // 0 produces an exception
+                # that is not normalized immediately.
+                1 // 0
+        self.assertRaises(ZeroDivisionError, shouldThrow)
+        self.assertAfterWithManagerInvariantsWithError(cm, ZeroDivisionError)
+
     def testNestedSingleStatements(self):
         mock_a = mock_contextmanager_generator()
         mock_b = mock_contextmanager_generator()


More information about the Python-checkins mailing list