|
1 | 1 | # A test suite for pdb; not very comprehensive at the moment.
|
2 | 2 |
|
| 3 | +import dis |
3 | 4 | import doctest
|
| 5 | +import inspect |
4 | 6 | import os
|
5 | 7 | import pdb
|
6 | 8 | import sys
|
@@ -1110,6 +1112,44 @@ def test_readrc_kwarg(self):
|
1110 | 1112 | if save_home is not None:
|
1111 | 1113 | os.environ['HOME'] = save_home
|
1112 | 1114 |
|
| 1115 | + def test_find_function_with_invalid_filename(self): |
| 1116 | + self.assertIsNone(pdb.find_function('foo', 'invalid filename')) |
| 1117 | + |
| 1118 | + def test_getsourcelines(self): |
| 1119 | + def foo(): |
| 1120 | + pass # pragma: no cover |
| 1121 | + lines, lineno = inspect.findsource(foo) |
| 1122 | + expected_lines = inspect.getblock(lines[lineno:]) |
| 1123 | + expected_lineno = lineno + 1 |
| 1124 | + actual_lines, actual_lineno = pdb.getsourcelines(foo) |
| 1125 | + self.assertEqual(actual_lines, expected_lines) |
| 1126 | + self.assertEqual(actual_lineno, expected_lineno) |
| 1127 | + |
| 1128 | + def test_getsourcelines_with_module_frame_obj(self): |
| 1129 | + for frame, *unused in inspect.getouterframes(inspect.currentframe()): |
| 1130 | + if frame.f_globals is frame.f_locals: |
| 1131 | + module_frame = frame |
| 1132 | + break |
| 1133 | + expected_lines = inspect.findsource(module_frame)[0] |
| 1134 | + lines, lineno = pdb.getsourcelines(module_frame) |
| 1135 | + self.assertEqual(lines, expected_lines) |
| 1136 | + self.assertEqual(lineno, 1) |
| 1137 | + |
| 1138 | + def test_getsourcelines_with_module_obj(self): |
| 1139 | + module = inspect.getmodule(inspect.currentframe()) |
| 1140 | + expected_lines = inspect.findsource(module)[0] |
| 1141 | + lines, lineno = pdb.getsourcelines(module) |
| 1142 | + self.assertEqual(lines, expected_lines) |
| 1143 | + self.assertEqual(lineno, 1) |
| 1144 | + |
| 1145 | + def test_lasti2lineno(self): |
| 1146 | + code_obj = inspect.currentframe().f_code |
| 1147 | + max_offset, max_lineno = max(dis.findlinestarts(code_obj)) |
| 1148 | + min_offset, min_lineno = min(dis.findlinestarts(code_obj)) |
| 1149 | + self.assertEqual(pdb.lasti2lineno(code_obj, max_offset), max_lineno) |
| 1150 | + self.assertEqual(pdb.lasti2lineno(code_obj, max_offset+1), max_lineno) |
| 1151 | + self.assertEqual(pdb.lasti2lineno(code_obj, min_offset-1), 0) |
| 1152 | + |
1113 | 1153 | def tearDown(self):
|
1114 | 1154 | support.unlink(support.TESTFN)
|
1115 | 1155 |
|
|
0 commit comments