183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# A test suite for pdb; at the moment, this only validates skipping of
283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# specified test modules (RFE #5142).
383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport imp
583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport sys
683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport os
783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport unittest
883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport subprocess
983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport textwrap
1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test import test_support
1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# This little helper class is essential for testing pdb under doctest.
1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test_doctest import _FakeInput
1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass PdbTestCase(unittest.TestCase):
1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def run_pdb(self, script, commands):
1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """Run 'script' lines with pdb and the pdb 'commands'."""
2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        filename = 'main.py'
2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        with open(filename, 'w') as f:
2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            f.write(textwrap.dedent(script))
2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.addCleanup(test_support.unlink, filename)
2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        cmd = [sys.executable, '-m', 'pdb', filename]
2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        stdout = stderr = None
2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                                   stdin=subprocess.PIPE,
2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                                   stderr=subprocess.STDOUT,
2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                                   )
3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        stdout, stderr = proc.communicate(commands)
3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        proc.stdout.close()
3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        proc.stdin.close()
3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        return stdout, stderr
3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def test_issue13183(self):
3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        script = """
3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            from bar import bar
3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            def foo():
4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                bar()
4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            def nope():
4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                pass
4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            def foobar():
4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                foo()
4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                nope()
4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            foobar()
5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """
5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        commands = """
5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            from bar import bar
5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            break bar
5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            continue
5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            step
5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            step
5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            quit
5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """
5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        bar = """
6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            def bar():
6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh                pass
6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """
6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        with open('bar.py', 'w') as f:
6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            f.write(textwrap.dedent(bar))
6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.addCleanup(test_support.unlink, 'bar.py')
6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        stdout, stderr = self.run_pdb(script, commands)
6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.assertTrue(
6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            any('main.py(5)foo()->None' in l for l in stdout.splitlines()),
6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            'Fail to step into the caller after a return')
7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass PdbTestInput(object):
7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """Context manager that makes testing Pdb in doctests easier."""
7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def __init__(self, input):
7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.input = input
7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def __enter__(self):
7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.real_stdin = sys.stdin
8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        sys.stdin = _FakeInput(self.input)
8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
8283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def __exit__(self, *exc):
8383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        sys.stdin = self.real_stdin
8483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
8583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
8683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef write(x):
8783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    print x
8883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
8983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_displayhook():
9083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """This tests the custom displayhook for pdb.
9183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
9283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> def test_function(foo, bar):
9383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import pdb; pdb.Pdb().set_trace()
9483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     pass
9583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
9683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> with PdbTestInput([
9783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'foo',
9883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'bar',
9983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'for i in range(5): write(i)',
10083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
10183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ... ]):
10283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     test_function(1, None)
10383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_displayhook[0]>(3)test_function()
10483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> pass
10583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) foo
10683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1
10783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) bar
10883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) for i in range(5): write(i)
10983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    0
11083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1
11183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    2
11283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    3
11383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    4
11483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
11583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """
11683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
11783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_breakpoint_commands():
11883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """Test basic commands related to breakpoints.
11983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
12083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> def test_function():
12183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import pdb; pdb.Pdb().set_trace()
12283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(1)
12383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(2)
12483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(3)
12583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(4)
12683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
12783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    First, need to clear bdb state that might be left over from previous tests.
12883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Otherwise, the new breakpoints might get assigned different numbers.
12983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
13083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> from bdb import Breakpoint
13183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.next = 1
13283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.bplist = {}
13383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.bpbynumber = [None]
13483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
13583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Now test the breakpoint commands.  NORMALIZE_WHITESPACE is needed because
13683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    the breakpoint list outputs a tab for the "stop only" and "ignore next"
13783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    lines, which we don't want to put in here.
13883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
13983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
14083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break 3',
14183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'disable 1',
14283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'ignore 1 10',
14383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'condition 1 1 < 2',
14483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break 4',
14583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break 4',
14683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break',
14783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'clear 3',
14883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break',
14983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'condition 1',
15083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'enable 1',
15183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'clear 1',
15283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'commands 2',
15383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'print 42',
15483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'end',
15583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',  # will stop at breakpoint 2 (line 4)
15683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'clear',     # clear all!
15783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'y',
15883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'tbreak 5',
15983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',  # will stop at temporary breakpoint
16083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break',     # make sure breakpoint is gone
16183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
16283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ... ]):
16383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...    test_function()
16483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(3)test_function()
16583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(1)
16683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break 3
16783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
16883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) disable 1
16983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) ignore 1 10
17083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Will ignore next 10 crossings of breakpoint 1.
17183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) condition 1 1 < 2
17283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break 4
17383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
17483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break 4
17583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
17683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break
17783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Num Type         Disp Enb   Where
17883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1   breakpoint   keep no    at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
17983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            stop only if 1 < 2
18083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            ignore next 10 hits
18183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    2   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
18283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    3   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
18383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) clear 3
18483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Deleted breakpoint 3
18583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break
18683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Num Type         Disp Enb   Where
18783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1   breakpoint   keep no    at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
18883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            stop only if 1 < 2
18983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            ignore next 10 hits
19083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    2   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
19183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) condition 1
19283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 1 is now unconditional.
19383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) enable 1
19483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) clear 1
19583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Deleted breakpoint 1
19683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) commands 2
19783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (com) print 42
19883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (com) end
19983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
20083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1
20183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    42
20283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(4)test_function()
20383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(2)
20483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) clear
20583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Clear all breaks? y
20683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) tbreak 5
20783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
20883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
20983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    2
21083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Deleted breakpoint 4
21183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(5)test_function()
21283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(3)
21383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break
21483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
21583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    3
21683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    4
21783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """
21883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
21983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
22083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_skip_modules():
22183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """This illustrates the simple case of module skipping.
22283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
22383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> def skip_module():
22483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import string
22583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import pdb; pdb.Pdb(skip=['string*']).set_trace()
22683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     string.lower('FOO')
22783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
22883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> with PdbTestInput([
22983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
23083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
23183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ... ]):
23283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     skip_module()
23383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()
23483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> string.lower('FOO')
23583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
23683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    --Return--
23783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None
23883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> string.lower('FOO')
23983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
24083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """
24183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
24283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
24383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Module for testing skipping of module that makes a callback
24483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmod = imp.new_module('module_to_skip')
24583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehexec 'def foo_pony(callback): x = 1; callback(); return None' in mod.__dict__
24683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
24783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
24883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_skip_modules_with_callback():
24983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """This illustrates skipping of modules that call into other code.
25083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
25183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> def skip_module():
25283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     def callback():
25383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...         return None
25483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import pdb; pdb.Pdb(skip=['module_to_skip*']).set_trace()
25583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     mod.foo_pony(callback)
25683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
25783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> with PdbTestInput([
25883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
25983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
26083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
26183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
26283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'step',
26383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
26483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ... ]):
26583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     skip_module()
26683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     pass  # provides something to "step" to
26783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()
26883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> mod.foo_pony(callback)
26983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
27083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    --Call--
27183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback()
27283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> def callback():
27383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
27483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()
27583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> return None
27683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
27783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    --Return--
27883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None
27983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> return None
28083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
28183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    --Return--
28283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None
28383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> mod.foo_pony(callback)
28483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) step
28583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[1]>(10)<module>()
28683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> pass  # provides something to "step" to
28783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
28883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """
28983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
29083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
29183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_continue_in_bottomframe():
29283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """Test that "continue" and "next" work properly in bottom frame (issue #5294).
29383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
29483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> def test_function():
29583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     import pdb, sys; inst = pdb.Pdb()
29683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     inst.set_trace()
29783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     inst.botframe = sys._getframe()  # hackery to get the right botframe
29883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(1)
29983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(2)
30083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(3)
30183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     print(4)
30283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
30383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    First, need to clear bdb state that might be left over from previous tests.
30483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Otherwise, the new breakpoints might get assigned different numbers.
30583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
30683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> from bdb import Breakpoint
30783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.next = 1
30883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.bplist = {}
30983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> Breakpoint.bpbynumber = [None]
31083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
31183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    >>> with PdbTestInput([
31283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'next',
31383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'break 7',
31483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
31583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'next',
31683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
31783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...     'continue',
31883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ... ]):
31983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    ...    test_function()
32083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(4)test_function()
32183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> inst.botframe = sys._getframe()  # hackery to get the right botframe
32283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) next
32383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(5)test_function()
32483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(1)
32583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) break 7
32683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    Breakpoint 1 at <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>:7
32783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
32883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    1
32983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    2
33083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(7)test_function()
33183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(3)
33283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) next
33383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    3
33483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(8)test_function()
33583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    -> print(4)
33683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    (Pdb) continue
33783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    4
33883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    """
33983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
34083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass ModuleInitTester(unittest.TestCase):
34183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
34283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    def test_filename_correct(self):
34383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """
34483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        In issue 7750, it was found that if the filename has a sequence that
34583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        resolves to an escape character in a Python string (such as \t), it
34683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        will be treated as the escaped character.
34783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        """
34883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        # the test_fn must contain something like \t
34983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        # on Windows, this will create 'test_mod.py' in the current directory.
35083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        # on Unix, this will create '.\test_mod.py' in the current directory.
35183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        test_fn = '.\\test_mod.py'
35283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        code = 'print("testing pdb")'
35383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        with open(test_fn, 'w') as f:
35483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            f.write(code)
35583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.addCleanup(os.remove, test_fn)
35683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        cmd = [sys.executable, '-m', 'pdb', test_fn,]
35783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        proc = subprocess.Popen(cmd,
35883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            stdout=subprocess.PIPE,
35983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            stdin=subprocess.PIPE,
36083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            stderr=subprocess.STDOUT,
36183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh            )
36283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        stdout, stderr = proc.communicate('quit\n')
36383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        self.assertIn(code, stdout, "pdb munged the filename")
36483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
36583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
36683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_main():
36783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    from test import test_pdb
36883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    test_support.run_doctest(test_pdb, verbosity=True)
36983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    test_support.run_unittest(
37083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        PdbTestCase,
37183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh        ModuleInitTester)
37283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh
37383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == '__main__':
37483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh    test_main()
375