GH-95736: fix IsolatedAsyncioTestCase to initialize Runner before calling setup functions (#95898)

This commit is contained in:
Kumar Aditya 2022-08-16 21:22:06 +05:30 committed by GitHub
parent 5a8c15819c
commit 9d515997f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 0 deletions

View File

@ -434,6 +434,21 @@ async def cleanup(self, fut):
test.doCleanups()
self.assertEqual(events, ['asyncSetUp', 'test', 'cleanup'])
def test_setup_get_event_loop(self):
# See https://github.com/python/cpython/issues/95736
# Make sure the default event loop is not used
asyncio.set_event_loop(None)
class TestCase1(unittest.IsolatedAsyncioTestCase):
def setUp(self):
asyncio.get_event_loop_policy().get_event_loop()
async def test_demo1(self):
pass
test = TestCase1('test_demo1')
result = test.run()
self.assertTrue(result.wasSuccessful())
if __name__ == "__main__":
unittest.main()

View File

@ -116,6 +116,10 @@ def _setupAsyncioRunner(self):
assert self._asyncioRunner is None, 'asyncio runner is already initialized'
runner = asyncio.Runner(debug=True)
self._asyncioRunner = runner
# Force loop to be initialized and set as the current loop
# so that setUp functions can use get_event_loop() and get the
# correct loop instance.
runner.get_loop()
def _tearDownAsyncioRunner(self):
runner = self._asyncioRunner

View File

@ -0,0 +1 @@
Fix :class:`unittest.IsolatedAsyncioTestCase` to set event loop before calling setup functions. Patch by Kumar Aditya.