def test_ProxyFromVim_closeSocket_inactive(): from vimpdb.proxy import ProxyFromVim from_vim = ProxyFromVim(6666) from_vim.socket = Mock() from_vim.closeSocket() assert from_vim.socket_inactive assert not from_vim.socket.called
def test_ProxyFromVim_bindSocket_active(): from vimpdb.proxy import ProxyFromVim from_vim = ProxyFromVim(6666) from_vim.socket_factory = Mock() from_vim.socket_inactive = False from_vim.bindSocket() assert not from_vim.socket_factory.called
def test_ProxyFromVim_bindSocket(): from vimpdb.proxy import ProxyFromVim from_vim = ProxyFromVim(6666) from_vim.socket_factory = Mock() from_vim.bindSocket() assert not from_vim.socket_inactive assert from_vim.socket.bind.call_count == 1 from_vim.socket.bind.assert_called_with(('', 6666))
def test_ProxyFromVim_closeSocket(): from vimpdb.proxy import ProxyFromVim from_vim = ProxyFromVim(6666) from_vim.socket = Mock() from_vim.socket_inactive = False from_vim.closeSocket() assert from_vim.socket_inactive assert from_vim.socket.close.call_count == 1 from_vim.socket.close.assert_called_with()
def test_ProxyFromVim_waitFor(): from vimpdb.proxy import ProxyFromVim from socket import socket from_vim = ProxyFromVim(6666) mocked_socket = Mock(socket) mocked_socket.recvfrom.return_value = ('message', None) mocked_factory = Mock(return_value=mocked_socket) from_vim.socket_factory = mocked_factory message = from_vim.waitFor(None) assert message == 'message' assert from_vim.socket.recvfrom.called
def __init__(self): Pdb.__init__(self) self.capturing = False config = getConfiguration() self.to_vim = ProxyToVim(config) self.from_vim = ProxyFromVim(config) self._textOutput = ''
def test_ProxyFromVim_instantiation(): from vimpdb.proxy import ProxyFromVim from_vim = ProxyFromVim(6666) assert isinstance(from_vim, ProxyFromVim) assert from_vim.port == 6666 assert from_vim.socket_inactive
class VimPdb(Pdb, Switcher): """ debugger integrated with Vim """ def __init__(self): Pdb.__init__(self) self.capturing = False config = getConfiguration() self.to_vim = ProxyToVim(config) self.from_vim = ProxyFromVim(config) self._textOutput = '' def trace_dispatch(self, frame, event, arg): """allow to switch to Pdb instance""" if hasattr(self, 'pdb'): return self.pdb.trace_dispatch(frame, event, arg) else: return Pdb.trace_dispatch(self, frame, event, arg) def execRcLines(self): pass def cmdloop(self): stop = None self.preloop() while not stop: line = self.from_vim.waitFor(self) line = self.precmd(line) stop = self.onecmd(line) stop = self.postcmd(stop, line) self.postloop() def preloop(self): filename, lineno = self.getFileAndLine() self.to_vim.showFileAtLine(filename, lineno) def getFileAndLine(self): frame, lineno = self.stack[self.curindex] filename = self.canonic(frame.f_code.co_filename) return filename, lineno def showFileAtLine(self): filename, lineno = self.getFileAndLine() self.to_vim.showFileAtLine(filename, lineno) # stdout captures to send back to Vim def capture_sys_stdout(self): self.stdout = sys.stdout sys.stdout = StringIO.StringIO() self.capturing = True def stop_capture_sys_stdout(self): if self.capturing: self.capturing = False self.push_output(sys.stdout.getvalue()) sys.stdout = self.stdout # stdout captures to send back to Vim def capture_self_stdout(self): self.initial_stdout = self.stdout self.stdout = StringIO.StringIO() self.capturing = True def stop_capture_self_stdout(self): if self.capturing: self.capturing = False self.push_output(self.stdout.getvalue()) self.stdout = self.initial_stdout def push_output(self, text): self._textOutput += text def pop_output(self): result = self._textOutput self._textOutput = '' return result def do_pdb(self, line): """ 'pdb' command: switches back to debugging with (almost) standard pdb.Pdb except for added 'vim' command. """ self.from_vim.closeSocket() self.pdb = get_hooked_pdb() self.pdb.set_trace_without_step(self.botframe) if self.has_gone_up(): self.pdb.update_state(self) self.pdb.print_current_stack_entry() self.pdb.cmdloop() else: self.pdb.interaction(self.curframe, None) return 1 do_u = do_up = show_line(Pdb.do_up) do_d = do_down = show_line(Pdb.do_down) do_a = do_args = capture(Pdb.do_args) do_b = do_break = capture(Pdb.do_break) do_c = do_continue = close_socket(Pdb.do_continue) @capture def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix): return Pdb.print_stack_entry(self, frame_lineno, prompt_prefix) def default(self, line): # first char should not be output (it is the '!' needed to escape) self.push_output(line[1:] + " = ") return Pdb.default(self, line)