6
6
7
7
class TypeParamsInvalidTest (unittest .TestCase ):
8
8
def test_name_collision_01 (self ):
9
- code = """def func[A, A](): ..."""
10
-
9
+ code = """def func[**A, A](): ..."""
11
10
with self .assertRaisesRegex (SyntaxError , "duplicate type parameter 'A'" ):
12
11
exec (code , {}, {})
13
12
14
- def test_name_collision_02 (self ):
13
+ def test_name_non_collision_02 (self ):
15
14
code = """def func[A](A): ..."""
15
+ exec (code , {}, {})
16
16
17
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'A'" ):
18
- exec (code , {}, {})
19
-
20
- def test_name_collision_03 (self ):
17
+ def test_name_non_collision_03 (self ):
21
18
code = """def func[A](*A): ..."""
19
+ exec (code , {}, {})
22
20
23
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'A'" ):
24
- exec (code , {}, {})
25
-
26
- def test_name_collision_04 (self ):
21
+ def test_name_non_collision_04 (self ):
27
22
# Mangled names should not cause a conflict.
28
23
code = textwrap .dedent ("""\
29
24
class ClassA:
30
25
def func[__A](self, __A): ...
31
26
"""
32
27
)
33
-
34
28
exec (code , {}, {})
35
29
36
- def test_name_collision_05 (self ):
30
+ def test_name_non_collision_05 (self ):
37
31
code = textwrap .dedent ("""\
38
32
class ClassA:
39
33
def func[_ClassA__A](self, __A): ...
40
34
"""
41
35
)
36
+ exec (code , {}, {})
42
37
43
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter '__A'" ):
44
- exec (code , {}, {})
45
-
46
- def test_name_collision_06 (self ):
38
+ def test_name_non_collision_06 (self ):
47
39
code = textwrap .dedent ("""\
48
40
class ClassA[X]:
49
41
def func(self, X): ...
50
42
"""
51
43
)
44
+ exec (code , {}, {})
52
45
53
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
54
- exec (code , {}, {})
55
-
56
- def test_name_collision_07 (self ):
46
+ def test_name_non_collision_07 (self ):
57
47
code = textwrap .dedent ("""\
58
48
class ClassA[X]:
59
49
def func(self):
60
50
X = 1
61
51
"""
62
52
)
53
+ exec (code , {}, {})
63
54
64
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
65
- exec (code , {}, {})
66
-
67
- def test_name_collision_08 (self ):
55
+ def test_name_non_collision_08 (self ):
68
56
code = textwrap .dedent ("""\
69
57
class ClassA[X]:
70
58
def func(self):
71
59
a = [X for X in []]
72
60
"""
73
61
)
62
+ exec (code , {}, {})
74
63
75
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
76
- exec (code , {}, {})
77
-
78
- def test_name_collision_09 (self ):
79
- code = textwrap .dedent ("""\
80
- class ClassA[X]:
81
- def func(self):
82
- a = lambda X: None
83
- """
84
- )
85
-
86
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
87
- exec (code , {}, {})
88
-
89
- def test_name_collision_10 (self ):
64
+ def test_name_non_collision_9 (self ):
90
65
code = textwrap .dedent ("""\
91
66
class ClassA[X]:
92
67
def func[X](self):
93
68
...
94
69
"""
95
70
)
71
+ exec (code , {}, {})
96
72
97
- with self .assertRaisesRegex (SyntaxError , "duplicate type parameter 'X'" ):
98
- exec (code , {}, {})
99
-
100
- def test_name_collision_11 (self ):
73
+ def test_name_non_collision_10 (self ):
101
74
code = textwrap .dedent ("""\
102
75
class ClassA[X]:
103
76
X: int
104
77
"""
105
78
)
79
+ exec (code , {}, {})
106
80
107
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
108
- exec (code , {}, {})
109
-
110
- def test_name_collision_12 (self ):
81
+ def test_name_non_collision_11 (self ):
111
82
code = textwrap .dedent ("""\
112
83
def outer():
113
84
X = 1
114
85
def inner[X]():
115
86
nonlocal X
116
87
"""
117
88
)
89
+ exec (code , {}, {})
118
90
119
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
120
- exec (code , {}, {})
121
-
122
- def test_name_collision_13 (self ):
91
+ def test_name_non_collision_13 (self ):
123
92
code = textwrap .dedent ("""\
124
93
X = 1
125
94
def outer():
126
95
def inner[X]():
127
96
global X
128
97
"""
129
98
)
130
-
131
- with self .assertRaisesRegex (SyntaxError , "cannot overwrite type parameter 'X'" ):
132
- exec (code , {}, {})
99
+ exec (code , {}, {})
133
100
134
101
135
102
class TypeParamsAccessTest (unittest .TestCase ):
@@ -139,7 +106,6 @@ class ClassA[A, B](dict[A, B]):
139
106
...
140
107
"""
141
108
)
142
-
143
109
exec (code , {}, {})
144
110
145
111
def test_class_access_02 (self ):
@@ -149,7 +115,6 @@ class ClassA[A, B](metaclass=MyMeta[A, B]):
149
115
...
150
116
"""
151
117
)
152
-
153
118
exec (code , {}, {})
154
119
155
120
def test_class_access_03 (self ):
@@ -171,7 +136,6 @@ def func[A, B](a: dict[A, B]):
171
136
...
172
137
"""
173
138
)
174
-
175
139
exec (code , {}, {})
176
140
177
141
def test_function_access_02 (self ):
@@ -206,7 +170,6 @@ def funcD[D](self):
206
170
lambda : (A, B, C, D)
207
171
"""
208
172
)
209
-
210
173
exec (code , {}, {})
211
174
212
175
def test_out_of_scope_01 (self ):
0 commit comments