@@ -855,6 +855,14 @@ def test_accepts_single_type(self):
855
855
(* tuple [int ],)
856
856
Unpack [Tuple [int ]]
857
857
858
+ def test_dir (self ):
859
+ dir_items = set (dir (Unpack [Tuple [int ]]))
860
+ for required_item in [
861
+ '__args__' , '__parameters__' , '__origin__' ,
862
+ ]:
863
+ with self .subTest (required_item = required_item ):
864
+ self .assertIn (required_item , dir_items )
865
+
858
866
def test_rejects_multiple_types (self ):
859
867
with self .assertRaises (TypeError ):
860
868
Unpack [Tuple [int ], Tuple [str ]]
@@ -1699,6 +1707,14 @@ def test_repr(self):
1699
1707
u = Optional [str ]
1700
1708
self .assertEqual (repr (u ), 'typing.Optional[str]' )
1701
1709
1710
+ def test_dir (self ):
1711
+ dir_items = set (dir (Union [str , int ]))
1712
+ for required_item in [
1713
+ '__args__' , '__parameters__' , '__origin__' ,
1714
+ ]:
1715
+ with self .subTest (required_item = required_item ):
1716
+ self .assertIn (required_item , dir_items )
1717
+
1702
1718
def test_cannot_subclass (self ):
1703
1719
with self .assertRaisesRegex (TypeError ,
1704
1720
r'Cannot subclass typing\.Union' ):
@@ -1839,6 +1855,15 @@ def test_eq_hash(self):
1839
1855
self .assertNotEqual (C , Callable [..., int ])
1840
1856
self .assertNotEqual (C , Callable )
1841
1857
1858
+ def test_dir (self ):
1859
+ Callable = self .Callable
1860
+ dir_items = set (dir (Callable [..., int ]))
1861
+ for required_item in [
1862
+ '__args__' , '__parameters__' , '__origin__' ,
1863
+ ]:
1864
+ with self .subTest (required_item = required_item ):
1865
+ self .assertIn (required_item , dir_items )
1866
+
1842
1867
def test_cannot_instantiate (self ):
1843
1868
Callable = self .Callable
1844
1869
with self .assertRaises (TypeError ):
@@ -2151,6 +2176,14 @@ def test_repr(self):
2151
2176
self .assertEqual (repr (Literal [None ]), "typing.Literal[None]" )
2152
2177
self .assertEqual (repr (Literal [1 , 2 , 3 , 3 ]), "typing.Literal[1, 2, 3]" )
2153
2178
2179
+ def test_dir (self ):
2180
+ dir_items = set (dir (Literal [1 , 2 , 3 ]))
2181
+ for required_item in [
2182
+ '__args__' , '__parameters__' , '__origin__' ,
2183
+ ]:
2184
+ with self .subTest (required_item = required_item ):
2185
+ self .assertIn (required_item , dir_items )
2186
+
2154
2187
def test_cannot_init (self ):
2155
2188
with self .assertRaises (TypeError ):
2156
2189
Literal ()
@@ -7315,6 +7348,15 @@ def test_repr(self):
7315
7348
"typing.Annotated[typing.List[int], 4, 5]"
7316
7349
)
7317
7350
7351
+ def test_dir (self ):
7352
+ dir_items = set (dir (Annotated [int , 4 ]))
7353
+ for required_item in [
7354
+ '__args__' , '__parameters__' , '__origin__' ,
7355
+ '__metadata__' ,
7356
+ ]:
7357
+ with self .subTest (required_item = required_item ):
7358
+ self .assertIn (required_item , dir_items )
7359
+
7318
7360
def test_flatten (self ):
7319
7361
A = Annotated [Annotated [int , 4 ], 5 ]
7320
7362
self .assertEqual (A , Annotated [int , 4 , 5 ])
@@ -8033,6 +8075,15 @@ class MyClass: ...
8033
8075
c = Concatenate [MyClass , P ]
8034
8076
self .assertNotEqual (c , Concatenate )
8035
8077
8078
+ def test_dir (self ):
8079
+ P = ParamSpec ('P' )
8080
+ dir_items = set (dir (Concatenate [int , P ]))
8081
+ for required_item in [
8082
+ '__args__' , '__parameters__' , '__origin__' ,
8083
+ ]:
8084
+ with self .subTest (required_item = required_item ):
8085
+ self .assertIn (required_item , dir_items )
8086
+
8036
8087
def test_valid_uses (self ):
8037
8088
P = ParamSpec ('P' )
8038
8089
T = TypeVar ('T' )
@@ -8310,10 +8361,18 @@ class Foo(Generic[T]):
8310
8361
def bar (self ):
8311
8362
pass
8312
8363
baz = 3
8364
+ __magic__ = 4
8365
+
8313
8366
# The class attributes of the original class should be visible even
8314
8367
# in dir() of the GenericAlias. See bpo-45755.
8315
- self .assertIn ('bar' , dir (Foo [int ]))
8316
- self .assertIn ('baz' , dir (Foo [int ]))
8368
+ dir_items = set (dir (Foo [int ]))
8369
+ for required_item in [
8370
+ 'bar' , 'baz' ,
8371
+ '__args__' , '__parameters__' , '__origin__' ,
8372
+ ]:
8373
+ with self .subTest (required_item = required_item ):
8374
+ self .assertIn (required_item , dir_items )
8375
+ self .assertNotIn ('__magic__' , dir_items )
8317
8376
8318
8377
8319
8378
class RevealTypeTests (BaseTestCase ):
0 commit comments