diff options
author | Benjamin Peterson <benjamin@python.org> | 2010-02-05 01:53:27 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2010-02-05 01:53:27 (GMT) |
commit | 4a7ff1d80abf841287043c5965d1c1c74a1c694a (patch) | |
tree | 3b70da6b71fae72a1477298ce0fab87018edbcf5 | |
parent | f7610b23de274199185bab686efbf963aca89c47 (diff) | |
download | cpython-4a7ff1d80abf841287043c5965d1c1c74a1c694a.zip cpython-4a7ff1d80abf841287043c5965d1c1c74a1c694a.tar.gz cpython-4a7ff1d80abf841287043c5965d1c1c74a1c694a.tar.bz2 |
add a test for #7853; the exception must be normalized for with
-rw-r--r-- | Lib/test/test_with.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/Lib/test/test_with.py b/Lib/test/test_with.py index 3e33e31..4b947d8 100644 --- a/Lib/test/test_with.py +++ b/Lib/test/test_with.py @@ -213,11 +213,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) @@ -355,6 +361,17 @@ class ExceptionalTestCase(unittest.TestCase, ContextmanagerAssertionMixin): 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() |