diff options
author | Matthieu Dartiailh <marul@laposte.net> | 2022-04-05 13:47:13 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-05 13:47:13 (GMT) |
commit | aa0f056a00c4bcaef83d729e042359ddae903382 (patch) | |
tree | 45b026af73776c5f38423e44b989df335f52f405 /Lib | |
parent | f1606a5ba50bdc4e7d335d62297b4b4043a25e6e (diff) | |
download | cpython-aa0f056a00c4bcaef83d729e042359ddae903382.zip cpython-aa0f056a00c4bcaef83d729e042359ddae903382.tar.gz cpython-aa0f056a00c4bcaef83d729e042359ddae903382.tar.bz2 |
bpo-47212: Improve error messages for un-parenthesized generator expressions (GH-32302)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_exceptions.py | 11 | ||||
-rw-r--r-- | Lib/test/test_syntax.py | 7 |
2 files changed, 17 insertions, 1 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index a75b7fa..6dca79e 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -198,12 +198,17 @@ class ExceptionTests(unittest.TestCase): s = '''if True:\n print()\n\texec "mixed tabs and spaces"''' ckmsg(s, "inconsistent use of tabs and spaces in indentation", TabError) - def check(self, src, lineno, offset, encoding='utf-8'): + def check(self, src, lineno, offset, end_lineno=None, end_offset=None, encoding='utf-8'): with self.subTest(source=src, lineno=lineno, offset=offset): with self.assertRaises(SyntaxError) as cm: compile(src, '<fragment>', 'exec') self.assertEqual(cm.exception.lineno, lineno) self.assertEqual(cm.exception.offset, offset) + if end_lineno is not None: + self.assertEqual(cm.exception.end_lineno, end_lineno) + if end_offset is not None: + self.assertEqual(cm.exception.end_offset, end_offset) + if cm.exception.text is not None: if not isinstance(src, str): src = src.decode(encoding, 'replace') @@ -235,6 +240,10 @@ class ExceptionTests(unittest.TestCase): check('match ...:\n case {**rest, "key": value}:\n ...', 2, 19) check("[a b c d e f]", 1, 2) check("for x yfff:", 1, 7) + check("f(a for a in b, c)", 1, 3, 1, 15) + check("f(a for a in b if a, c)", 1, 3, 1, 20) + check("f(a, b for b in c)", 1, 6, 1, 18) + check("f(a, b for b in c, d)", 1, 6, 1, 18) # Errors thrown by compile.c check('class foo:return 1', 1, 11) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 3e79ebf..96e5c12 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1309,6 +1309,13 @@ Specialized indentation errors: >>> try: ... something() + ... except: + ... pass + Traceback (most recent call last): + IndentationError: expected an indented block after 'except' statement on line 3 + + >>> try: + ... something() ... except A: ... pass Traceback (most recent call last): |