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