[bpo-28556] Minor fixes for typing module (GH-4710) (#4713) · python/cpython@b057627 (original) (raw)

`@@ -37,6 +37,9 @@

`

37

37

`from test import mod_generics_cache

`

38

38

``

39

39

``

``

40

`+

PY36 = sys.version_info[:2] >= (3, 6)

`

``

41

+

``

42

+

40

43

`class BaseTestCase(TestCase):

`

41

44

``

42

45

`def assertIsSubclass(self, cls, class_or_tuple, msg=None):

`

`@@ -633,6 +636,27 @@ def test_init(self):

`

633

636

`with self.assertRaises(TypeError):

`

634

637

`Generic[T, S, T]

`

635

638

``

``

639

`+

@skipUnless(PY36, "init_subclass support required")

`

``

640

`+

def test_init_subclass(self):

`

``

641

`+

class X(typing.Generic[T]):

`

``

642

`+

def init_subclass(cls, **kwargs):

`

``

643

`+

super().init_subclass(**kwargs)

`

``

644

`+

cls.attr = 42

`

``

645

`+

class Y(X):

`

``

646

`+

pass

`

``

647

`+

self.assertEqual(Y.attr, 42)

`

``

648

`+

with self.assertRaises(AttributeError):

`

``

649

`+

X.attr

`

``

650

`+

X.attr = 1

`

``

651

`+

Y.attr = 2

`

``

652

`+

class Z(Y):

`

``

653

`+

pass

`

``

654

`+

class W(X[int]):

`

``

655

`+

pass

`

``

656

`+

self.assertEqual(Y.attr, 2)

`

``

657

`+

self.assertEqual(Z.attr, 42)

`

``

658

`+

self.assertEqual(W.attr, 42)

`

``

659

+

636

660

`def test_repr(self):

`

637

661

`self.assertEqual(repr(SimpleMapping),

`

638

662

`name + '.' + 'SimpleMapping')

`

`@@ -1080,6 +1104,30 @@ class Node(Generic[T]): ...

`

1080

1104

`self.assertTrue(t is copy(t))

`

1081

1105

`self.assertTrue(t is deepcopy(t))

`

1082

1106

``

``

1107

`+

def test_copy_generic_instances(self):

`

``

1108

`+

T = TypeVar('T')

`

``

1109

`+

class C(Generic[T]):

`

``

1110

`+

def init(self, attr: T) -> None:

`

``

1111

`+

self.attr = attr

`

``

1112

+

``

1113

`+

c = C(42)

`

``

1114

`+

self.assertEqual(copy(c).attr, 42)

`

``

1115

`+

self.assertEqual(deepcopy(c).attr, 42)

`

``

1116

`+

self.assertIsNot(copy(c), c)

`

``

1117

`+

self.assertIsNot(deepcopy(c), c)

`

``

1118

`+

c.attr = 1

`

``

1119

`+

self.assertEqual(copy(c).attr, 1)

`

``

1120

`+

self.assertEqual(deepcopy(c).attr, 1)

`

``

1121

`+

ci = Cint

`

``

1122

`+

self.assertEqual(copy(ci).attr, 42)

`

``

1123

`+

self.assertEqual(deepcopy(ci).attr, 42)

`

``

1124

`+

self.assertIsNot(copy(ci), ci)

`

``

1125

`+

self.assertIsNot(deepcopy(ci), ci)

`

``

1126

`+

ci.attr = 1

`

``

1127

`+

self.assertEqual(copy(ci).attr, 1)

`

``

1128

`+

self.assertEqual(deepcopy(ci).attr, 1)

`

``

1129

`+

self.assertEqual(ci.orig_class, C[int])

`

``

1130

+

1083

1131

`def test_weakref_all(self):

`

1084

1132

`T = TypeVar('T')

`

1085

1133

`things = [Any, Union[T, int], Callable[..., T], Tuple[Any, Any],

`

`@@ -1580,8 +1628,6 @@ async def aexit(self, etype, eval, tb):

`

1580

1628

`asyncio = None

`

1581

1629

`AwaitableWrapper = AsyncIteratorWrapper = ACM = object

`

1582

1630

``

1583

``

`-

PY36 = sys.version_info[:2] >= (3, 6)

`

1584

``

-

1585

1631

`PY36_TESTS = """

`

1586

1632

`from test import ann_module, ann_module2, ann_module3

`

1587

1633

`from typing import AsyncContextManager

`