def test_pydevd_logging_files(tmpdir): from _pydev_bundle import pydev_log from _pydevd_bundle.pydevd_constants import DebugInfoHolder import os.path from _pydev_bundle.pydev_log import _LoggingGlobals try: import StringIO as io except: import io from _pydev_bundle.pydev_log import log_context stream = io.StringIO() with log_context(0, stream=stream): d1 = str(tmpdir.join('d1')) d2 = str(tmpdir.join('d2')) for d in (d1, d2): DebugInfoHolder.PYDEVD_DEBUG_FILE = os.path.join(d, 'file.txt') pydev_log.initialize_debug_stream(reinitialize=True) assert os.path.normpath(_LoggingGlobals._debug_stream_filename) == \ os.path.normpath(os.path.join(d, 'file.%s.txt' % os.getpid())) assert os.path.exists(_LoggingGlobals._debug_stream_filename) assert pydev_log.list_log_files( DebugInfoHolder.PYDEVD_DEBUG_FILE) == [ _LoggingGlobals._debug_stream_filename ]
def check(): with pydev_log.log_context(3, sys.stderr): assert hasattr(sys, 'gettotalrefcount') import pydevd_tracing proceed1 = threading.Event() proceed2 = threading.Event() class SomeThread(threading.Thread): def run(self): proceed1.set() proceed2.wait() t = SomeThread() t.start() proceed1.wait() try: def some_func(frame, event, arg): return some_func pydevd_tracing.set_trace_to_threads(some_func) finally: proceed2.set() lib = pydevd_tracing._load_python_helper_lib() assert lib is None print('Finished OK')
def test_pydevd_log(): from _pydev_bundle import pydev_log try: import StringIO as io except: import io from _pydev_bundle.pydev_log import log_context stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always') pydev_log.info('never') assert stream.getvalue() == 'always\n' stream = io.StringIO() with log_context(1, stream=stream): pydev_log.critical('always') pydev_log.info('this too') assert stream.getvalue() == 'always\nthis too\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s', 1) assert stream.getvalue() == 'always 1\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s %s', 1, 2) assert stream.getvalue() == 'always 1 2\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s %s', 1) # Even if there's an error in the formatting, don't fail, just print the message and args. assert stream.getvalue() == 'always %s %s - (1,)\n' stream = io.StringIO() with log_context(0, stream=stream): try: raise RuntimeError() except: pydev_log.exception('foo') assert 'foo\n' in stream.getvalue() assert 'raise RuntimeError()' in stream.getvalue() stream = io.StringIO() with log_context(0, stream=stream): pydev_log.error_once('always %s %s', 1) # Even if there's an error in the formatting, don't fail, just print the message and args. assert stream.getvalue() == 'always %s %s - (1,)\n'
def test_pydevd_log(): from _pydev_bundle import pydev_log try: import StringIO as io except: import io from _pydev_bundle.pydev_log import log_context stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always') pydev_log.info('never') assert stream.getvalue() == 'always\n' stream = io.StringIO() with log_context(1, stream=stream): pydev_log.critical('always') pydev_log.info('this too') assert stream.getvalue() == 'always\nthis too\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s', 1) assert stream.getvalue() == 'always 1\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s %s', 1, 2) assert stream.getvalue() == 'always 1 2\n' stream = io.StringIO() with log_context(0, stream=stream): pydev_log.critical('always %s %s', 1) # Even if there's an error in the formatting, don't fail, just print the message and args. assert stream.getvalue() == 'always %s %s - (1,)\n' stream = io.StringIO() with log_context(0, stream=stream): try: raise RuntimeError() except: pydev_log.exception('foo') assert 'foo\n' in stream.getvalue() assert 'raise RuntimeError()' in stream.getvalue()
def test_to_server_and_to_client(tmpdir): try: def check(obtained, expected): assert obtained == expected, '%s (%s) != %s (%s)' % (obtained, type(obtained), expected, type(expected)) if isinstance(obtained, tuple): assert isinstance(obtained[0], str) # bytes on py2, unicode on py3 else: assert isinstance(obtained, str) # bytes on py2, unicode on py3 if isinstance(expected, tuple): assert isinstance(expected[0], str) # bytes on py2, unicode on py3 else: assert isinstance(expected, str) # bytes on py2, unicode on py3 import pydevd_file_utils if IS_WINDOWS: # Check with made-up files pydevd_file_utils.setup_client_server_paths([('c:\\foo', 'c:\\bar'), ('c:\\foo2', 'c:\\bar2')]) stream = io.StringIO() with log_context(0, stream=stream): pydevd_file_utils.map_file_to_server('y:\\only_exists_in_client_not_in_server') assert r'pydev debugger: unable to find translation for: "y:\only_exists_in_client_not_in_server" in ["c:\foo", "c:\foo2"] (please revise your path mappings).' in stream.getvalue() # Client and server are on windows. pydevd_file_utils.set_ide_os('WINDOWS') for in_eclipse, in_python in ([ ('c:\\foo', 'c:\\bar'), ('c:/foo', 'c:\\bar'), ('c:\\foo', 'c:/bar'), ('c:\\foo', 'c:\\bar\\'), ('c:/foo', 'c:\\bar\\'), ('c:\\foo', 'c:/bar/'), ('c:\\foo\\', 'c:\\bar'), ('c:/foo/', 'c:\\bar'), ('c:\\foo\\', 'c:/bar'), ]): PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) check(pydevd_file_utils.map_file_to_server('c:\\foo\\my'), 'c:\\bar\\my') check(pydevd_file_utils.map_file_to_server('c:/foo/my'), 'c:\\bar\\my') check(pydevd_file_utils.map_file_to_server('c:/foo/my/'), 'c:\\bar\\my') check(pydevd_file_utils.map_file_to_server('c:\\foo\\áéíóú'.upper()), 'c:\\bar' + '\\áéíóú'.upper()) check(pydevd_file_utils.map_file_to_client('c:\\bar\\my'), ('c:\\foo\\my', True)) # Client on unix and server on windows pydevd_file_utils.set_ide_os('UNIX') for in_eclipse, in_python in ([ ('/foo', 'c:\\bar'), ('/foo', 'c:/bar'), ('/foo', 'c:\\bar\\'), ('/foo', 'c:/bar/'), ('/foo/', 'c:\\bar'), ('/foo/', 'c:\\bar\\'), ]): PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) check(pydevd_file_utils.map_file_to_server('/foo/my'), 'c:\\bar\\my') check(pydevd_file_utils.map_file_to_client('c:\\bar\\my'), ('/foo/my', True)) check(pydevd_file_utils.map_file_to_client('c:\\bar\\my\\'), ('/foo/my', True)) check(pydevd_file_utils.map_file_to_client('c:/bar/my'), ('/foo/my', True)) check(pydevd_file_utils.map_file_to_client('c:/bar/my/'), ('/foo/my', True)) # Test with 'real' files # Client and server are on windows. pydevd_file_utils.set_ide_os('WINDOWS') test_dir = str(tmpdir.mkdir("Foo")) os.makedirs(os.path.join(test_dir, "Another")) in_eclipse = os.path.join(os.path.dirname(test_dir), 'Bar') in_python = test_dir PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server(in_eclipse) == in_python.lower() found_in_eclipse = pydevd_file_utils.map_file_to_client(in_python)[0] assert found_in_eclipse.endswith('Bar') assert pydevd_file_utils.map_file_to_server( os.path.join(in_eclipse, 'another')) == os.path.join(in_python, 'another').lower() found_in_eclipse = pydevd_file_utils.map_file_to_client( os.path.join(in_python, 'another'))[0] assert found_in_eclipse.endswith('Bar\\Another') # Client on unix and server on windows pydevd_file_utils.set_ide_os('UNIX') in_eclipse = '/foo' in_python = test_dir PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server('/foo').lower() == in_python.lower() assert pydevd_file_utils.map_file_to_client(in_python) == (in_eclipse, True) # Test without translation in place (still needs to fix case and separators) pydevd_file_utils.set_ide_os('WINDOWS') PATHS_FROM_ECLIPSE_TO_PYTHON = [] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server(test_dir) == test_dir assert pydevd_file_utils.map_file_to_client(test_dir.lower())[0].endswith('\\Foo') else: # Client on windows and server on unix pydevd_file_utils.set_ide_os('WINDOWS') PATHS_FROM_ECLIPSE_TO_PYTHON = [ ('c:\\BAR', '/bar') ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server('c:\\bar\\my') == '/bar/my' assert pydevd_file_utils.map_file_to_client('/bar/my') == ('c:\\BAR\\my', True) for in_eclipse, in_python in ([ ('c:\\foo', '/báéíóúr'), ('c:/foo', '/báéíóúr'), ('c:/foo/', '/báéíóúr'), ('c:/foo/', '/báéíóúr/'), ('c:\\foo\\', '/báéíóúr/'), ]): PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server('c:\\foo\\my') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_server('C:\\foo\\my') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_server('C:\\foo\\MY') == '/báéíóúr/MY' assert pydevd_file_utils.map_file_to_server('C:\\foo\\MY\\') == '/báéíóúr/MY' assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\file.py') == '/báéíóúr/my/file.py' assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\other\\file.py') == '/báéíóúr/my/other/file.py' assert pydevd_file_utils.map_file_to_server('c:/foo/my') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_server('c:/foo/my/') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_client('/báéíóúr/my') == ('c:\\foo\\my', True) assert pydevd_file_utils.map_file_to_client('/báéíóúr/my/') == ('c:\\foo\\my', True) # Files for which there's no translation have only their separators updated. assert pydevd_file_utils.map_file_to_client('/usr/bin/x.py') == ('\\usr\\bin\\x.py', False) assert pydevd_file_utils.map_file_to_client('/usr/bin') == ('\\usr\\bin', False) assert pydevd_file_utils.map_file_to_client('/usr/bin/') == ('\\usr\\bin', False) assert pydevd_file_utils.map_file_to_server('\\usr\\bin') == '/usr/bin' assert pydevd_file_utils.map_file_to_server('\\usr\\bin\\') == '/usr/bin' # When we have a client file and there'd be no translation, and making it absolute would # do something as '$cwd/$file_received' (i.e.: $cwd/c:/another in the case below), # warn the user that it's not correct and the path that should be translated instead # and don't make it absolute. assert pydevd_file_utils.map_file_to_server('c:\\Another') == 'c:/Another' assert pydevd_file_utils.map_file_to_server('c:/FoO/my/BAR') == '/báéíóúr/my/BAR' assert pydevd_file_utils.map_file_to_client('/báéíóúr/my/BAR') == ('c:\\foo\\my\\BAR', True) # Client and server on unix pydevd_file_utils.set_ide_os('UNIX') in_eclipse = '/foo' in_python = '/báéíóúr' PATHS_FROM_ECLIPSE_TO_PYTHON = [ (in_eclipse, in_python) ] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server('/foo/my') == '/báéíóúr/my' assert pydevd_file_utils.map_file_to_client('/báéíóúr/my') == ('/foo/my', True) finally: pydevd_file_utils.setup_client_server_paths([])