def test_edit(self): ''' Make sure we can issue an edit command''' if os.environ.get('TRAVIS') == 'true': # This test is too flaky on travis. return from _pydev_bundle.pydev_ipython_console_011 import get_pydev_frontend from _pydev_comm.rpc import start_rpc_server_and_make_client called_RequestInput = [False] called_IPythonEditor = [False] class RequestInputHandler: def __init__(self): self.rpc_client = None def requestInput(self, path): called_RequestInput[0] = True return '\n' def IPythonEditor(self, name, line): called_IPythonEditor[0] = (name, line) return True enable_thrift_logging() # here we start the test server server_socket = start_rpc_server_and_make_client(get_localhost(), 0, PythonConsoleFrontendService, PythonConsoleBackendService, create_server_handler_factory(RequestInputHandler())) host, port = server_socket.getsockname() rpc_client, _ = make_rpc_client(PythonConsoleFrontendService, host, port) # PyDevFrontEnd depends on singleton in IPython, so you # can't make multiple versions. So we reuse self.front_end for # all the tests self.front_end = get_pydev_frontend(rpc_client) orig_stdin = sys.stdin sys.stdin = StdIn(self, rpc_client) try: filename = 'made_up_file.py' self.add_exec('%edit ' + filename) for i in xrange(10): if called_IPythonEditor[0] == (os.path.abspath(filename), '0'): break time.sleep(.1) if not called_IPythonEditor[0]: # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/interactiveshell.py", line 2883, in run_code # exec(code_obj, self.user_global_ns, self.user_ns) # File "<ipython-input-15-09583ca3bce1>", line 1, in <module> # get_ipython().magic('edit made_up_file.py') # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/interactiveshell.py", line 2205, in magic # return self.run_line_magic(magic_name, magic_arg_s) # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/interactiveshell.py", line 2126, in run_line_magic # result = fn(*args,**kwargs) # File "<string>", line 2, in edit # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/magic.py", line 193, in <lambda> # call = lambda f, *a, **k: f(*a, **k) # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/magics/code.py", line 662, in edit # self.shell.hooks.editor(filename,lineno) # File "/home/travis/build/fabioz/PyDev.Debugger/pydev_ipython_console_011.py", line 70, in call_editor # server.IPythonEditor(filename, str(line)) # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1090, in __call__ # return self.__send(self.__name, args) # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1419, in __request # verbose=self.__verbose # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1132, in request # return self.single_request(host, handler, request_body, verbose) # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1143, in single_request # http_conn = self.send_request(host, handler, request_body, verbose) # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1255, in send_request # self.send_content(connection, request_body) # File "/home/travis/miniconda/lib/python3.3/xmlrpc/client.py", line 1285, in send_content # connection.endheaders(request_body) # File "/home/travis/miniconda/lib/python3.3/http/client.py", line 1061, in endheaders # self._send_output(message_body) # File "/home/travis/miniconda/lib/python3.3/http/client.py", line 906, in _send_output # self.send(msg) # File "/home/travis/miniconda/lib/python3.3/http/client.py", line 844, in send # self.connect() # File "/home/travis/miniconda/lib/python3.3/http/client.py", line 822, in connect # self.timeout, self.source_address) # File "/home/travis/miniconda/lib/python3.3/socket.py", line 435, in create_connection # raise err # File "/home/travis/miniconda/lib/python3.3/socket.py", line 426, in create_connection # sock.connect(sa) # ConnectionRefusedError: [Errno 111] Connection refused # I.e.: just warn that the test failing, don't actually fail. sys.stderr.write('Test failed: this test is brittle in travis because sometimes the connection is refused (as above) and we do not have a callback.\n') return eq_(called_IPythonEditor[0], (os.path.abspath(filename), '0')) assert called_RequestInput[0], "Make sure the 'wait' parameter has been respected" finally: sys.stdin = orig_stdin
def create_std_in(self, debugger=None, original_std_in=None): if debugger is None: return StdIn(self, self.rpc_client, original_stdin=original_std_in) else: return DebugConsoleStdIn(dbg=debugger, original_stdin=original_std_in)