mirror of https://github.com/python/cpython
Issue #24635: Fixed flakiness in test_typing.py. (Merge from 3.5.)
This commit is contained in:
commit
82b63fadd2
|
@ -436,12 +436,14 @@ class CallableTests(TestCase):
|
||||||
c()
|
c()
|
||||||
|
|
||||||
def test_callable_instance_works(self):
|
def test_callable_instance_works(self):
|
||||||
f = lambda: None
|
def f():
|
||||||
|
pass
|
||||||
assert isinstance(f, Callable)
|
assert isinstance(f, Callable)
|
||||||
assert not isinstance(None, Callable)
|
assert not isinstance(None, Callable)
|
||||||
|
|
||||||
def test_callable_instance_type_error(self):
|
def test_callable_instance_type_error(self):
|
||||||
f = lambda: None
|
def f():
|
||||||
|
pass
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError):
|
||||||
assert isinstance(f, Callable[[], None])
|
assert isinstance(f, Callable[[], None])
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError):
|
||||||
|
@ -674,7 +676,9 @@ class GenericTests(TestCase):
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
|
|
||||||
class Node(Generic[T]):
|
class Node(Generic[T]):
|
||||||
def __init__(self, label: T, left: 'Node[T]' = None, right: 'Node[T]' = None):
|
def __init__(self, label: T,
|
||||||
|
left: 'Node[T]' = None,
|
||||||
|
right: 'Node[T]' = None):
|
||||||
self.label = label # type: T
|
self.label = label # type: T
|
||||||
self.left = left # type: Optional[Node[T]]
|
self.left = left # type: Optional[Node[T]]
|
||||||
self.right = right # type: Optional[Node[T]]
|
self.right = right # type: Optional[Node[T]]
|
||||||
|
@ -933,9 +937,16 @@ class CollectionsAbcTests(TestCase):
|
||||||
assert not isinstance([], typing.Hashable)
|
assert not isinstance([], typing.Hashable)
|
||||||
|
|
||||||
def test_iterable(self):
|
def test_iterable(self):
|
||||||
|
assert isinstance([], typing.Iterable)
|
||||||
|
# Due to ABC caching, the second time takes a separate code
|
||||||
|
# path and could fail. So call this a few times.
|
||||||
|
assert isinstance([], typing.Iterable)
|
||||||
assert isinstance([], typing.Iterable)
|
assert isinstance([], typing.Iterable)
|
||||||
assert isinstance([], typing.Iterable[int])
|
assert isinstance([], typing.Iterable[int])
|
||||||
assert not isinstance(42, typing.Iterable)
|
assert not isinstance(42, typing.Iterable)
|
||||||
|
# Just in case, also test issubclass() a few times.
|
||||||
|
assert issubclass(list, typing.Iterable)
|
||||||
|
assert issubclass(list, typing.Iterable)
|
||||||
|
|
||||||
def test_iterator(self):
|
def test_iterator(self):
|
||||||
it = iter([])
|
it = iter([])
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
# TODO:
|
|
||||||
# - Generic[T, T] is invalid
|
|
||||||
# - Look for TODO below
|
|
||||||
|
|
||||||
# TODO nits:
|
# TODO nits:
|
||||||
# Get rid of asserts that are the caller's fault.
|
# Get rid of asserts that are the caller's fault.
|
||||||
# Docstrings (e.g. ABCs).
|
# Docstrings (e.g. ABCs).
|
||||||
|
@ -963,7 +959,8 @@ class GenericMeta(TypingMeta, abc.ABCMeta):
|
||||||
raise TypeError("Initial parameters must be "
|
raise TypeError("Initial parameters must be "
|
||||||
"type variables; got %s" % p)
|
"type variables; got %s" % p)
|
||||||
if len(set(params)) != len(params):
|
if len(set(params)) != len(params):
|
||||||
raise TypeError("All type variables in Generic[...] must be distinct.")
|
raise TypeError(
|
||||||
|
"All type variables in Generic[...] must be distinct.")
|
||||||
else:
|
else:
|
||||||
if len(params) != len(self.__parameters__):
|
if len(params) != len(self.__parameters__):
|
||||||
raise TypeError("Cannot change parameter count from %d to %d" %
|
raise TypeError("Cannot change parameter count from %d to %d" %
|
||||||
|
@ -987,6 +984,14 @@ class GenericMeta(TypingMeta, abc.ABCMeta):
|
||||||
origin=self,
|
origin=self,
|
||||||
extra=self.__extra__)
|
extra=self.__extra__)
|
||||||
|
|
||||||
|
def __instancecheck__(self, instance):
|
||||||
|
# Since we extend ABC.__subclasscheck__ and
|
||||||
|
# ABC.__instancecheck__ inlines the cache checking done by the
|
||||||
|
# latter, we must extend __instancecheck__ too. For simplicity
|
||||||
|
# we just skip the cache check -- instance checks for generic
|
||||||
|
# classes are supposed to be rare anyways.
|
||||||
|
return self.__subclasscheck__(instance.__class__)
|
||||||
|
|
||||||
def __subclasscheck__(self, cls):
|
def __subclasscheck__(self, cls):
|
||||||
if cls is Any:
|
if cls is Any:
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -172,6 +172,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #24635: Fixed a bug in typing.py where isinstance([], typing.Iterable)
|
||||||
|
would return True once, then False on subsequent calls.
|
||||||
|
|
||||||
- Issue #24989: Fixed buffer overread in BytesIO.readline() if a position is
|
- Issue #24989: Fixed buffer overread in BytesIO.readline() if a position is
|
||||||
set beyond size. Based on patch by John Leitch.
|
set beyond size. Based on patch by John Leitch.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue