cpython: 94010653379c (original) (raw)
--- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4,6 +4,7 @@ import pickle import re import sys from unittest import TestCase, main, skipUnless, SkipTest +from copy import copy, deepcopy from typing import Any from typing import TypeVar, AnyStr @@ -845,6 +846,24 @@ class GenericTests(BaseTestCase): self.assertEqual(x.foo, 42) self.assertEqual(x.bar, 'abc') self.assertEqual(x.dict, {'foo': 42, 'bar': 'abc'})
simples = [Any, Union, Tuple, Callable, ClassVar, List, typing.Iterable][](#l1.15)
for s in simples:[](#l1.16)
for proto in range(pickle.HIGHEST_PROTOCOL + 1):[](#l1.17)
z = pickle.dumps(s, proto)[](#l1.18)
x = pickle.loads(z)[](#l1.19)
self.assertEqual(s, x)[](#l1.20)
- def test_copy_and_deepcopy(self):
T = TypeVar('T')[](#l1.23)
class Node(Generic[T]): ...[](#l1.24)
things = [Union[T, int], Tuple[T, int], Callable[..., T], Callable[[int], int],[](#l1.25)
Tuple[Any, Any], Node[T], Node[int], Node[Any], typing.Iterable[T],[](#l1.26)
typing.Iterable[Any], typing.Iterable[int], typing.Dict[int, str],[](#l1.27)
typing.Dict[T, Any], ClassVar[int], ClassVar[List[T]], Tuple['T', 'T'],[](#l1.28)
Union['T', int], List['T'], typing.Mapping['T', int]][](#l1.29)
for t in things + [Any]:[](#l1.30)
self.assertEqual(t, copy(t))[](#l1.31)
self.assertEqual(t, deepcopy(t))[](#l1.32)
def test_errors(self): with self.assertRaises(TypeError):
--- a/Lib/typing.py +++ b/Lib/typing.py @@ -190,6 +190,9 @@ class _FinalTypingBase(_TypingBase, _roo return self raise TypeError("Cannot instantiate %r" % cls)
+ class _ForwardRef(_TypingBase, _root=True): """Wrapper to hold a forward reference.""" @@ -1051,6 +1054,11 @@ class GenericMeta(TypingMeta, abc.ABCMet # classes are supposed to be rare anyways. return issubclass(instance.class, self)
- def copy(self):
return self.__class__(self.__name__, self.__bases__, dict(self.__dict__),[](#l2.18)
self.__parameters__, self.__args__, self.__origin__,[](#l2.19)
self.__extra__, self.__orig_bases__)[](#l2.20)