[Python-checkins] r77980 - python/trunk/Lib/test/test_with.py

benjamin.peterson python-checkins at python.org
Fri Feb 5 02:53:28 CET 2010


Author: benjamin.peterson
Date: Fri Feb 5 02:53:27 2010
New Revision: 77980
Log:
add a test for #7853; the exception must be normalized for with
Modified:
 python/trunk/Lib/test/test_with.py
Modified: python/trunk/Lib/test/test_with.py
==============================================================================
--- python/trunk/Lib/test/test_with.py	(original)
+++ python/trunk/Lib/test/test_with.py	Fri Feb 5 02:53:27 2010
@@ -213,11 +213,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)
@@ -355,6 +361,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

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