Skip to content

Commit

Permalink
pythonGH-95736: fix IsolatedAsyncioTestCase to initialize Runner befo…
Browse files Browse the repository at this point in the history
…re calling setup functions (pythonGH-95898)

(cherry picked from commit 9d51599)

Co-authored-by: Kumar Aditya <[email protected]>
  • Loading branch information
kumaraditya303 authored and miss-islington committed Aug 16, 2022
1 parent f6aa6eb commit 64b6761
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Lib/unittest/async_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 15 additions & 0 deletions Lib/unittest/test/test_async_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix :class:`unittest.IsolatedAsyncioTestCase` to set event loop before calling setup functions. Patch by Kumar Aditya.

0 comments on commit 64b6761

Please sign in to comment.