diff options
| author | Jelle Zijlstra <jelle.zijlstra@gmail.com> | 2017-12-14 01:19:17 (GMT) |
|---|---|---|
| committer | Yury Selivanov <yury@magic.io> | 2017-12-14 01:19:17 (GMT) |
| commit | 176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf (patch) | |
| tree | 308b48c9671eb33abe108d59b87eaaccad40d9eb /Lib/test/test_contextlib_async.py | |
| parent | bfbf04ef18c93ca8cab0453f76aeea1d8fc23fb1 (diff) | |
| download | cpython-176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf.zip cpython-176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf.tar.gz cpython-176baa326be4ec2dc70ca0c054b7e2ab7ca6a9cf.tar.bz2 | |
bpo-30241: implement contextlib.AbstractAsyncContextManager (#1412)
Diffstat (limited to 'Lib/test/test_contextlib_async.py')
| -rw-r--r-- | Lib/test/test_contextlib_async.py | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/Lib/test/test_contextlib_async.py b/Lib/test/test_contextlib_async.py index 42cc331..447ca96 100644 --- a/Lib/test/test_contextlib_async.py +++ b/Lib/test/test_contextlib_async.py @@ -1,5 +1,5 @@ import asyncio -from contextlib import asynccontextmanager +from contextlib import asynccontextmanager, AbstractAsyncContextManager import functools from test import support import unittest @@ -20,6 +20,53 @@ def _async_test(func): return wrapper +class TestAbstractAsyncContextManager(unittest.TestCase): + + @_async_test + async def test_enter(self): + class DefaultEnter(AbstractAsyncContextManager): + async def __aexit__(self, *args): + await super().__aexit__(*args) + + manager = DefaultEnter() + self.assertIs(await manager.__aenter__(), manager) + + async with manager as context: + self.assertIs(manager, context) + + def test_exit_is_abstract(self): + class MissingAexit(AbstractAsyncContextManager): + pass + + with self.assertRaises(TypeError): + MissingAexit() + + def test_structural_subclassing(self): + class ManagerFromScratch: + async def __aenter__(self): + return self + async def __aexit__(self, exc_type, exc_value, traceback): + return None + + self.assertTrue(issubclass(ManagerFromScratch, AbstractAsyncContextManager)) + + class DefaultEnter(AbstractAsyncContextManager): + async def __aexit__(self, *args): + await super().__aexit__(*args) + + self.assertTrue(issubclass(DefaultEnter, AbstractAsyncContextManager)) + + class NoneAenter(ManagerFromScratch): + __aenter__ = None + + self.assertFalse(issubclass(NoneAenter, AbstractAsyncContextManager)) + + class NoneAexit(ManagerFromScratch): + __aexit__ = None + + self.assertFalse(issubclass(NoneAexit, AbstractAsyncContextManager)) + + class AsyncContextManagerTestCase(unittest.TestCase): @_async_test |
