PyDev.Debugger icon indicating copy to clipboard operation
PyDev.Debugger copied to clipboard

Test `test_to_server_and_to_client` fails on NixOS

Open onny opened this issue 3 years ago • 0 comments

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

onny avatar Aug 04 '22 06:08 onny