diff options
Diffstat (limited to 'Lib/test/test_syntax.py')
-rw-r--r-- | Lib/test/test_syntax.py | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 7ce3d75a89..5d36581859 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -400,12 +400,25 @@ build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 Misuse of the nonlocal and global statement can lead to a few unique syntax errors. >>> def f(): + ... print(x) + ... global x + Traceback (most recent call last): + ... + SyntaxError: name 'x' is used prior to global declaration + + >>> def f(): ... x = 1 ... global x Traceback (most recent call last): ... SyntaxError: name 'x' is assigned to before global declaration + >>> def f(x): + ... global x + Traceback (most recent call last): + ... + SyntaxError: name 'x' is parameter and global + >>> def f(): ... x = 1 ... def g(): @@ -560,7 +573,6 @@ Corner-cases that used to crash: import re import unittest -import warnings from test import support @@ -596,19 +608,25 @@ class SyntaxTestCase(unittest.TestCase): def test_assign_del(self): self._check_error("del f()", "delete") - def test_global_err_then_warn(self): - # Bug #763201: The SyntaxError raised for one global statement - # shouldn't be clobbered by a SyntaxWarning issued for a later one. + def test_global_param_err_first(self): source = """if 1: def error(a): global a # SyntaxError - def warning(): + def error2(): + b = 1 + global b # SyntaxError + """ + self._check_error(source, "parameter and global", lineno=3) + + def test_nonlocal_param_err_first(self): + source = """if 1: + def error(a): + nonlocal a # SyntaxError + def error2(): b = 1 - global b # SyntaxWarning + global b # SyntaxError """ - warnings.filterwarnings(action='ignore', category=SyntaxWarning) - self._check_error(source, "global") - warnings.filters.pop(0) + self._check_error(source, "parameter and nonlocal", lineno=3) def test_break_outside_loop(self): self._check_error("break", "outside loop") |