Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a28e2ce

Browse filesBrowse files
authored
pythongh-103395: Improve typing._GenericAlias.__dir__ coverage (python#103396)
1 parent ecad802 commit a28e2ce
Copy full SHA for a28e2ce

File tree

1 file changed

+61
-2
lines changed
Filter options

1 file changed

+61
-2
lines changed

‎Lib/test/test_typing.py

Copy file name to clipboardExpand all lines: Lib/test/test_typing.py
+61-2Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.