[Python-checkins] gh-103395: Improve `typing._GenericAlias.__dir__` coverage (GH-103396)
miss-islington
webhook-mailer at python.org
Mon Apr 10 07:38:15 EDT 2023
https://github.com/python/cpython/commit/4e284ffa2e56dfab4f5cde83b1679c9a51206e9a
commit: 4e284ffa2e56dfab4f5cde83b1679c9a51206e9a
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2023-04-10T04:37:40-07:00
summary:
gh-103395: Improve `typing._GenericAlias.__dir__` coverage (GH-103396)
(cherry picked from commit a28e2ce3fbcc852959324879e0bbf5ba8ecf0105)
Co-authored-by: Nikita Sobolev <mail at sobolevn.me>
files:
M Lib/test/test_typing.py
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 46cff6ad5085..be804f1699a0 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -851,6 +851,14 @@ def test_accepts_single_type(self):
(*tuple[int],)
Unpack[Tuple[int]]
+ def test_dir(self):
+ dir_items = set(dir(Unpack[Tuple[int]]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_rejects_multiple_types(self):
with self.assertRaises(TypeError):
Unpack[Tuple[int], Tuple[str]]
@@ -1696,6 +1704,14 @@ def test_repr(self):
u = Optional[str]
self.assertEqual(repr(u), 'typing.Optional[str]')
+ def test_dir(self):
+ dir_items = set(dir(Union[str, int]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_cannot_subclass(self):
with self.assertRaises(TypeError):
class C(Union):
@@ -1834,6 +1850,15 @@ def test_eq_hash(self):
self.assertNotEqual(C, Callable[..., int])
self.assertNotEqual(C, Callable)
+ def test_dir(self):
+ Callable = self.Callable
+ dir_items = set(dir(Callable[..., int]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_cannot_instantiate(self):
Callable = self.Callable
with self.assertRaises(TypeError):
@@ -2146,6 +2171,14 @@ def test_repr(self):
self.assertEqual(repr(Literal[None]), "typing.Literal[None]")
self.assertEqual(repr(Literal[1, 2, 3, 3]), "typing.Literal[1, 2, 3]")
+ def test_dir(self):
+ dir_items = set(dir(Literal[1, 2, 3]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_cannot_init(self):
with self.assertRaises(TypeError):
Literal()
@@ -7002,6 +7035,15 @@ def test_repr(self):
"typing.Annotated[typing.List[int], 4, 5]"
)
+ def test_dir(self):
+ dir_items = set(dir(Annotated[int, 4]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ '__metadata__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_flatten(self):
A = Annotated[Annotated[int, 4], 5]
self.assertEqual(A, Annotated[int, 4, 5])
@@ -7701,6 +7743,15 @@ class MyClass: ...
c = Concatenate[MyClass, P]
self.assertNotEqual(c, Concatenate)
+ def test_dir(self):
+ P = ParamSpec('P')
+ dir_items = set(dir(Concatenate[int, P]))
+ for required_item in [
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+
def test_valid_uses(self):
P = ParamSpec('P')
T = TypeVar('T')
@@ -7969,10 +8020,18 @@ class Foo(Generic[T]):
def bar(self):
pass
baz = 3
+ __magic__ = 4
+
# The class attributes of the original class should be visible even
# in dir() of the GenericAlias. See bpo-45755.
- self.assertIn('bar', dir(Foo[int]))
- self.assertIn('baz', dir(Foo[int]))
+ dir_items = set(dir(Foo[int]))
+ for required_item in [
+ 'bar', 'baz',
+ '__args__', '__parameters__', '__origin__',
+ ]:
+ with self.subTest(required_item=required_item):
+ self.assertIn(required_item, dir_items)
+ self.assertNotIn('__magic__', dir_items)
class RevealTypeTests(BaseTestCase):
More information about the Python-checkins
mailing list