mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
[bpo-28556] Minor fixes for typing module (#4710)
This commit is contained in:
parent
ca7562a7fe
commit
29bc193210
3 changed files with 55 additions and 10 deletions
|
|
@ -37,6 +37,9 @@ except ImportError:
|
|||
from test import mod_generics_cache
|
||||
|
||||
|
||||
PY36 = sys.version_info[:2] >= (3, 6)
|
||||
|
||||
|
||||
class BaseTestCase(TestCase):
|
||||
|
||||
def assertIsSubclass(self, cls, class_or_tuple, msg=None):
|
||||
|
|
@ -633,6 +636,27 @@ class GenericTests(BaseTestCase):
|
|||
with self.assertRaises(TypeError):
|
||||
Generic[T, S, T]
|
||||
|
||||
@skipUnless(PY36, "__init_subclass__ support required")
|
||||
def test_init_subclass(self):
|
||||
class X(typing.Generic[T]):
|
||||
def __init_subclass__(cls, **kwargs):
|
||||
super().__init_subclass__(**kwargs)
|
||||
cls.attr = 42
|
||||
class Y(X):
|
||||
pass
|
||||
self.assertEqual(Y.attr, 42)
|
||||
with self.assertRaises(AttributeError):
|
||||
X.attr
|
||||
X.attr = 1
|
||||
Y.attr = 2
|
||||
class Z(Y):
|
||||
pass
|
||||
class W(X[int]):
|
||||
pass
|
||||
self.assertEqual(Y.attr, 2)
|
||||
self.assertEqual(Z.attr, 42)
|
||||
self.assertEqual(W.attr, 42)
|
||||
|
||||
def test_repr(self):
|
||||
self.assertEqual(repr(SimpleMapping),
|
||||
__name__ + '.' + 'SimpleMapping')
|
||||
|
|
@ -1080,6 +1104,30 @@ class GenericTests(BaseTestCase):
|
|||
self.assertTrue(t is copy(t))
|
||||
self.assertTrue(t is deepcopy(t))
|
||||
|
||||
def test_copy_generic_instances(self):
|
||||
T = TypeVar('T')
|
||||
class C(Generic[T]):
|
||||
def __init__(self, attr: T) -> None:
|
||||
self.attr = attr
|
||||
|
||||
c = C(42)
|
||||
self.assertEqual(copy(c).attr, 42)
|
||||
self.assertEqual(deepcopy(c).attr, 42)
|
||||
self.assertIsNot(copy(c), c)
|
||||
self.assertIsNot(deepcopy(c), c)
|
||||
c.attr = 1
|
||||
self.assertEqual(copy(c).attr, 1)
|
||||
self.assertEqual(deepcopy(c).attr, 1)
|
||||
ci = C[int](42)
|
||||
self.assertEqual(copy(ci).attr, 42)
|
||||
self.assertEqual(deepcopy(ci).attr, 42)
|
||||
self.assertIsNot(copy(ci), ci)
|
||||
self.assertIsNot(deepcopy(ci), ci)
|
||||
ci.attr = 1
|
||||
self.assertEqual(copy(ci).attr, 1)
|
||||
self.assertEqual(deepcopy(ci).attr, 1)
|
||||
self.assertEqual(ci.__orig_class__, C[int])
|
||||
|
||||
def test_weakref_all(self):
|
||||
T = TypeVar('T')
|
||||
things = [Any, Union[T, int], Callable[..., T], Tuple[Any, Any],
|
||||
|
|
@ -1580,8 +1628,6 @@ else:
|
|||
asyncio = None
|
||||
AwaitableWrapper = AsyncIteratorWrapper = ACM = object
|
||||
|
||||
PY36 = sys.version_info[:2] >= (3, 6)
|
||||
|
||||
PY36_TESTS = """
|
||||
from test import ann_module, ann_module2, ann_module3
|
||||
from typing import AsyncContextManager
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue