PyDev.Debugger
PyDev.Debugger copied to clipboard
Test `test_to_server_and_to_client` fails on NixOS
Hey, currently trying to package pydevd for NixOS https://github.com/NixOS/nixpkgs/pull/182823 but running into this issue
=================================== FAILURES ===================================
[31m[1m_________________________ test_to_server_and_to_client _________________________[0m
tmpdir = local('/build/pytest-of-nixbld/pytest-0/test_to_server_and_to_client0')
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\", "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 = pydevd_file_utils.get_path_with_real_case(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)
if pydevd_file_utils.map_file_to_server(in_eclipse) != in_python.lower():
raise AssertionError('%s != %s\ntmpdir:%s\nin_eclipse: %s\nin_python: %s\ntest_dir: %s' % (
pydevd_file_utils.map_file_to_server(in_eclipse), in_python.lower(), tmpdir, in_eclipse, in_python, test_dir))
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'
[1m[31mE AssertionError: assert '/usr/bin/' == '/usr/bin'[0m
[1m[31mE - /usr/bin[0m
[1m[31mE + /usr/bin/[0m
[1m[31mE ? +[0m
[1m[31mtests_python/test_convert_utilities.py[0m:274: AssertionError
----------------------------- Captured stderr call -----------------------------
7.55s - pydev debugger: unable to find translation for: "\usr\bin" in ["c:\foo\", "c:\foo"] (please revise your path mappings).
0.00s - pydev debugger: unable to find translation for: "\usr\bin\" in ["c:\foo\", "c:\foo"] (please revise your path mappings).
I'm not sure if this is a bug or I have to patch a NixOS specific issue here.
Best regards Jonas