diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 0ea2af5541750c..1d6bee99e9758c 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1,6 +1,8 @@ # A test suite for pdb; not very comprehensive at the moment. +import dis import doctest +import inspect import os import pdb import sys @@ -1110,6 +1112,44 @@ def test_readrc_kwarg(self): if save_home is not None: os.environ['HOME'] = save_home + def test_find_function_with_invalid_filename(self): + self.assertIsNone(pdb.find_function('foo', 'invalid filename')) + + def test_getsourcelines(self): + def foo(): + pass # pragma: no cover + lines, lineno = inspect.findsource(foo) + expected_lines = inspect.getblock(lines[lineno:]) + expected_lineno = lineno + 1 + actual_lines, actual_lineno = pdb.getsourcelines(foo) + self.assertEqual(actual_lines, expected_lines) + self.assertEqual(actual_lineno, expected_lineno) + + def test_getsourcelines_with_module_frame_obj(self): + for frame, *unused in inspect.getouterframes(inspect.currentframe()): + if frame.f_globals is frame.f_locals: + module_frame = frame + break + expected_lines = inspect.findsource(module_frame)[0] + lines, lineno = pdb.getsourcelines(module_frame) + self.assertEqual(lines, expected_lines) + self.assertEqual(lineno, 1) + + def test_getsourcelines_with_module_obj(self): + module = inspect.getmodule(inspect.currentframe()) + expected_lines = inspect.findsource(module)[0] + lines, lineno = pdb.getsourcelines(module) + self.assertEqual(lines, expected_lines) + self.assertEqual(lineno, 1) + + def test_lasti2lineno(self): + code_obj = inspect.currentframe().f_code + max_offset, max_lineno = max(dis.findlinestarts(code_obj)) + min_offset, min_lineno = min(dis.findlinestarts(code_obj)) + self.assertEqual(pdb.lasti2lineno(code_obj, max_offset), max_lineno) + self.assertEqual(pdb.lasti2lineno(code_obj, max_offset+1), max_lineno) + self.assertEqual(pdb.lasti2lineno(code_obj, min_offset-1), 0) + def tearDown(self): support.unlink(support.TESTFN)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: