From b754aeedfbae7de0115b4c228b5e3061bc369812 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 19 Mar 2025 08:33:31 +0800 Subject: gh-121468: Ensure PDB cleans up event loop policies after using asyncio. (#131388) Adds teardown logic, plus a change to asyncio.run usage, to avoid warnings when running the test suite single process. --- Lib/test/test_pdb.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 8cd6344..18fb94a 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -13,6 +13,7 @@ import linecache import zipapp import zipfile +from asyncio.events import _set_event_loop_policy from contextlib import ExitStack, redirect_stdout from io import StringIO from test import support @@ -2154,7 +2155,7 @@ if not SKIP_CORO_TESTS: ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() >>> def test_function(): - ... asyncio.run(test()) + ... asyncio.run(test(), loop_factory=asyncio.EventLoop) >>> with PdbTestInput([ # doctest: +ELLIPSIS ... '$_asynctask', @@ -4670,13 +4671,33 @@ class PdbTestReadline(unittest.TestCase): def load_tests(loader, tests, pattern): from test import test_pdb + def setUpPdbBackend(backend): def setUp(test): import pdb pdb.set_default_backend(backend) return setUp - tests.addTest(doctest.DocTestSuite(test_pdb, setUp=setUpPdbBackend('monitoring'))) - tests.addTest(doctest.DocTestSuite(test_pdb, setUp=setUpPdbBackend('settrace'))) + + def tearDown(test): + # Ensure that asyncio state has been cleared at the end of the test. + # This prevents a "test altered the execution environment" warning if + # asyncio features are used. + _set_event_loop_policy(None) + + tests.addTest( + doctest.DocTestSuite( + test_pdb, + setUp=setUpPdbBackend('monitoring'), + tearDown=tearDown, + ) + ) + tests.addTest( + doctest.DocTestSuite( + test_pdb, + setUp=setUpPdbBackend('settrace'), + tearDown=tearDown, + ) + ) return tests -- cgit v0.12