summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@gmail.com>2017-03-03 03:20:00 (GMT)
committerYury Selivanov <yury@magic.io>2017-03-03 03:28:07 (GMT)
commitdea5101ae101aefed14de98e6bb1658f4cae8712 (patch)
treed64ec52013fc547f9420c82c065e09d340703d1b /Lib/test
parent01e5230ef0b28658cf7311be199363eda98808bd (diff)
downloadcpython-dea5101ae101aefed14de98e6bb1658f4cae8712.zip
cpython-dea5101ae101aefed14de98e6bb1658f4cae8712.tar.gz
cpython-dea5101ae101aefed14de98e6bb1658f4cae8712.tar.bz2
bpo-28893: Set __cause__ for errors in async iteration protocol (#407)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_coroutines.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
index 78439a2..b4c7b5b 100644
--- a/Lib/test/test_coroutines.py
+++ b/Lib/test/test_coroutines.py
@@ -1680,6 +1680,44 @@ class CoroutineTest(unittest.TestCase):
warnings.simplefilter("error")
run_async(foo())
+ def test_for_11(self):
+ class F:
+ def __aiter__(self):
+ return self
+ def __anext__(self):
+ return self
+ def __await__(self):
+ 1 / 0
+
+ async def main():
+ async for _ in F():
+ pass
+
+ with self.assertRaisesRegex(TypeError,
+ 'an invalid object from __anext__') as c:
+ main().send(None)
+
+ err = c.exception
+ self.assertIsInstance(err.__cause__, ZeroDivisionError)
+
+ def test_for_12(self):
+ class F:
+ def __aiter__(self):
+ return self
+ def __await__(self):
+ 1 / 0
+
+ async def main():
+ async for _ in F():
+ pass
+
+ with self.assertRaisesRegex(TypeError,
+ 'an invalid object from __aiter__') as c:
+ main().send(None)
+
+ err = c.exception
+ self.assertIsInstance(err.__cause__, ZeroDivisionError)
+
def test_for_tuple(self):
class Done(Exception): pass