summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_contextlib_async.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_contextlib_async.py')
-rw-r--r--Lib/test/test_contextlib_async.py59
1 files changed, 58 insertions, 1 deletions
diff --git a/Lib/test/test_contextlib_async.py b/Lib/test/test_contextlib_async.py
index 43fb7fc..3765f6c 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, AbstractAsyncContextManager, AsyncExitStack
+from contextlib import aclosing, asynccontextmanager, AbstractAsyncContextManager, AsyncExitStack
import functools
from test import support
import unittest
@@ -279,6 +279,63 @@ class AsyncContextManagerTestCase(unittest.TestCase):
self.assertEqual(target, (11, 22, 33, 44))
+class AclosingTestCase(unittest.TestCase):
+
+ @support.requires_docstrings
+ def test_instance_docs(self):
+ cm_docstring = aclosing.__doc__
+ obj = aclosing(None)
+ self.assertEqual(obj.__doc__, cm_docstring)
+
+ @_async_test
+ async def test_aclosing(self):
+ state = []
+ class C:
+ async def aclose(self):
+ state.append(1)
+ x = C()
+ self.assertEqual(state, [])
+ async with aclosing(x) as y:
+ self.assertEqual(x, y)
+ self.assertEqual(state, [1])
+
+ @_async_test
+ async def test_aclosing_error(self):
+ state = []
+ class C:
+ async def aclose(self):
+ state.append(1)
+ x = C()
+ self.assertEqual(state, [])
+ with self.assertRaises(ZeroDivisionError):
+ async with aclosing(x) as y:
+ self.assertEqual(x, y)
+ 1 / 0
+ self.assertEqual(state, [1])
+
+ @_async_test
+ async def test_aclosing_bpo41229(self):
+ state = []
+
+ class Resource:
+ def __del__(self):
+ state.append(1)
+
+ async def agenfunc():
+ r = Resource()
+ yield -1
+ yield -2
+
+ x = agenfunc()
+ self.assertEqual(state, [])
+ with self.assertRaises(ZeroDivisionError):
+ async with aclosing(x) as y:
+ self.assertEqual(x, y)
+ self.assertEqual(-1, await x.__anext__())
+ 1 / 0
+ self.assertEqual(state, [1])
+
+
class TestAsyncExitStack(TestBaseExitStack, unittest.TestCase):
class SyncAsyncExitStack(AsyncExitStack):
@staticmethod