mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue 24315: Make collections.abc.Coroutine derived from Awaitable
(Merge 3.5)
This commit is contained in:
commit
a24fcfdf23
4 changed files with 67 additions and 40 deletions
|
@ -97,18 +97,14 @@ class CoroutineTests(BaseTest):
|
|||
finally:
|
||||
f.close() # silence warning
|
||||
|
||||
class FakeCoro(collections.abc.Coroutine):
|
||||
# Test that asyncio.iscoroutine() uses collections.abc.Coroutine
|
||||
class FakeCoro:
|
||||
def send(self, value): pass
|
||||
def throw(self, typ, val=None, tb=None): pass
|
||||
def close(self): pass
|
||||
def __await__(self): yield
|
||||
|
||||
fc = FakeCoro()
|
||||
try:
|
||||
self.assertTrue(asyncio.iscoroutine(fc))
|
||||
finally:
|
||||
# To make sure that ABCMeta caches are freed
|
||||
# from FakeCoro ASAP.
|
||||
fc = FakeCoro = None
|
||||
support.gc_collect()
|
||||
self.assertTrue(asyncio.iscoroutine(FakeCoro()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -496,6 +496,8 @@ class TestOneTrickPonyABCs(ABCTestCase):
|
|||
return value
|
||||
def throw(self, typ, val=None, tb=None):
|
||||
super().throw(typ, val, tb)
|
||||
def __await__(self):
|
||||
yield
|
||||
|
||||
non_samples = [None, int(), gen(), object()]
|
||||
for x in non_samples:
|
||||
|
@ -515,13 +517,7 @@ class TestOneTrickPonyABCs(ABCTestCase):
|
|||
self.assertIsInstance(c, Awaitable)
|
||||
c.close() # awoid RuntimeWarning that coro() was not awaited
|
||||
|
||||
class CoroLike:
|
||||
def send(self, value):
|
||||
pass
|
||||
def throw(self, typ, val=None, tb=None):
|
||||
pass
|
||||
def close(self):
|
||||
pass
|
||||
class CoroLike: pass
|
||||
Coroutine.register(CoroLike)
|
||||
self.assertTrue(isinstance(CoroLike(), Awaitable))
|
||||
self.assertTrue(issubclass(CoroLike, Awaitable))
|
||||
|
@ -548,6 +544,8 @@ class TestOneTrickPonyABCs(ABCTestCase):
|
|||
return value
|
||||
def throw(self, typ, val=None, tb=None):
|
||||
super().throw(typ, val, tb)
|
||||
def __await__(self):
|
||||
yield
|
||||
|
||||
non_samples = [None, int(), gen(), object(), Bar()]
|
||||
for x in non_samples:
|
||||
|
@ -567,6 +565,28 @@ class TestOneTrickPonyABCs(ABCTestCase):
|
|||
self.assertIsInstance(c, Coroutine)
|
||||
c.close() # awoid RuntimeWarning that coro() was not awaited
|
||||
|
||||
class CoroLike:
|
||||
def send(self, value):
|
||||
pass
|
||||
def throw(self, typ, val=None, tb=None):
|
||||
pass
|
||||
def close(self):
|
||||
pass
|
||||
def __await__(self):
|
||||
pass
|
||||
self.assertTrue(isinstance(CoroLike(), Coroutine))
|
||||
self.assertTrue(issubclass(CoroLike, Coroutine))
|
||||
|
||||
class CoroLike:
|
||||
def send(self, value):
|
||||
pass
|
||||
def close(self):
|
||||
pass
|
||||
def __await__(self):
|
||||
pass
|
||||
self.assertFalse(isinstance(CoroLike(), Coroutine))
|
||||
self.assertFalse(issubclass(CoroLike, Coroutine))
|
||||
|
||||
def test_Hashable(self):
|
||||
# Check some non-hashables
|
||||
non_samples = [bytearray(), list(), set(), dict()]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue