diff options
| author | Yury Selivanov <yselivanov@sprymix.com> | 2015-05-13 18:10:38 (GMT) |
|---|---|---|
| committer | Yury Selivanov <yselivanov@sprymix.com> | 2015-05-13 18:10:38 (GMT) |
| commit | 29f88c22e69a33dcf6d66f1d141c111188c5d212 (patch) | |
| tree | 98de80cde64578ce11bcdb71a292b974bea6d920 /Lib/test/test_asyncio/test_pep492.py | |
| parent | 77772c0e7b8bcc21ddcfbc1be84df34bbd84942b (diff) | |
| download | cpython-29f88c22e69a33dcf6d66f1d141c111188c5d212.zip cpython-29f88c22e69a33dcf6d66f1d141c111188c5d212.tar.gz cpython-29f88c22e69a33dcf6d66f1d141c111188c5d212.tar.bz2 | |
Issue 24178: support 'async with' for asyncio locks.
Diffstat (limited to 'Lib/test/test_asyncio/test_pep492.py')
| -rw-r--r-- | Lib/test/test_asyncio/test_pep492.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py new file mode 100644 index 0000000..c9a2f96 --- /dev/null +++ b/Lib/test/test_asyncio/test_pep492.py @@ -0,0 +1,68 @@ +"""Tests support for new syntax introduced by PEP 492.""" + +import unittest +from unittest import mock + +import asyncio +from asyncio import test_utils + + +class BaseTest(test_utils.TestCase): + + def setUp(self): + self.loop = asyncio.BaseEventLoop() + self.loop._process_events = mock.Mock() + self.loop._selector = mock.Mock() + self.loop._selector.select.return_value = () + self.set_event_loop(self.loop) + + +class LockTests(BaseTest): + + def test_context_manager_async_with(self): + primitives = [ + asyncio.Lock(loop=self.loop), + asyncio.Condition(loop=self.loop), + asyncio.Semaphore(loop=self.loop), + asyncio.BoundedSemaphore(loop=self.loop), + ] + + async def test(lock): + await asyncio.sleep(0.01, loop=self.loop) + self.assertFalse(lock.locked()) + async with lock as _lock: + self.assertIs(_lock, None) + self.assertTrue(lock.locked()) + await asyncio.sleep(0.01, loop=self.loop) + self.assertTrue(lock.locked()) + self.assertFalse(lock.locked()) + + for primitive in primitives: + self.loop.run_until_complete(test(primitive)) + self.assertFalse(primitive.locked()) + + def test_context_manager_with_await(self): + primitives = [ + asyncio.Lock(loop=self.loop), + asyncio.Condition(loop=self.loop), + asyncio.Semaphore(loop=self.loop), + asyncio.BoundedSemaphore(loop=self.loop), + ] + + async def test(lock): + await asyncio.sleep(0.01, loop=self.loop) + self.assertFalse(lock.locked()) + with await lock as _lock: + self.assertIs(_lock, None) + self.assertTrue(lock.locked()) + await asyncio.sleep(0.01, loop=self.loop) + self.assertTrue(lock.locked()) + self.assertFalse(lock.locked()) + + for primitive in primitives: + self.loop.run_until_complete(test(primitive)) + self.assertFalse(primitive.locked()) + + +if __name__ == '__main__': + unittest.main() |
