Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fd4fe5c

Browse files
committed
Separate out and expand nonlocal tests
1 parent f8406ce commit fd4fe5c

1 file changed

Lines changed: 43 additions & 18 deletions

File tree

Lib/test/test_type_params.py

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,6 @@ class ClassA[X]:
115115
self.assertEqual(X.__name__, "X")
116116
self.assertIs(cls.__annotations__["X"], int)
117117

118-
def test_name_non_collision_11(self):
119-
code = """
120-
def outer():
121-
X = 1
122-
def inner[X]():
123-
nonlocal X
124-
return X
125-
"""
126-
check_syntax_error(self, code)
127-
128118
def test_name_non_collision_13(self):
129119
ns = run_code("""
130120
X = 1
@@ -154,6 +144,49 @@ def test_disallowed_expressions(self):
154144
check_syntax_error(self, "def f[T](y: (x := Sequence[T])): pass")
155145

156146

147+
class NonlocalTest(unittest.TestCase):
148+
149+
def test_nonlocal_disallowed_01(self):
150+
code = """
151+
def outer():
152+
X = 1
153+
def inner[X]():
154+
nonlocal X
155+
return X
156+
"""
157+
check_syntax_error(self, code)
158+
159+
def test_nonlocal_disallowed_02(self):
160+
code = """
161+
def outer2[T]():
162+
def inner1():
163+
nonlocal T
164+
"""
165+
check_syntax_error(self, textwrap.dedent(code))
166+
167+
def test_nonlocal_disallowed_03(self):
168+
code = """
169+
class Cls[T]:
170+
nonlocal T
171+
"""
172+
check_syntax_error(self, textwrap.dedent(code))
173+
174+
def test_nonlocal_allowed(self):
175+
code = """
176+
def func[T]():
177+
T = "func"
178+
def inner():
179+
nonlocal T
180+
T = "inner"
181+
inner()
182+
assert T == "inner"
183+
"""
184+
ns = run_code(code)
185+
func = ns["func"]
186+
T, = func.__type_params__
187+
self.assertEqual(T.__name__, "T")
188+
189+
157190
class TypeParamsAccessTest(unittest.TestCase):
158191
def test_class_access_01(self):
159192
ns = run_code("""
@@ -305,14 +338,6 @@ class C[T]:
305338
cls = ns["C"]
306339
self.assertEqual(cls.Alias.__value__, "class")
307340

308-
def test_nonlocal(self):
309-
code = """
310-
def outer2[T]():
311-
def inner1():
312-
nonlocal T
313-
"""
314-
check_syntax_error(self, textwrap.dedent(code))
315-
316341
def test_shadowing_nonlocal(self):
317342
ns = run_code("""
318343
def outer[T]():

0 commit comments

Comments
 (0)