Commit 6e22055e authored by Georg Brandl's avatar Georg Brandl

pdb: modernize find_function() and add tests for it.

Closes #18714.
parent 7ff45205
...@@ -95,18 +95,11 @@ def find_function(funcname, filename): ...@@ -95,18 +95,11 @@ def find_function(funcname, filename):
except OSError: except OSError:
return None return None
# consumer of this info expects the first line to be 1 # consumer of this info expects the first line to be 1
lineno = 1 with fp:
answer = None for lineno, line in enumerate(fp, start=1):
while True: if cre.match(line):
line = fp.readline() return funcname, filename, lineno
if line == '': return None
break
if cre.match(line):
answer = funcname, filename, lineno
break
lineno += 1
fp.close()
return answer
def getsourcelines(obj): def getsourcelines(obj):
lines, lineno = inspect.findsource(obj) lines, lineno = inspect.findsource(obj)
......
...@@ -620,6 +620,36 @@ class PdbTestCase(unittest.TestCase): ...@@ -620,6 +620,36 @@ class PdbTestCase(unittest.TestCase):
stderr = stderr and bytes.decode(stderr) stderr = stderr and bytes.decode(stderr)
return stdout, stderr return stdout, stderr
def _assert_find_function(self, file_content, func_name, expected):
file_content = textwrap.dedent(file_content)
with open(support.TESTFN, 'w') as f:
f.write(file_content)
expected = None if not expected else (
expected[0], support.TESTFN, expected[1])
self.assertEqual(
expected, pdb.find_function(func_name, support.TESTFN))
def test_find_function_empty_file(self):
self._assert_find_function('', 'foo', None)
def test_find_function_found(self):
self._assert_find_function(
"""\
def foo():
pass
def bar():
pass
def quux():
pass
""",
'bar',
('bar', 4),
)
def test_issue7964(self): def test_issue7964(self):
# open the file as binary so we can force \r\n newline # open the file as binary so we can force \r\n newline
with open(support.TESTFN, 'wb') as f: with open(support.TESTFN, 'wb') as f:
......
...@@ -114,6 +114,8 @@ Tests ...@@ -114,6 +114,8 @@ Tests
- Issue #18919: Unified and extended tests for audio modules: aifc, sunau and - Issue #18919: Unified and extended tests for audio modules: aifc, sunau and
wave. wave.
- Issue #18714: Added tests for ``pdb.find_function()``.
Documentation Documentation
------------- -------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment