https://github.com/python/cpython/commit/62173cc02c235e1750f13995189c482eac7699e7 commit: 62173cc02c235e1750f13995189c482eac7699e7 branch: main author: Tian Gao <gaogaotiant...@hotmail.com> committer: gaogaotiantian <gaogaotiant...@hotmail.com> date: 2025-04-16T13:44:33-04:00 summary:
Clean up pdb state after each pdb doctest (#132577) files: M Lib/test/test_pdb.py diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 38d24a2bcc43f4..db79dcd6e65230 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -224,10 +224,6 @@ def test_pdb_basic_commands(): BAZ """ -def reset_Breakpoint(): - import bdb - bdb.Breakpoint.clearBreakpoints() - def test_pdb_breakpoint_commands(): """Test basic commands related to breakpoints. @@ -238,11 +234,6 @@ def test_pdb_breakpoint_commands(): ... print(3) ... print(4) - First, need to clear bdb state that might be left over from previous tests. - Otherwise, the new breakpoints might get assigned different numbers. - - >>> reset_Breakpoint() - Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because the breakpoint list outputs a tab for the "stop only" and "ignore next" lines, which we don't want to put in here. @@ -367,8 +358,6 @@ def test_pdb_breakpoint_commands(): def test_pdb_breakpoint_ignore_and_condition(): """ - >>> reset_Breakpoint() - >>> def test_function(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... for i in range(5): @@ -384,26 +373,26 @@ def test_pdb_breakpoint_ignore_and_condition(): ... 'continue', ... ]): ... test_function() - > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[1]>(2)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[0]>(2)test_function() -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() (Pdb) break 4 - Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[1]>:4 + Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[0]>:4 (Pdb) ignore 1 2 Will ignore next 2 crossings of breakpoint 1. (Pdb) continue 0 1 - > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[1]>(4)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[0]>(4)test_function() -> print(i) (Pdb) condition 1 i == 4 New condition set for breakpoint 1. (Pdb) continue 2 3 - > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[1]>(4)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[0]>(4)test_function() -> print(i) (Pdb) clear 1 - Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[1]>:4 + Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_ignore_and_condition[0]>:4 (Pdb) continue 4 """ @@ -420,8 +409,6 @@ def test_pdb_breakpoint_on_annotated_function_def(): >>> def foobar[T]() -> int: ... return 0 - >>> reset_Breakpoint() - >>> def test_function(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... pass @@ -433,7 +420,7 @@ def test_pdb_breakpoint_on_annotated_function_def(): ... 'continue', ... ]): ... test_function() - > <doctest test.test_pdb.test_pdb_breakpoint_on_annotated_function_def[4]>(2)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_on_annotated_function_def[3]>(2)test_function() -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() (Pdb) break foo Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_on_annotated_function_def[0]>:2 @@ -453,8 +440,6 @@ def test_pdb_commands(): ... print(2) ... print(3) - >>> reset_Breakpoint() - >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE ... 'b 3', ... 'commands', @@ -501,13 +486,6 @@ def test_pdb_breakpoint_with_filename(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... mod2.func88() ... mod2.func114() - ... # Be a good citizen and clean up the mess - ... reset_Breakpoint() - - First, need to clear bdb state that might be left over from previous tests. - Otherwise, the new breakpoints might get assigned different numbers. - - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS ... 'break test.test_inspect.inspect_fodder2:90', @@ -535,7 +513,6 @@ def test_pdb_breakpoint_with_filename(): def test_pdb_breakpoint_on_disabled_line(): """New breakpoint on once disabled line should work - >>> reset_Breakpoint() >>> def test_function(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... for i in range(3): @@ -552,23 +529,23 @@ def test_pdb_breakpoint_on_disabled_line(): ... 'c' ... ]): ... test_function() - > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>(2)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>(2)test_function() -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() (Pdb) break 5 - Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>:5 + Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>:5 (Pdb) c - > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>(5)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>(5)test_function() -> print(j) (Pdb) clear 1 - Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>:5 + Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>:5 (Pdb) break 4 - Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>:4 + Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>:4 (Pdb) c 0 - > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>(4)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>(4)test_function() -> j = i * 2 (Pdb) clear 2 - Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[1]>:4 + Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_on_disabled_line[0]>:4 (Pdb) c 2 4 @@ -577,7 +554,6 @@ def test_pdb_breakpoint_on_disabled_line(): def test_pdb_breakpoints_preserved_across_interactive_sessions(): """Breakpoints are remembered between interactive sessions - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'import test.test_pdb', ... 'break test.test_pdb.do_something', @@ -662,7 +638,6 @@ def test_pdb_break_anywhere(): >>> def test_function(): ... caller() - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE ... 'b 3', ... 'c', @@ -1776,7 +1751,6 @@ def test_pdb_return_to_different_file(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... pprint.pprint(A()) - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'b A.__repr__', ... 'continue', @@ -2031,7 +2005,6 @@ def test_next_until_return_at_return_event(): ... test_function_2() ... end = 1 - >>> reset_Breakpoint() >>> with PdbTestInput(['break test_function_2', ... 'continue', ... 'return', @@ -2501,7 +2474,6 @@ def test_pdb_next_command_in_generator_for_loop(): ... print('value', i) ... x = 123 - >>> reset_Breakpoint() >>> with PdbTestInput(['break test_gen', ... 'continue', ... 'next', @@ -2584,8 +2556,6 @@ def test_pdb_next_command_subiterator(): def test_pdb_breakpoint_with_throw(): """GH-132536: PY_THROW event should not be turned off - >>> reset_Breakpoint() - >>> def gen(): ... yield 0 @@ -2604,15 +2574,15 @@ def test_pdb_breakpoint_with_throw(): ... 'continue', ... ]): ... test_function() - > <doctest test.test_pdb.test_pdb_breakpoint_with_throw[2]>(2)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_with_throw[1]>(2)test_function() -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() (Pdb) b 7 - Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_with_throw[2]>:7 + Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_with_throw[1]>:7 (Pdb) continue - > <doctest test.test_pdb.test_pdb_breakpoint_with_throw[2]>(7)test_function() + > <doctest test.test_pdb.test_pdb_breakpoint_with_throw[1]>(7)test_function() -> pass (Pdb) clear 1 - Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_with_throw[2]>:7 + Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_with_throw[1]>:7 (Pdb) continue """ @@ -2807,7 +2777,6 @@ def test_pdb_issue_20766(): ... print('pdb %d: %s' % (i, sess._previous_sigint_handler)) ... i += 1 - >>> reset_Breakpoint() >>> with PdbTestInput(['continue', ... 'continue']): ... test_function() @@ -2830,7 +2799,6 @@ def test_pdb_issue_43318(): ... print(2) ... print(3) ... print(4) - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE ... 'break 3', ... 'clear <doctest test.test_pdb.test_pdb_issue_43318[0]>:3', @@ -2867,7 +2835,6 @@ def test_pdb_issue_gh_91742(): ... about() - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE ... 'step', ... 'step', @@ -2914,7 +2881,6 @@ def test_pdb_issue_gh_94215(): ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() ... func() - >>> reset_Breakpoint() >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE ... 'step', ... 'step', @@ -3145,8 +3111,6 @@ def test_pdb_f_trace_lines(): pdb should work even if f_trace_lines is set to False on some frames. - >>> reset_Breakpoint() - >>> def test_function(): ... import sys ... frame = sys._getframe() @@ -3159,7 +3123,7 @@ def test_pdb_f_trace_lines(): ... 'continue' ... ]): ... test_function() - > <doctest test.test_pdb.test_pdb_f_trace_lines[1]>(5)test_function() + > <doctest test.test_pdb.test_pdb_f_trace_lines[0]>(5)test_function() -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() (Pdb) continue """ @@ -4719,6 +4683,21 @@ def tearDown(test): # asyncio features are used. _set_event_loop_policy(None) + # A doctest of pdb could have residues. For example, pdb could still + # be running, or breakpoints might be left uncleared. These residues + # could potentially interfere with the following test, especially + # when we switch backends. Here we clear all the residues to restore + # to its pre-test state. + + # clear all the breakpoints left + import bdb + bdb.Breakpoint.clearBreakpoints() + + # Stop tracing and clear the pdb instance cache + if pdb.Pdb._last_pdb_instance: + pdb.Pdb._last_pdb_instance.stop_trace() + pdb.Pdb._last_pdb_instance = None + tests.addTest( doctest.DocTestSuite( test_pdb, _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com