@@ -127,6 +127,14 @@ def test_any_works_with_alias(self):
127127class BottomTypeTestsMixin :
128128 bottom_type : ClassVar [Any ]
129129
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+
130138 def test_instance_type_error (self ):
131139 with self .assertRaises (TypeError ):
132140 isinstance (42 , self .bottom_type )
@@ -162,13 +170,35 @@ class NoReturnTests(BottomTypeTestsMixin, BaseTestCase):
162170 def test_repr (self ):
163171 self .assertEqual (repr (NoReturn ), 'typing.NoReturn' )
164172
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+
165186
166187class NeverTests (BottomTypeTestsMixin , BaseTestCase ):
167188 bottom_type = Never
168189
169190 def test_repr (self ):
170191 self .assertEqual (repr (Never ), 'typing.Never' )
171192
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+
172202
173203class AssertNeverTests (BaseTestCase ):
174204 def test_exception (self ):
@@ -177,11 +207,23 @@ def test_exception(self):
177207
178208
179209class SelfTests (BaseTestCase ):
210+ def test_equality (self ):
211+ self .assertEqual (Self , Self )
212+ self .assertIs (Self , Self )
213+ self .assertNotEqual (Self , None )
214+
180215 def test_basics (self ):
181216 class Foo :
182217 def bar (self ) -> Self : ...
218+ class FooStr :
219+ def bar (self ) -> 'Self' : ...
220+ class FooStrTyping :
221+ def bar (self ) -> 'typing.Self' : ...
183222
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 )
185227
186228 def test_repr (self ):
187229 self .assertEqual (repr (Self ), 'typing.Self' )
@@ -194,6 +236,9 @@ def test_cannot_subclass(self):
194236 with self .assertRaises (TypeError ):
195237 class C (type (Self )):
196238 pass
239+ with self .assertRaises (TypeError ):
240+ class C (Self ):
241+ pass
197242
198243 def test_cannot_init (self ):
199244 with self .assertRaises (TypeError ):
@@ -5425,11 +5470,13 @@ def test_special_attrs(self):
54255470 typing .Literal : 'Literal' ,
54265471 typing .NewType : 'NewType' ,
54275472 typing .NoReturn : 'NoReturn' ,
5473+ typing .Never : 'Never' ,
54285474 typing .Optional : 'Optional' ,
54295475 typing .TypeAlias : 'TypeAlias' ,
54305476 typing .TypeGuard : 'TypeGuard' ,
54315477 typing .TypeVar : 'TypeVar' ,
54325478 typing .Union : 'Union' ,
5479+ typing .Self : 'Self' ,
54335480 # Subscribed special forms
54345481 typing .Annotated [Any , "Annotation" ]: 'Annotated' ,
54355482 typing .ClassVar [Any ]: 'ClassVar' ,
0 commit comments