summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-12-10 23:49:33 +0000
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-12-10 23:49:33 +0000
commit10b24e87e5e5f0ac421ab91fe993baf6b6e319c7 (patch)
treeabbf514e3ca75b332f6684af517a5e6b2d65459c /Lib/test
parentee763951dc56d4cdf0d39a12214bc1342fc3d93a (diff)
downloadcpython-git-10b24e87e5e5f0ac421ab91fe993baf6b6e319c7.tar.gz
Merged revisions 67688 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r67688 | amaury.forgeotdarc | 2008-12-11 00:22:49 +0100 (jeu., 11 déc. 2008) | 6 lines #4559: When a context manager's __exit__() method returns an object whose conversion to bool raises an exception, 'with' loses that exception. Reviewed by Jeffrey Yasskin. Already ported to 2.5, will port to 2.6 and 3.0 ........
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_with.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/test_with.py b/Lib/test/test_with.py
index 43f3271228..b192429cf7 100644
--- a/Lib/test/test_with.py
+++ b/Lib/test/test_with.py
@@ -505,6 +505,36 @@ class ExceptionalTestCase(ContextmanagerAssertionMixin, unittest.TestCase):
self.assertRaises(GeneratorExit, shouldThrow)
+ def testErrorsInBool(self):
+ # issue4589: __exit__ return code may raise an exception
+ # when looking at its truth value.
+
+ class cm(object):
+ def __init__(self, bool_conversion):
+ class Bool:
+ def __bool__(self):
+ return bool_conversion()
+ self.exit_result = Bool()
+ def __enter__(self):
+ return 3
+ def __exit__(self, a, b, c):
+ return self.exit_result
+
+ def trueAsBool():
+ with cm(lambda: True):
+ self.fail("Should NOT see this")
+ trueAsBool()
+
+ def falseAsBool():
+ with cm(lambda: False):
+ self.fail("Should raise")
+ self.assertRaises(AssertionError, falseAsBool)
+
+ def failAsBool():
+ with cm(lambda: 1//0):
+ self.fail("Should NOT see this")
+ self.assertRaises(ZeroDivisionError, failAsBool)
+
class NonLocalFlowControlTestCase(unittest.TestCase):