From: Georg Brandl Date: Sun, 13 Oct 2013 18:51:47 +0000 (+0200) Subject: pdb: modernize find_function() and add tests for it. X-Git-Tag: v3.4.0a4~120 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e22055ee1d2fa4c93abfafc0ab4029b4a808eb7;p=python pdb: modernize find_function() and add tests for it. Closes #18714. --- diff --git a/Lib/pdb.py b/Lib/pdb.py index 1ec83daf43..143b9252e5 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -95,18 +95,11 @@ def find_function(funcname, filename): except OSError: return None # consumer of this info expects the first line to be 1 - lineno = 1 - answer = None - while True: - line = fp.readline() - if line == '': - break - if cre.match(line): - answer = funcname, filename, lineno - break - lineno += 1 - fp.close() - return answer + with fp: + for lineno, line in enumerate(fp, start=1): + if cre.match(line): + return funcname, filename, lineno + return None def getsourcelines(obj): lines, lineno = inspect.findsource(obj) diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index e17f933d80..7993d02ba1 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -620,6 +620,36 @@ class PdbTestCase(unittest.TestCase): stderr = stderr and bytes.decode(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): # open the file as binary so we can force \r\n newline with open(support.TESTFN, 'wb') as f: diff --git a/Misc/NEWS b/Misc/NEWS index 3ff145f6a9..f185b17db4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -114,6 +114,8 @@ Tests - Issue #18919: Unified and extended tests for audio modules: aifc, sunau and wave. +- Issue #18714: Added tests for ``pdb.find_function()``. + Documentation -------------