Skip to content

Commit fcf80b0

Browse files
bpo-29598 Add couple of unit tests for pdb module
1 parent 2c700af commit fcf80b0

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

Lib/test/test_pdb.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# A test suite for pdb; not very comprehensive at the moment.
22

3+
import dis
34
import doctest
5+
import inspect
46
import os
57
import pdb
68
import sys
@@ -1110,6 +1112,44 @@ def test_readrc_kwarg(self):
11101112
if save_home is not None:
11111113
os.environ['HOME'] = save_home
11121114

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+
11131153
def tearDown(self):
11141154
support.unlink(support.TESTFN)
11151155

0 commit comments

Comments
 (0)