def test_server(self): self.original_stdout = sys.stdout sys.stdout = pydevd_io.IOBuf() try: client_port, server_port = self.get_free_addresses() class ServerThread(threading.Thread): def __init__(self, client_port, server_port): threading.Thread.__init__(self) self.client_port = client_port self.server_port = server_port def run(self): from _pydev_bundle import pydev_localhost pydevconsole.start_server(pydev_localhost.get_localhost(), self.server_port, self.client_port) server_thread = ServerThread(client_port, server_port) server_thread.setDaemon(True) server_thread.start() client_thread = self.start_client_thread( client_port) #@UnusedVariable import time time.sleep(.3) #let's give it some time to start the threads sys.stdout = pydevd_io.IOBuf() from _pydev_bundle import pydev_localhost server = xmlrpclib.Server( 'http://%s:%s' % (pydev_localhost.get_localhost(), server_port)) server.execLine('class Foo:') server.execLine(' pass') server.execLine('') server.execLine('foo = Foo()') server.execLine('a = %s()' % (raw_input_name, )) server.execLine('print (a)') initial = time.time() while not client_thread.requested_input: if time.time() - initial > 2: raise AssertionError( 'Did not get the return asked before the timeout.') time.sleep(.1) found = sys.stdout.getvalue() while ['input_request'] != found.split(): found += sys.stdout.getvalue() if time.time() - initial > 2: break time.sleep(.1) self.assertEqual(['input_request'], found.split()) finally: sys.stdout = self.original_stdout
def test_console_hello(self): self.original_stdout = sys.stdout sys.stdout = pydevd_io.IOBuf() try: sys.stdout.encoding = sys.stdin.encoding except AttributeError: # In Python 3 encoding is not writable (whereas in Python 2 it doesn't exist). pass try: client_port, _server_port = self.get_free_addresses() client_thread = self.start_client_thread( client_port) #@UnusedVariable import time time.sleep(.3) #let's give it some time to start the threads from _pydev_bundle import pydev_localhost interpreter = pydevconsole.InterpreterInterface( pydev_localhost.get_localhost(), client_port, threading.currentThread()) (result, ) = interpreter.hello("Hello pydevconsole") self.assertEqual(result, "Hello eclipse") finally: sys.stdout = self.original_stdout
def test_it(self): #make it as if we were executing from the directory above this one (so that we can use jycompletionserver #without the need for it being in the pythonpath) #(twice the dirname to get the previous level from this file.) import test_pydevdio #@UnresolvedImport - importing itself ADD_TO_PYTHONPATH = os.path.join(os.path.dirname(os.path.dirname(test_pydevdio.__file__))) sys.path.insert(0, ADD_TO_PYTHONPATH) try: from _pydevd_bundle import pydevd_io original = sys.stdout try: sys.stdout = pydevd_io.IOBuf() print('foo') print('bar') self.assertEqual('foo\nbar\n', sys.stdout.getvalue()) #@UndefinedVariable print('ww') print('xx') self.assertEqual('ww\nxx\n', sys.stdout.getvalue()) #@UndefinedVariable finally: sys.stdout = original finally: #remove it to leave it ok for other tests sys.path.remove(ADD_TO_PYTHONPATH)
def test_server(self): self.original_stdout = sys.stdout sys.stdout = pydevd_io.IOBuf() try: from _pydev_bundle.pydev_localhost import get_socket_name host, port = get_socket_name(close=True) class ServerThread(threading.Thread): def __init__(self, backend_port): threading.Thread.__init__(self) self.backend_port = backend_port def run(self): from _pydev_bundle import pydev_localhost pydevconsole.start_server(self.backend_port) server_thread = ServerThread(port) server_thread.daemon = True server_thread.start() import time time.sleep(1) #let's give it some time to start the threads rpc_client, server_transport = make_rpc_client( PythonConsoleBackendService, host, port) server_service = PythonConsoleFrontendService server_handler = self.create_frontend_handler() start_rpc_server(server_transport, server_service, server_handler) rpc_client.execLine('class Foo:') rpc_client.execLine(' pass') rpc_client.execLine('') rpc_client.execLine('foo = Foo()') rpc_client.execLine('a = %s()' % (raw_input_name, )) rpc_client.execLine('print (a)') initial = time.time() while not server_handler.requested_input: if time.time() - initial > 2: raise AssertionError( 'Did not get the return asked before the timeout.') time.sleep(.1) found = sys.stdout.getvalue() while ['input_request'] != found.split(): found += sys.stdout.getvalue() if time.time() - initial > 2: break time.sleep(.1) self.assertIn('input_request', found.split()) finally: sys.stdout = self.original_stdout
def test_getargspec_py2(self): if IS_PY2: self.original_stdout = sys.stdout sys.stdout = pydevd_io.IOBuf() try: # dict -> dict() actual = getargspec_py2(dict) expected = inspect.ArgSpec(args=[], varargs=None, keywords=None, defaults=()) self.assertEqual(expected, actual) # vars -> vars([object]) fob = get_fob(vars) actual = getargspec_py2(fob) expected = inspect.ArgSpec(args=['[object]'], varargs=None, keywords=None, defaults=()) self.assertEqual(expected, actual) # str.join -> str.join(iterable) val = "" fob = get_fob(val.join) actual = getargspec_py2(fob) expected = inspect.ArgSpec(args=['iterable'], varargs=None, keywords=None, defaults=()) self.assertEqual(expected, actual) # list -> list() actual = getargspec_py2(list) expected = inspect.ArgSpec(args=[], varargs=None, keywords=None, defaults=()) self.assertEqual(expected, actual) # compile -> compile(source, filename, mode[, flags[, dont_inherit]]) fob = get_fob(compile) actual = getargspec_py2(fob) expected = inspect.ArgSpec(args=[ 'source', 'filename', 'mode[', 'flags[', 'dont_inherit]]' ], varargs=None, keywords=None, defaults=()) self.assertEqual(expected, actual) finally: sys.stdout = self.original_stdout
def test_console_requests(self): self.original_stdout = sys.stdout sys.stdout = pydevd_io.IOBuf() try: client_port, _server_port = self.get_free_addresses() client_thread = self.start_client_thread( client_port) #@UnusedVariable import time time.sleep(.3) #let's give it some time to start the threads from _pydev_bundle import pydev_localhost from _pydev_bundle.pydev_console_utils import CodeFragment interpreter = pydevconsole.InterpreterInterface( pydev_localhost.get_localhost(), client_port, threading.currentThread()) sys.stdout = pydevd_io.IOBuf() interpreter.add_exec(CodeFragment('class Foo:\n CONSTANT=1\n')) interpreter.add_exec(CodeFragment('foo=Foo()')) interpreter.add_exec(CodeFragment('foo.__doc__=None')) interpreter.add_exec( CodeFragment('val = %s()' % (raw_input_name, ))) interpreter.add_exec(CodeFragment('50')) interpreter.add_exec(CodeFragment('print (val)')) found = sys.stdout.getvalue().split() try: self.assertEqual(['50', 'input_request'], found) except: try: self.assertEqual(['input_request'], found) #IPython except: self.assertEqual([u'50', u'input_request'], found[1:]) # IPython 5.1 self.assertTrue(found[0].startswith(u'Out')) comps = interpreter.getCompletions('foo.', 'foo.') self.assert_( ('CONSTANT', '', '', '3') in comps or ('CONSTANT', '', '', '4') in comps, \ 'Found: %s' % comps ) comps = interpreter.getCompletions('"".', '"".') self.assert_( ('__add__', 'x.__add__(y) <==> x+y', '', '3') in comps or ('__add__', '', '', '4') in comps or ('__add__', 'x.__add__(y) <==> x+y\r\nx.__add__(y) <==> x+y', '()', '2') in comps or ('__add__', 'x.\n__add__(y) <==> x+yx.\n__add__(y) <==> x+y', '()', '2'), 'Did not find __add__ in : %s' % (comps, )) completions = interpreter.getCompletions('', '') for c in completions: if c[0] == 'AssertionError': break else: self.fail('Could not find AssertionError') completions = interpreter.getCompletions('Assert', 'Assert') for c in completions: if c[0] == 'RuntimeError': self.fail('Did not expect to find RuntimeError there') self.assert_( ('__doc__', None, '', '3') not in interpreter.getCompletions('foo.CO', 'foo.')) comps = interpreter.getCompletions('va', 'va') self.assert_(('val', '', '', '3') in comps or ('val', '', '', '4') in comps) interpreter.add_exec(CodeFragment('s = "mystring"')) desc = interpreter.getDescription('val') self.assert_( desc.find('str(object) -> string') >= 0 or desc == "'input_request'" or desc.find('str(string[, encoding[, errors]]) -> str') >= 0 or desc.find('str(Char* value)') >= 0 or desc.find('str(object=\'\') -> string') >= 0 or desc.find('str(value: Char*)') >= 0 or desc.find('str(object=\'\') -> str') >= 0, 'Could not find what was needed in %s' % desc) desc = interpreter.getDescription('val.join') self.assert_( desc.find('S.join(sequence) -> string') >= 0 or desc.find('S.join(sequence) -> str') >= 0 or desc.find('S.join(iterable) -> string') >= 0 or desc == "<builtin method 'join'>" or desc == "<built-in method join of str object>" or desc.find('str join(str self, list sequence)') >= 0 or desc.find('S.join(iterable) -> str') >= 0 or desc.find('join(self: str, sequence: list) -> str') >= 0, "Could not recognize: %s" % (desc, )) finally: sys.stdout = self.original_stdout
def redirect_stdout(self): from IPython.utils import io self.original_stdout = sys.stdout sys.stdout = io.stdout = pydevd_io.IOBuf()