Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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))
Beispiel #5
0
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))
Beispiel #6
0
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()
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
 def __init__(self):
     Pdb.__init__(self)
     self.capturing = False
     config = getConfiguration()
     self.to_vim = ProxyToVim(config)
     self.from_vim = ProxyFromVim(config)
     self._textOutput = ''
Beispiel #10
0
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
Beispiel #11
0
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()
Beispiel #12
0
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
Beispiel #13
0
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)