]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 77980 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Fri, 5 Feb 2010 02:07:05 +0000 (02:07 +0000)
committerBenjamin Peterson <benjamin@python.org>
Fri, 5 Feb 2010 02:07:05 +0000 (02:07 +0000)
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
........

Lib/test/test_with.py

index f59032eed688c0ae0e395379c593b8ed29b26a22..3cbae02e06291f94ffe6bc7f9d9347b237128425 100644 (file)
@@ -215,11 +215,17 @@ class ContextmanagerAssertionMixin(object):
     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 @@ class ExceptionalTestCase(ContextmanagerAssertionMixin, unittest.TestCase):
         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()