diff options
author | Guido van Rossum <guido@python.org> | 2016-11-19 18:32:41 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2016-11-19 18:32:41 (GMT) |
commit | ca4b252fba0a0540475f2edebfcabdf80f5cecdf (patch) | |
tree | 861d6cb50354b5e32b39a6806afe116742fd6c53 | |
parent | c851817aaa0b1b5e1de6eff7c3c238a49bc970c0 (diff) | |
download | cpython-ca4b252fba0a0540475f2edebfcabdf80f5cecdf.zip cpython-ca4b252fba0a0540475f2edebfcabdf80f5cecdf.tar.gz cpython-ca4b252fba0a0540475f2edebfcabdf80f5cecdf.tar.bz2 |
Issue #28556: two more small upstream changes by Ivan Levkivskyi (#329, #330)
-rw-r--r-- | Lib/test/test_typing.py | 21 | ||||
-rw-r--r-- | Lib/typing.py | 2 |
2 files changed, 21 insertions, 2 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 12bbf16..0910fd4 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -45,6 +45,10 @@ class BaseTestCase(TestCase): message += ' : %s' % msg raise self.failureException(message) + def clear_caches(self): + for f in typing._cleanups: + f() + class Employee: pass @@ -509,6 +513,13 @@ class ProtocolTests(BaseTestCase): def test_protocol_instance_type_error(self): with self.assertRaises(TypeError): isinstance(0, typing.SupportsAbs) + class C1(typing.SupportsInt): + def __int__(self) -> int: + return 42 + class C2(C1): + pass + c = C2() + self.assertIsInstance(c, C1) class GenericTests(BaseTestCase): @@ -748,8 +759,12 @@ class GenericTests(BaseTestCase): class CC: ... self.assertEqual(get_type_hints(foobar, globals(), locals()), {'x': List[List[CC]]}) T = TypeVar('T') - def barfoo(x: Tuple[T, ...]): ... - self.assertIs(get_type_hints(barfoo, globals(), locals())['x'], Tuple[T, ...]) + AT = Tuple[T, ...] + def barfoo(x: AT): ... + self.assertIs(get_type_hints(barfoo, globals(), locals())['x'], AT) + CT = Callable[..., List[T]] + def barfoo2(x: CT): ... + self.assertIs(get_type_hints(barfoo2, globals(), locals())['x'], CT) def test_extended_generic_rules_subclassing(self): class T1(Tuple[T, KT]): ... @@ -800,6 +815,8 @@ class GenericTests(BaseTestCase): def test_type_erasure_special(self): T = TypeVar('T') + # this is the only test that checks type caching + self.clear_caches() class MyTup(Tuple[T, T]): ... self.assertIs(MyTup[int]().__class__, MyTup) self.assertIs(MyTup[int]().__orig_class__, MyTup[int]) diff --git a/Lib/typing.py b/Lib/typing.py index fe22b2b..c7fe5dd 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1503,6 +1503,8 @@ class _ProtocolMeta(GenericMeta): """ def __instancecheck__(self, obj): + if _Protocol not in self.__bases__: + return super().__instancecheck__(obj) raise TypeError("Protocols cannot be used with isinstance().") def __subclasscheck__(self, cls): |