diff options
author | Mariatta <Mariatta@users.noreply.github.com> | 2017-02-25 00:40:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-25 00:40:50 (GMT) |
commit | bea9d2f6488f01794098d9fd4710b98df1bd9472 (patch) | |
tree | ff632009ee70eb49fe182d9163858d7e931bc6fa /Lib/test/test_typing.py | |
parent | f28db60179e59633a99fab27646d22d0bd5976a0 (diff) | |
download | cpython-bea9d2f6488f01794098d9fd4710b98df1bd9472.zip cpython-bea9d2f6488f01794098d9fd4710b98df1bd9472.tar.gz cpython-bea9d2f6488f01794098d9fd4710b98df1bd9472.tar.bz2 |
[3.6] bpo-28556: Update to typing: treat subscripted generics as proxies (GH-265) (GH-268)
(cherry picked from commit abb3b8ad94d699c8560d94ee9bac9c917b382abe)
(cherry picked from commit 365cb5bb9069273e6970c9d5d17ee2fe5003e7ac)
Diffstat (limited to 'Lib/test/test_typing.py')
-rw-r--r-- | Lib/test/test_typing.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 64d8276..f0070ec 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -674,6 +674,41 @@ class GenericTests(BaseTestCase): c.bar = 'abc' self.assertEqual(c.__dict__, {'bar': 'abc'}) + def test_subscripted_generics_as_proxies(self): + T = TypeVar('T') + class C(Generic[T]): + x = 'def' + self.assertEqual(C[int].x, 'def') + self.assertEqual(C[C[int]].x, 'def') + C[C[int]].x = 'changed' + self.assertEqual(C.x, 'changed') + self.assertEqual(C[str].x, 'changed') + C[List[str]].z = 'new' + self.assertEqual(C.z, 'new') + self.assertEqual(C[Tuple[int]].z, 'new') + + self.assertEqual(C().x, 'changed') + self.assertEqual(C[Tuple[str]]().z, 'new') + + class D(C[T]): + pass + self.assertEqual(D[int].x, 'changed') + self.assertEqual(D.z, 'new') + D.z = 'from derived z' + D[int].x = 'from derived x' + self.assertEqual(C.x, 'changed') + self.assertEqual(C[int].z, 'new') + self.assertEqual(D.x, 'from derived x') + self.assertEqual(D[str].z, 'from derived z') + + def test_abc_registry_kept(self): + T = TypeVar('T') + class C(Generic[T]): ... + C.register(int) + self.assertIsInstance(1, C) + C[int] + self.assertIsInstance(1, C) + def test_false_subclasses(self): class MyMapping(MutableMapping[str, str]): pass self.assertNotIsInstance({}, MyMapping) |