Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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)
Exemple #4
0
    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
Exemple #6
0
    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()