@@ -127,6 +127,14 @@ def test_any_works_with_alias(self):
127
127
class BottomTypeTestsMixin :
128
128
bottom_type : ClassVar [Any ]
129
129
130
+ def test_equality (self ):
131
+ self .assertEqual (self .bottom_type , self .bottom_type )
132
+ self .assertIs (self .bottom_type , self .bottom_type )
133
+ self .assertNotEqual (self .bottom_type , None )
134
+
135
+ def test_get_origin (self ):
136
+ self .assertIs (get_origin (self .bottom_type ), None )
137
+
130
138
def test_instance_type_error (self ):
131
139
with self .assertRaises (TypeError ):
132
140
isinstance (42 , self .bottom_type )
@@ -162,13 +170,35 @@ class NoReturnTests(BottomTypeTestsMixin, BaseTestCase):
162
170
def test_repr (self ):
163
171
self .assertEqual (repr (NoReturn ), 'typing.NoReturn' )
164
172
173
+ def test_get_type_hints (self ):
174
+ def some (arg : NoReturn ) -> NoReturn : ...
175
+ def some_str (arg : 'NoReturn' ) -> 'typing.NoReturn' : ...
176
+
177
+ expected = {'arg' : NoReturn , 'return' : NoReturn }
178
+ for target in [some , some_str ]:
179
+ with self .subTest (target = target ):
180
+ self .assertEqual (gth (target ), expected )
181
+
182
+ def test_not_equality (self ):
183
+ self .assertNotEqual (NoReturn , Never )
184
+ self .assertNotEqual (Never , NoReturn )
185
+
165
186
166
187
class NeverTests (BottomTypeTestsMixin , BaseTestCase ):
167
188
bottom_type = Never
168
189
169
190
def test_repr (self ):
170
191
self .assertEqual (repr (Never ), 'typing.Never' )
171
192
193
+ def test_get_type_hints (self ):
194
+ def some (arg : Never ) -> Never : ...
195
+ def some_str (arg : 'Never' ) -> 'typing.Never' : ...
196
+
197
+ expected = {'arg' : Never , 'return' : Never }
198
+ for target in [some , some_str ]:
199
+ with self .subTest (target = target ):
200
+ self .assertEqual (gth (target ), expected )
201
+
172
202
173
203
class AssertNeverTests (BaseTestCase ):
174
204
def test_exception (self ):
@@ -177,11 +207,23 @@ def test_exception(self):
177
207
178
208
179
209
class SelfTests (BaseTestCase ):
210
+ def test_equality (self ):
211
+ self .assertEqual (Self , Self )
212
+ self .assertIs (Self , Self )
213
+ self .assertNotEqual (Self , None )
214
+
180
215
def test_basics (self ):
181
216
class Foo :
182
217
def bar (self ) -> Self : ...
218
+ class FooStr :
219
+ def bar (self ) -> 'Self' : ...
220
+ class FooStrTyping :
221
+ def bar (self ) -> 'typing.Self' : ...
183
222
184
- self .assertEqual (gth (Foo .bar ), {'return' : Self })
223
+ for target in [Foo , FooStr , FooStrTyping ]:
224
+ with self .subTest (target = target ):
225
+ self .assertEqual (gth (target .bar ), {'return' : Self })
226
+ self .assertIs (get_origin (Self ), None )
185
227
186
228
def test_repr (self ):
187
229
self .assertEqual (repr (Self ), 'typing.Self' )
@@ -194,6 +236,9 @@ def test_cannot_subclass(self):
194
236
with self .assertRaises (TypeError ):
195
237
class C (type (Self )):
196
238
pass
239
+ with self .assertRaises (TypeError ):
240
+ class C (Self ):
241
+ pass
197
242
198
243
def test_cannot_init (self ):
199
244
with self .assertRaises (TypeError ):
@@ -5425,11 +5470,13 @@ def test_special_attrs(self):
5425
5470
typing .Literal : 'Literal' ,
5426
5471
typing .NewType : 'NewType' ,
5427
5472
typing .NoReturn : 'NoReturn' ,
5473
+ typing .Never : 'Never' ,
5428
5474
typing .Optional : 'Optional' ,
5429
5475
typing .TypeAlias : 'TypeAlias' ,
5430
5476
typing .TypeGuard : 'TypeGuard' ,
5431
5477
typing .TypeVar : 'TypeVar' ,
5432
5478
typing .Union : 'Union' ,
5479
+ typing .Self : 'Self' ,
5433
5480
# Subscribed special forms
5434
5481
typing .Annotated [Any , "Annotation" ]: 'Annotated' ,
5435
5482
typing .ClassVar [Any ]: 'ClassVar' ,
0 commit comments