@@ -851,6 +851,14 @@ def test_accepts_single_type(self):
851
851
(* tuple [int ],)
852
852
Unpack [Tuple [int ]]
853
853
854
+ def test_dir (self ):
855
+ dir_items = set (dir (Unpack [Tuple [int ]]))
856
+ for required_item in [
857
+ '__args__' , '__parameters__' , '__origin__' ,
858
+ ]:
859
+ with self .subTest (required_item = required_item ):
860
+ self .assertIn (required_item , dir_items )
861
+
854
862
def test_rejects_multiple_types (self ):
855
863
with self .assertRaises (TypeError ):
856
864
Unpack [Tuple [int ], Tuple [str ]]
@@ -1696,6 +1704,14 @@ def test_repr(self):
1696
1704
u = Optional [str ]
1697
1705
self .assertEqual (repr (u ), 'typing.Optional[str]' )
1698
1706
1707
+ def test_dir (self ):
1708
+ dir_items = set (dir (Union [str , int ]))
1709
+ for required_item in [
1710
+ '__args__' , '__parameters__' , '__origin__' ,
1711
+ ]:
1712
+ with self .subTest (required_item = required_item ):
1713
+ self .assertIn (required_item , dir_items )
1714
+
1699
1715
def test_cannot_subclass (self ):
1700
1716
with self .assertRaises (TypeError ):
1701
1717
class C (Union ):
@@ -1834,6 +1850,15 @@ def test_eq_hash(self):
1834
1850
self .assertNotEqual (C , Callable [..., int ])
1835
1851
self .assertNotEqual (C , Callable )
1836
1852
1853
+ def test_dir (self ):
1854
+ Callable = self .Callable
1855
+ dir_items = set (dir (Callable [..., int ]))
1856
+ for required_item in [
1857
+ '__args__' , '__parameters__' , '__origin__' ,
1858
+ ]:
1859
+ with self .subTest (required_item = required_item ):
1860
+ self .assertIn (required_item , dir_items )
1861
+
1837
1862
def test_cannot_instantiate (self ):
1838
1863
Callable = self .Callable
1839
1864
with self .assertRaises (TypeError ):
@@ -2146,6 +2171,14 @@ def test_repr(self):
2146
2171
self .assertEqual (repr (Literal [None ]), "typing.Literal[None]" )
2147
2172
self .assertEqual (repr (Literal [1 , 2 , 3 , 3 ]), "typing.Literal[1, 2, 3]" )
2148
2173
2174
+ def test_dir (self ):
2175
+ dir_items = set (dir (Literal [1 , 2 , 3 ]))
2176
+ for required_item in [
2177
+ '__args__' , '__parameters__' , '__origin__' ,
2178
+ ]:
2179
+ with self .subTest (required_item = required_item ):
2180
+ self .assertIn (required_item , dir_items )
2181
+
2149
2182
def test_cannot_init (self ):
2150
2183
with self .assertRaises (TypeError ):
2151
2184
Literal ()
@@ -7002,6 +7035,15 @@ def test_repr(self):
7002
7035
"typing.Annotated[typing.List[int], 4, 5]"
7003
7036
)
7004
7037
7038
+ def test_dir (self ):
7039
+ dir_items = set (dir (Annotated [int , 4 ]))
7040
+ for required_item in [
7041
+ '__args__' , '__parameters__' , '__origin__' ,
7042
+ '__metadata__' ,
7043
+ ]:
7044
+ with self .subTest (required_item = required_item ):
7045
+ self .assertIn (required_item , dir_items )
7046
+
7005
7047
def test_flatten (self ):
7006
7048
A = Annotated [Annotated [int , 4 ], 5 ]
7007
7049
self .assertEqual (A , Annotated [int , 4 , 5 ])
@@ -7701,6 +7743,15 @@ class MyClass: ...
7701
7743
c = Concatenate [MyClass , P ]
7702
7744
self .assertNotEqual (c , Concatenate )
7703
7745
7746
+ def test_dir (self ):
7747
+ P = ParamSpec ('P' )
7748
+ dir_items = set (dir (Concatenate [int , P ]))
7749
+ for required_item in [
7750
+ '__args__' , '__parameters__' , '__origin__' ,
7751
+ ]:
7752
+ with self .subTest (required_item = required_item ):
7753
+ self .assertIn (required_item , dir_items )
7754
+
7704
7755
def test_valid_uses (self ):
7705
7756
P = ParamSpec ('P' )
7706
7757
T = TypeVar ('T' )
@@ -7969,10 +8020,18 @@ class Foo(Generic[T]):
7969
8020
def bar (self ):
7970
8021
pass
7971
8022
baz = 3
8023
+ __magic__ = 4
8024
+
7972
8025
# The class attributes of the original class should be visible even
7973
8026
# in dir() of the GenericAlias. See bpo-45755.
7974
- self .assertIn ('bar' , dir (Foo [int ]))
7975
- self .assertIn ('baz' , dir (Foo [int ]))
8027
+ dir_items = set (dir (Foo [int ]))
8028
+ for required_item in [
8029
+ 'bar' , 'baz' ,
8030
+ '__args__' , '__parameters__' , '__origin__' ,
8031
+ ]:
8032
+ with self .subTest (required_item = required_item ):
8033
+ self .assertIn (required_item , dir_items )
8034
+ self .assertNotIn ('__magic__' , dir_items )
7976
8035
7977
8036
7978
8037
class RevealTypeTests (BaseTestCase ):
0 commit comments