diff options
Diffstat (limited to 'Lib/test/test_builtin.py')
-rw-r--r-- | Lib/test/test_builtin.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index e50c2735ec..d6b9ee1a95 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -421,6 +421,44 @@ class BuiltinTest(unittest.TestCase): finally: asyncio.set_event_loop_policy(policy) + def test_compile_top_level_await_invalid_cases(self): + # helper function just to check we can run top=level async-for + async def arange(n): + for i in range(n): + yield i + + modes = ('single', 'exec') + code_samples = [ + '''def f(): await arange(10)\n''', + '''def f(): [x async for x in arange(10)]\n''', + '''def f(): [await x async for x in arange(10)]\n''', + '''def f(): + async for i in arange(1): + a = 1 + ''', + '''def f(): + async with asyncio.Lock() as l: + a = 1 + ''' + ] + policy = maybe_get_event_loop_policy() + try: + for mode, code_sample in product(modes, code_samples): + source = dedent(code_sample) + with self.assertRaises( + SyntaxError, msg=f"source={source} mode={mode}"): + compile(source, '?', mode) + + with self.assertRaises( + SyntaxError, msg=f"source={source} mode={mode}"): + co = compile(source, + '?', + mode, + flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT) + finally: + asyncio.set_event_loop_policy(policy) + + def test_compile_async_generator(self): """ With the PyCF_ALLOW_TOP_LEVEL_AWAIT flag added in 3.8, we want to |