8000 gh-103395: Improve `typing._GenericAlias.__dir__` coverage (#103396) · python/cpython@a28e2ce · GitHub
[go: up one dir, main page]

Skip to content

Commit a28e2ce

Browse files
authored
gh-103395: Improve typing._GenericAlias.__dir__ coverage (#103396)
1 parent ecad802 commit a28e2ce

File tree

1 file changed

+61
-2
lines changed

1 file changed

+61
-2
lines changed

Lib/test/test_typing.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,14 @@ def test_accepts_single_type(self):
855855
(*tuple[int],)
856856
Unpack[Tuple[int]]
857857

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+
858866
def test_rejects_multiple_types(self):
859867
with self.assertRaises(TypeError):
860868
Unpack[Tuple[int], Tuple[str]]
@@ -1699,6 +1707,14 @@ def test_repr(self):
16991707
u = Optional[str]
17001708
self.assertEqual(repr(u), 'typing.Optional[str]')
17011709

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+
17021718
def test_cannot_subclass(self):
17031719
with self.assertRaisesRegex(TypeError,
17041720
r'Cannot subclass typing\.Union'):
@@ -1839,6 +1855,15 @@ def test_eq_hash(self):
18391855
self.assertNotEqual(C, Callable[..., int])
18401856
self.assertNotEqual(C, Callable)
18411857

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+
18421867
def test_cannot_instantiate(self):
18431868
Callable = self.Callable
18441869
with self.assertRaises(TypeError):
@@ -2151,6 +2176,14 @@ def test_repr(self):
21512176
self.assertEqual(repr(Literal[None]), "typing.Literal[None]")
21522177
self.assertEqual(repr(Literal[1, 2, 3, 3]), "typing.Literal[1, 2, 3]")
21532178

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+
21542187
def test_cannot_init(self):
21552188
with self.assertRaises(TypeError):
21562189
Literal()
@@ -7315,6 +7348,15 @@ def test_repr(self):
73157348
"typing.Annotated[typing.List[int], 4, 5]"
73167349
)
73177350

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+
73187360
def test_flatten(self):
73197361
A = Annotated[Annotated[int, 4], 5]
73207362
self.assertEqual(A, Annotated[int, 4, 5])
@@ -8033,6 +8075,15 @@ class MyClass: ...
80338075
c = Concatenate[MyClass, P]
80348076
self.assertNotEqual(c, Concatenate)
80358077

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+
80368087
def test_valid_uses(self):
80378088
P = ParamSpec('P')
80388089
T = TypeVar('T')
@@ -8310,10 +8361,18 @@ class Foo(Generic[T]):
83108361
def bar(self):
83118362
pass
83128363
baz = 3
8364+
__magic__ = 4
8365+
83138366
# The class attributes of the original class should be visible even
83148367
# 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)
83178376

83188377

83198378
class RevealTypeTests(BaseTestCase):

0 commit comments

Comments
 (0)
0