summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_pdb.py
blob: 68a77029028898098c54d5c4326563786934e7a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# A test suite for pdb; at the moment, this only validates skipping of
# specified test modules (RFE #5142).

import imp
import os
import sys
import doctest
import tempfile

from test import test_support
# This little helper class is essential for testing pdb under doctest.
from test_doctest import _FakeInput


def test_pdb_skip_modules():
    """This illustrates the simple case of module skipping.

    >>> def skip_module():
    ...     import string
    ...     import pdb;pdb.Pdb(skip=['string*']).set_trace()
    ...     string.lower('FOO')
    >>> real_stdin = sys.stdin
    >>> sys.stdin = _FakeInput([
    ...    'step',
    ...    'continue',
    ...    ])

    >>> try:
    ...     skip_module()
    ... finally:
    ...     sys.stdin = real_stdin
    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()
    -> string.lower('FOO')
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None
    -> string.lower('FOO')
    (Pdb) continue
"""


# Module for testing skipping of module that makes a callback
mod = imp.new_module('module_to_skip')
exec 'def foo_pony(callback): x = 1; callback(); return None' in mod.__dict__


def test_pdb_skip_modules_with_callback():
    """This illustrates skipping of modules that call into other code.

    >>> def skip_module():
    ...     def callback():
    ...         return None
    ...     import pdb;pdb.Pdb(skip=['module_to_skip*']).set_trace()
    ...     mod.foo_pony(callback)
    >>> real_stdin = sys.stdin
    >>> sys.stdin = _FakeInput([
    ...    'step',
    ...    'step',
    ...    'step',
    ...    'step',
    ...    'step',
    ...    'continue',
    ...    ])

    >>> try:
    ...     skip_module()
    ... finally:
    ...     sys.stdin = real_stdin
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()
    -> mod.foo_pony(callback)
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback()
    -> def callback():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()
    -> return None
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None
    -> return None
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None
    -> mod.foo_pony(callback)
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[3]>(4)<module>()
    -> sys.stdin = real_stdin
    (Pdb) continue
"""


def test_main():
    from test import test_pdb
    test_support.run_doctest(test_pdb, verbosity=True)


if __name__ == '__main__':
    test_main()