From: Russell Keith-Magee Date: Wed, 19 Mar 2025 00:33:31 +0000 (+0800) Subject: gh-121468: Ensure PDB cleans up event loop policies after using asyncio. (#131388) X-Git-Tag: v3.14.0a7~318 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b754aeedfbae7de0115b4c228b5e3061bc369812;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 8cd634426bd8..18fb94af4795 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