https://github.com/python/cpython/commit/70b322d3138311df53bc9fc57f174c8e9bdc2ab5
commit: 70b322d3138311df53bc9fc57f174c8e9bdc2ab5
branch: main
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2025-04-21T07:06:33-07:00
summary:
annotations: Add tests to check that async comprehensions produce errors
(#132513)
This already works correctly but I forgot to test for it.
files:
M Lib/test/test_type_annotations.py
diff --git a/Lib/test/test_type_annotations.py
b/Lib/test/test_type_annotations.py
index 31df7668db0976..f903f9bb51f919 100644
--- a/Lib/test/test_type_annotations.py
+++ b/Lib/test/test_type_annotations.py
@@ -387,10 +387,21 @@ class Nested: ...
self.assertEqual(Outer.__annotations__, {"x": Outer.Nested})
def test_no_exotic_expressions(self):
- check_syntax_error(self, "def func(x: (yield)): ...", "yield
expression cannot be used within an annotation")
- check_syntax_error(self, "def func(x: (yield from x)): ...", "yield
expression cannot be used within an annotation")
- check_syntax_error(self, "def func(x: (y := 3)): ...", "named
expression cannot be used within an annotation")
- check_syntax_error(self, "def func(x: (await 42)): ...", "await
expression cannot be used within an annotation")
+ preludes = [
+ "",
+ "class X:\n ",
+ "def f():\n ",
+ "async def f():\n ",
+ ]
+ for prelude in preludes:
+ with self.subTest(prelude=prelude):
+ check_syntax_error(self, prelude + "def func(x: (yield)):
...", "yield expression cannot be used within an annotation")
+ check_syntax_error(self, prelude + "def func(x: (yield from
x)): ...", "yield expression cannot be used within an annotation")
+ check_syntax_error(self, prelude + "def func(x: (y := 3)):
...", "named expression cannot be used within an annotation")
+ check_syntax_error(self, prelude + "def func(x: (await 42)):
...", "await expression cannot be used within an annotation")
+ check_syntax_error(self, prelude + "def func(x: [y async for y
in x]): ...", "asynchronous comprehension outside of an asynchronous function")
+ check_syntax_error(self, prelude + "def func(x: {y async for y
in x}): ...", "asynchronous comprehension outside of an asynchronous function")
+ check_syntax_error(self, prelude + "def func(x: {y: y async
for y in x}): ...", "asynchronous comprehension outside of an asynchronous
function")
def test_no_exotic_expressions_in_unevaluated_annotations(self):
preludes = [
@@ -406,6 +417,9 @@ def
test_no_exotic_expressions_in_unevaluated_annotations(self):
check_syntax_error(self, prelude + "(x): (y := 3)", "named
expression cannot be used within an annotation")
check_syntax_error(self, prelude + "(x): (__debug__ := 3)",
"named expression cannot be used within an annotation")
check_syntax_error(self, prelude + "(x): (await 42)", "await
expression cannot be used within an annotation")
+ check_syntax_error(self, prelude + "(x): [y async for y in
x]", "asynchronous comprehension outside of an asynchronous function")
+ check_syntax_error(self, prelude + "(x): {y async for y in
x}", "asynchronous comprehension outside of an asynchronous function")
+ check_syntax_error(self, prelude + "(x): {y: y async for y in
x}", "asynchronous comprehension outside of an asynchronous function")
def test_ignore_non_simple_annotations(self):
ns = run_code("class X: (y): int")
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]