diff -r 379372612f6d Lib/test/test_bdb.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/test_bdb.py Sun Oct 27 13:45:27 2013 -0400 @@ -0,0 +1,307 @@ +import bdb +import unittest +import os +import sys +import tempfile + +class BdbTestCase(unittest.TestCase): + def setUp(self): + self.debugger = TestBdb() + self.debugger.quitting = False + self.debugger.reset() + self.frame = FakeFrame() + self.debugger.skip = [] + self.debugged_file = tempfile.NamedTemporaryFile() + self.frame.f_code.co_filename = self.debugged_file.name + bdb.Breakpoint.next = 1 + bdb.Breakpoint.bplist = {} + bdb.Breakpoint.bpbynumber = [None] + + def test_canonic(self): + self.assertEqual("", self.debugger.canonic("")) + self.assertEqual(os.path.abspath("foo"), self.debugger.canonic("foo")) + + def test_reset(self): + self.debugger.botframe = 1 + self.debugger.stopframe = 1 + self.debugger.returnframe = 1 + self.debugger.reset() + self.assertEqual(None, self.debugger.botframe) + self.assertEqual(None, self.debugger.stopframe) + self.assertEqual(None, self.debugger.returnframe) + + def test_trace_dispatch_quitting(self): + self.debugger.quitting = True + self.assertEqual(None, self.debugger.trace_dispatch(None, None, None)) + + def test_trace_dispatch_return_trace_dispatch(self): + for event in ["line", "call", "return", "exception", "c_call", "c_exception", "c_return", "foo"]: + self.assertEqual(self.debugger.trace_dispatch, self.debugger.trace_dispatch(self.frame, event, None)) + + def test_dispatch_line(self): + self.debugger.quitting = True + self.debugger.botframe = self.frame + self.assertRaises(bdb.BdbQuit, self.debugger.dispatch_line, self.frame) + + def test_dispatch_call(self): + self.debugger.botframe = FakeFrame() + self.assertEqual(None, self.debugger.dispatch_call(self.frame, None)) + + self.debugger.botframe = self.frame + self.assertEqual(self.debugger.trace_dispatch, self.debugger.dispatch_call(self.frame, None)) + + self.debugger.quitting = True + self.assertRaises(bdb.BdbQuit, self.debugger.dispatch_call, self.frame, None) + + def test_dispatch_return(self): + self.debugger.botframe = self.frame + self.assertEqual(self.debugger.trace_dispatch, self.debugger.dispatch_return(self.frame, None)) + + def test_dispatch_exception(self): + self.debugger.botframe = self.frame + self.debugger.quitting = True + self.assertRaises(bdb.BdbQuit, self.debugger.dispatch_exception, self.frame, None) + + def test_is_skipped_module(self): + self.debugger.skip = ["bar"] + self.assertFalse(self.debugger.is_skipped_module("foo")) + self.assertTrue(self.debugger.is_skipped_module("bar")) + + def test_stop_here_skip(self): + self.debugger.skip = ["foo"] + self.assertFalse(self.debugger.stop_here(self.frame)) + + def test_stop_here_stop_frame_stoplineno(self): + self.debugger.stopframe = self.frame + self.debugger.stoplineno = -1 + self.assertFalse(self.debugger.stop_here(self.frame)) + + self.debugger.stoplineno = 5 + self.frame.f_lineno = 5 + self.assertTrue(self.debugger.stop_here(self.frame)) + + self.debugger.stoplineno = 5 + self.frame.f_lineno = 4 + self.assertFalse(self.debugger.stop_here(self.frame)) + + self.debugger.stoplineno = 5 + self.frame.f_lineno = 6 + self.assertTrue(self.debugger.stop_here(self.frame)) + + def test_break_here(self): + self.assertFalse(self.debugger.break_here(self.frame)) + + filename = self.debugger.canonic(self.frame.f_code.co_filename) + self.debugger.breaks[filename] = [1] + self.assertFalse(self.debugger.break_here(self.frame)) + + self.frame.f_lineno = 0 + self.debugger.breaks[filename] = [0] + breakpoint = bdb.Breakpoint(filename, 0) + breakpoint.ignore = 0 + breakpoint.temporary = True + bdb.Breakpoint.bplist[filename, 0] = [breakpoint] + self.assertTrue(self.debugger.break_here(self.frame)) + + bdb.Breakpoint.bplist[filename, 0] = [] + self.assertFalse(self.debugger.break_here(self.frame)) + + def test_do_clear(self): + self.assertRaises(NotImplementedError, bdb.Bdb().do_clear, None) + + def test_set_until(self): + self.debugger.set_until(self.frame) + self.assertEqual(self.debugger.stopframe, self.frame) + self.assertEqual(self.debugger.returnframe, self.frame) + self.assertEqual(self.debugger.stoplineno, self.frame.f_lineno + 1) + + def test_set_step(self): + self.debugger.frame_returning = self.frame + self.frame.f_back = self.frame + self.debugger.set_step() + self.assertEqual(self.debugger.stopframe, None) + self.assertEqual(self.debugger.returnframe, None) + + def test_set_next(self): + self.debugger.set_next(self.frame) + self.assertEqual(self.debugger.stopframe, self.frame) + self.assertEqual(self.debugger.returnframe, None) + + def test_set_return(self): + self.debugger.set_return(self.frame) + self.assertEqual(self.debugger.stopframe, None) + self.assertEqual(self.debugger.returnframe, self.frame) + + def test_set_break(self): + self.assertEqual("Line %s:0 does not exist" % self.debugged_file.name, self.debugger.set_break(self.debugged_file.name, 0)) + + def test_clear_break(self): + self.assertEqual("There are no breakpoints in %s" % self.debugged_file.name, self.debugger.clear_break(self.debugged_file.name, 0)) + self.debugger.breaks[self.debugged_file.name] = [] + self.assertEqual("There is no breakpoint at %s:0" % self.debugged_file.name, self.debugger.clear_break(self.debugged_file.name, 0)) + + self.debugger.breaks[self.debugged_file.name] = [0] + bdb.Breakpoint.bplist[self.debugged_file.name, 0] = [bdb.Breakpoint(self.debugged_file.name, 0)] + self.debugger.clear_break(self.debugged_file.name, 0) + self.assertFalse((self.debugged_file.name, 0) in bdb.Breakpoint.bplist) + + def test_clear_bpbynumber(self): + self.assertEqual("Breakpoint number expected", self.debugger.clear_bpbynumber(None)) + bdb.Breakpoint.bpbynumber[1] = bdb.Breakpoint("foo", 1) + self.debugger.breaks["foo"] = [1] + self.debugger.clear_bpbynumber(1) + + def test_clear_all_file_breaks(self): + self.assertEqual("There are no breakpoints in %s" % self.debugged_file.name, self.debugger.clear_all_file_breaks(self.debugged_file.name)) + self.debugger.breaks[self.debugged_file.name] = [0] + bdb.Breakpoint.bplist[self.debugged_file.name, 0] = [bdb.Breakpoint(self.debugged_file.name, 0)] + self.debugger.clear_all_file_breaks(self.debugged_file.name) + self.assertTrue(self.debugged_file.name not in self.debugger.breaks) + + def test_clear_all_breaks(self): + self.assertEqual("There are no breakpoints", self.debugger.clear_all_breaks()) + self.debugger.breaks = [bdb.Breakpoint(self.debugged_file.name, 0)] + self.debugger.clear_all_breaks() + self.assertEqual({}, self.debugger.breaks) + + def test_get_bpbynumber(self): + self.assertRaises(ValueError, self.debugger.get_bpbynumber, None) + self.assertRaises(ValueError, self.debugger.get_bpbynumber, "foo") + self.assertRaises(ValueError, self.debugger.get_bpbynumber, 5) + self.assertRaises(ValueError, self.debugger.get_bpbynumber, "0") + breakpoint = bdb.Breakpoint(self.debugged_file.name, 0) + bdb.Breakpoint.bpbynumber[0] = breakpoint + self.assertEqual(breakpoint, self.debugger.get_bpbynumber("0")) + + def test_get_break(self): + self.assertFalse(self.debugger.get_break(self.debugged_file.name, 0)) + + def test_get_breaks(self): + self.assertFalse(self.debugger.get_breaks(self.debugged_file.name, 0)) + + def test_get_file_breaks(self): + self.assertEqual([], self.debugger.get_file_breaks(self.debugged_file.name)) + self.debugger.breaks[self.debugged_file.name] = "foo" + self.assertEqual("foo", self.debugger.get_file_breaks(self.debugged_file.name)) + + def test_get_all_breaks(self): + self.assertEqual({}, self.debugger.get_all_breaks()) + + def test_get_stack(self): + self.assertEqual(([(self.frame, 0)], 0), self.debugger.get_stack(self.frame, None)) + self.debugger.botframe = self.frame + self.assertEqual(([(self.frame, 0), (None, 0)], 0), self.debugger.get_stack(self.frame, FakeTrace(self.frame, FakeTrace()))) + + def test_format_stack_entry(self): + self.assertEqual(self.debugged_file.name + "(2)()", self.debugger.format_stack_entry((self.frame, 2))) + self.frame.f_code.co_name = "foo" + self.frame.f_locals['__args__'] = 'foo' + self.frame.f_locals['__return__'] = 'bar' + self.assertEqual(self.debugged_file.name + "(2)foo'foo'->'bar'", self.debugger.format_stack_entry((self.frame, 2))) + + def tearDown(self): + self.debugged_file.close() + +class BreakpointTestCase(unittest.TestCase): + def setUp(self): + self.frame = FakeFrame() + self.debugged_file = tempfile.NamedTemporaryFile() + self.frame.f_code.co_filename = self.debugged_file.name + bdb.Breakpoint.next = 1 + bdb.Breakpoint.bplist = {} + bdb.Breakpoint.bpbynumber = [None] + self.breakpoint = bdb.Breakpoint(self.debugged_file.name, 0) + + def test_init(self): + second = bdb.Breakpoint(self.debugged_file.name, 0) + self.assertEqual([self.breakpoint, second], bdb.Breakpoint.bplist[self.debugged_file.name, 0]) + + def test_enable(self): + self.breakpoint.enable() + self.assertTrue(self.breakpoint.enabled) + + def test_disable(self): + self.breakpoint.disable() + self.assertFalse(self.breakpoint.enabled) + + def test_bpformat(self): + self.breakpoint.hits = 1 + self.assertEqual("1 breakpoint keep yes at " + self.debugged_file.name + ":0\n\tbreakpoint already hit 1 time", self.breakpoint.bpformat()) + self.breakpoint.disable() + self.breakpoint.temporary = True + self.breakpoint.cond = "foo" + self.breakpoint.ignore = 1 + self.breakpoint.hits = 2 + self.assertEqual("1 breakpoint del no at " + self.debugged_file.name + ":0\n\tstop only if foo\n\tignore next 1 hits\n\tbreakpoint already hit 2 times", self.breakpoint.bpformat()) + + def tearDown(self): + self.debugged_file.close() + +class MainTestCase(unittest.TestCase): + def setUp(self): + self.frame = FakeFrame() + self.debugged_file = tempfile.NamedTemporaryFile() + self.frame.f_code.co_filename = self.debugged_file.name + bdb.Breakpoint.next = 1 + bdb.Breakpoint.bplist = {} + bdb.Breakpoint.bpbynumber = [None] + self.breakpoint = bdb.Breakpoint(self.debugged_file.name, 0) + + def test_checkfuncname(self): + self.assertTrue(bdb.checkfuncname(self.breakpoint, self.frame)) + self.breakpoint.line = 0 + self.frame.f_lineno = 1 + self.assertFalse(bdb.checkfuncname(self.breakpoint, self.frame)) + self.breakpoint.funcname = "foo" + self.assertFalse(bdb.checkfuncname(self.breakpoint, self.frame)) + self.frame.f_code.co_name = "foo" + self.assertTrue(bdb.checkfuncname(self.breakpoint, self.frame)) + self.breakpoint.func_first_executable_line = 10 + self.assertFalse(bdb.checkfuncname(self.breakpoint, self.frame)) + + def test_effective(self): + self.breakpoint.disable() + self.assertEqual((None, None), bdb.effective(self.debugged_file.name, 0, self.frame)) + self.breakpoint.enable() + self.breakpoint.line = 10 + self.assertEqual((None, None), bdb.effective(self.debugged_file.name, 0, self.frame)) + self.breakpoint.line = 0 + self.breakpoint.ignore = 10 + self.assertEqual((None, None), bdb.effective(self.debugged_file.name, 0, self.frame)) + self.breakpoint.cond = "foo" + self.assertEqual((self.breakpoint, False), bdb.effective(self.debugged_file.name, 0, self.frame)) + self.breakpoint.cond = "True" + self.assertEqual((None, None), bdb.effective(self.debugged_file.name, 0, self.frame)) + self.breakpoint.ignore = 0 + self.assertEqual((self.breakpoint, True), bdb.effective(self.debugged_file.name, 0, self.frame)) + + def tearDown(self): + self.debugged_file.close() + +class TestBdb(bdb.Bdb): + def do_clear(self, arg): + pass + +class FakeFrame(): + def __init__(self): + self.f_back = None + self.f_lineno = 0 + self.f_code = FakeCode() + self.f_globals = {"__name__": "foo"} + self.f_trace = None + self.f_locals = {} + +class FakeCode(): + def __init__(self): + self.co_filename = None + self.co_firstlineno = 0 + self.co_name = None + +class FakeTrace(): + def __init__(self, tb_frame=None, tb_next=None, tb_lineno=0): + self.tb_frame = tb_frame + self.tb_next = tb_next + self.tb_lineno = tb_lineno + +if __name__ == "__main__": + unittest.main() diff -r 379372612f6d Lib/test/test_sundry.py --- a/Lib/test/test_sundry.py Fri Oct 25 00:08:13 2013 +0300 +++ b/Lib/test/test_sundry.py Sun Oct 27 13:45:27 2013 -0400 @@ -6,8 +6,7 @@ class TestUntestedModules(unittest.TestCase): def test_untested_modules_can_be_imported(self): - untested = ('bdb', 'encodings', 'formatter', 'imghdr', - 'nturl2path', 'tabnanny') + untested = ('encodings', 'formatter', 'imghdr') with support.check_warnings(quiet=True): for name in untested: try: