Skip to content

Commit 1220aee

Browse files
committed
add tests that check already running aclose/athrow get closed, and don't warn unawaited
1 parent 25d8a27 commit 1220aee

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

Lib/test/test_asyncgen.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,10 @@ async def gen():
393393
r'anext\(\): asynchronous generator is already running'):
394394
an.__next__()
395395

396+
with self.assertRaisesRegex(RuntimeError,
397+
r"cannot reuse already awaited __anext__\(\)/asend\(\)"):
398+
an.send(None)
399+
396400
def test_async_gen_asend_throw_concurrent_with_send(self):
397401
import types
398402

@@ -422,6 +426,10 @@ async def agenfn():
422426
r'anext\(\): asynchronous generator is already running'):
423427
gen2.throw(MyExc)
424428

429+
with self.assertRaisesRegex(RuntimeError,
430+
r"cannot reuse already awaited __anext__\(\)/asend\(\)"):
431+
gen2.send(None)
432+
425433
def test_async_gen_athrow_throw_concurrent_with_send(self):
426434
import types
427435

@@ -451,6 +459,10 @@ async def agenfn():
451459
r'athrow\(\): asynchronous generator is already running'):
452460
gen2.throw(MyExc)
453461

462+
with self.assertRaisesRegex(RuntimeError,
463+
r"cannot reuse already awaited aclose\(\)/athrow\(\)"):
464+
gen2.send(None)
465+
454466
def test_async_gen_asend_throw_concurrent_with_throw(self):
455467
import types
456468

@@ -485,6 +497,10 @@ async def agenfn():
485497
r'anext\(\): asynchronous generator is already running'):
486498
gen2.throw(MyExc)
487499

500+
with self.assertRaisesRegex(RuntimeError,
501+
r"cannot reuse already awaited __anext__\(\)/asend\(\)"):
502+
gen2.send(None)
503+
488504
def test_async_gen_athrow_throw_concurrent_with_throw(self):
489505
import types
490506

@@ -518,6 +534,10 @@ async def agenfn():
518534
r'athrow\(\): asynchronous generator is already running'):
519535
gen2.throw(MyExc)
520536

537+
with self.assertRaisesRegex(RuntimeError,
538+
r"cannot reuse already awaited aclose\(\)/athrow\(\)"):
539+
gen2.send(None)
540+
521541
def test_async_gen_3_arg_deprecation_warning(self):
522542
async def gen():
523543
yield 123
@@ -1941,5 +1961,52 @@ class MyException(Exception):
19411961
del g
19421962
gc_collect() # does not warn unawaited
19431963

1964+
def test_asend_send_already_running(self):
1965+
@types.coroutine
1966+
def _async_yield(v):
1967+
return (yield v)
1968+
1969+
async def agenfn():
1970+
while True:
1971+
await _async_yield(1)
1972+
return
1973+
yield
1974+
1975+
agen = agenfn()
1976+
gen = agen.asend(None)
1977+
gen.send(None)
1978+
gen2 = agen.asend(None)
1979+
1980+
with self.assertRaisesRegex(RuntimeError,
1981+
r'anext\(\): asynchronous generator is already running'):
1982+
gen2.send(None)
1983+
1984+
del gen2
1985+
gc_collect() # does not warn unawaited
1986+
1987+
1988+
def test_athrow_send_already_running(self):
1989+
@types.coroutine
1990+
def _async_yield(v):
1991+
return (yield v)
1992+
1993+
async def agenfn():
1994+
while True:
1995+
await _async_yield(1)
1996+
return
1997+
yield
1998+
1999+
agen = agenfn()
2000+
gen = agen.asend(None)
2001+
gen.send(None)
2002+
gen2 = agen.athrow(Exception)
2003+
2004+
with self.assertRaisesRegex(RuntimeError,
2005+
r'athrow\(\): asynchronous generator is already running'):
2006+
gen2.send(None)
2007+
2008+
del gen2
2009+
gc_collect() # does not warn unawaited
2010+
19442011
if __name__ == "__main__":
19452012
unittest.main()

0 commit comments

Comments
 (0)