blob: bcd4853d6326f13159c78eb7e180e4bf0aabf8da [file] [log] [blame]
Georg Brandl243ad662009-05-05 09:00:19 +00001# A test suite for pdb; at the moment, this only validates skipping of
2# specified test modules (RFE #5142).
3
4import imp
5import os
6import sys
7import doctest
8import tempfile
9
10from test import support
11# This little helper class is essential for testing pdb under doctest.
12from test.test_doctest import _FakeInput
13
14
15def test_pdb_skip_modules():
16 """This illustrates the simple case of module skipping.
17
18 >>> def skip_module():
19 ... import string
20 ... import pdb; pdb.Pdb(skip=['stri*']).set_trace()
21 ... string.capwords('FOO')
22 >>> real_stdin = sys.stdin
23 >>> sys.stdin = _FakeInput([
24 ... 'step',
25 ... 'continue',
26 ... ])
27
28 >>> try:
29 ... skip_module()
30 ... finally:
31 ... sys.stdin = real_stdin
32 > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()
33 -> string.capwords('FOO')
34 (Pdb) step
35 --Return--
36 > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None
37 -> string.capwords('FOO')
38 (Pdb) continue
39"""
40
41
42# Module for testing skipping of module that makes a callback
43mod = imp.new_module('module_to_skip')
44exec('def foo_pony(callback): x = 1; callback(); return None', mod.__dict__)
45
46
47def test_pdb_skip_modules_with_callback():
48 """This illustrates skipping of modules that call into other code.
49
50 >>> def skip_module():
51 ... def callback():
52 ... return None
53 ... import pdb;pdb.Pdb(skip=['module_to_skip*']).set_trace()
54 ... mod.foo_pony(callback)
55 >>> real_stdin = sys.stdin
56 >>> sys.stdin = _FakeInput([
57 ... 'step',
58 ... 'step',
59 ... 'step',
60 ... 'step',
61 ... 'step',
62 ... 'continue',
63 ... ])
64
65 >>> try:
66 ... skip_module()
67 ... finally:
68 ... sys.stdin = real_stdin
69 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()
70 -> mod.foo_pony(callback)
71 (Pdb) step
72 --Call--
73 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback()
74 -> def callback():
75 (Pdb) step
76 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()
77 -> return None
78 (Pdb) step
79 --Return--
80 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None
81 -> return None
82 (Pdb) step
83 --Return--
84 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None
85 -> mod.foo_pony(callback)
86 (Pdb) step
87 > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[3]>(4)<module>()
88 -> sys.stdin = real_stdin
89 (Pdb) continue
90"""
91
92
93def test_main():
94 from test import test_pdb
95 support.run_doctest(test_pdb, verbosity=True)
96
97
98if __name__ == '__main__':
99 test_main()