Files
openide/python/helpers/pydev/pydev_tests_python/test_convert_utilities.py
Elizaveta Shashkova 626a14835a IDEA-CR-53093: PY-37226 Revert pydev prefix for test directories
GitOrigin-RevId: 3d4abb05167e85cb44720e36d0fa3b949f199f30
2019-10-08 12:33:08 +00:00

227 lines
10 KiB
Python

# coding: utf-8
import os.path
from _pydevd_bundle.pydevd_constants import IS_WINDOWS, IS_JYTHON
def test_convert_utilities(tmpdir):
import pydevd_file_utils
test_dir = str(tmpdir.mkdir("Test_Convert_Utilities"))
if IS_WINDOWS:
normalized = pydevd_file_utils.normcase(test_dir)
assert isinstance(normalized, str) # bytes on py2, unicode on py3
assert normalized.lower() == normalized
upper_version = os.path.join(test_dir, 'ÁÉÍÓÚ')
with open(upper_version, 'w') as stream:
stream.write('test')
with open(upper_version, 'r') as stream:
assert stream.read() == 'test'
with open(pydevd_file_utils.normcase(upper_version), 'r') as stream:
assert stream.read() == 'test'
assert '~' not in normalized
if not IS_JYTHON:
assert '~' in pydevd_file_utils.convert_to_short_pathname(normalized)
real_case = pydevd_file_utils.get_path_with_real_case(normalized)
assert isinstance(real_case, str) # bytes on py2, unicode on py3
# Note test_dir itself cannot be compared with because pytest may
# have passed the case normalized.
assert real_case.endswith("Test_Convert_Utilities")
else:
# On other platforms, nothing should change
assert pydevd_file_utils.normcase(test_dir) == test_dir
assert pydevd_file_utils.convert_to_short_pathname(test_dir) == test_dir
assert pydevd_file_utils.get_path_with_real_case(test_dir) == test_dir
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))
assert isinstance(obtained, str) # bytes on py2, unicode on py3
assert isinstance(expected, str) # bytes on py2, unicode on py3
import pydevd_file_utils
if IS_WINDOWS:
# Check with made-up files
# 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.norm_file_to_server('c:\\foo\\my'), 'c:\\bar\\my')
check(pydevd_file_utils.norm_file_to_server('c:/foo/my'), 'c:\\bar\\my')
check(pydevd_file_utils.norm_file_to_server('c:/foo/my/'), 'c:\\bar\\my')
check(pydevd_file_utils.norm_file_to_server('c:\\foo\\áéíóú'.upper()), 'c:\\bar\\áéíóú')
check(pydevd_file_utils.norm_file_to_client('c:\\bar\\my'), 'c:\\foo\\my')
# 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.norm_file_to_server('/foo/my'), 'c:\\bar\\my')
check(pydevd_file_utils.norm_file_to_client('c:\\bar\\my'), '/foo/my')
check(pydevd_file_utils.norm_file_to_client('c:\\bar\\my\\'), '/foo/my')
check(pydevd_file_utils.norm_file_to_client('c:/bar/my'), '/foo/my')
check(pydevd_file_utils.norm_file_to_client('c:/bar/my/'), '/foo/my')
# 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.norm_file_to_server(in_eclipse) == in_python.lower()
found_in_eclipse = pydevd_file_utils.norm_file_to_client(in_python)
assert found_in_eclipse.endswith('Bar')
assert pydevd_file_utils.norm_file_to_server(
os.path.join(in_eclipse, 'another')) == os.path.join(in_python, 'another').lower()
found_in_eclipse = pydevd_file_utils.norm_file_to_client(
os.path.join(in_python, 'another'))
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.norm_file_to_server('/foo').lower() == in_python.lower()
assert pydevd_file_utils.norm_file_to_client(in_python) == in_eclipse
# 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.norm_file_to_server(test_dir) == test_dir.lower()
assert pydevd_file_utils.norm_file_to_client(test_dir).endswith('\\Foo')
else:
# Client on windows and server on unix
pydevd_file_utils.set_ide_os('WINDOWS')
for in_eclipse, in_python in ([
('c:\\foo', '/bar'),
('c:/foo', '/bar'),
('c:/foo/', '/bar'),
]):
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.norm_file_to_server('c:\\foo\\my') == '/bar/my'
assert pydevd_file_utils.norm_file_to_server('c:/foo/my') == '/bar/my'
assert pydevd_file_utils.norm_file_to_server('c:\\foo\\my\\') == '/bar/my'
assert pydevd_file_utils.norm_file_to_server('c:/foo/my/') == '/bar/my'
assert pydevd_file_utils.norm_file_to_client('/bar/my') == 'c:\\foo\\my'
assert pydevd_file_utils.norm_file_to_client('/bar/my/') == 'c:\\foo\\my'
# Files for which there's no translation have only their separators updated.
assert pydevd_file_utils.norm_file_to_client('/usr/bin') == '\\usr\\bin'
assert pydevd_file_utils.norm_file_to_client('/usr/bin/') == '\\usr\\bin'
assert pydevd_file_utils.norm_file_to_server('\\usr\\bin') == '/usr/bin'
assert pydevd_file_utils.norm_file_to_server('\\usr\\bin\\') == '/usr/bin'
# Client and server on unix
pydevd_file_utils.set_ide_os('UNIX')
in_eclipse = '/foo'
in_python = '/bar'
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.norm_file_to_server('/foo/my') == '/bar/my'
assert pydevd_file_utils.norm_file_to_client('/bar/my') == '/foo/my'
finally:
pydevd_file_utils.setup_client_server_paths([])
def test_zip_paths(tmpdir):
import pydevd_file_utils
import sys
import zipfile
for i, zip_basename in enumerate(('MY1.zip', 'my2.egg!')):
zipfile_path = str(tmpdir.join(zip_basename))
zip_file = zipfile.ZipFile(zipfile_path, 'w')
zip_file.writestr('zipped%s/__init__.py' % (i,), '')
zip_file.writestr('zipped%s/zipped_contents.py' % (i,), 'def call_in_zip():\n return 1')
zip_file.close()
sys.path.append(zipfile_path)
try:
import importlib
except ImportError:
__import__('zipped%s' % (i,)) # Py2.6 does not have importlib
else:
importlib.import_module('zipped%s' % (i,)) # Check that it's importable.
# Check that we can deal with the zip path.
assert pydevd_file_utils.exists(zipfile_path)
abspath, realpath, basename = pydevd_file_utils.get_abs_path_real_path_and_base_from_file(zipfile_path)
if IS_WINDOWS:
assert abspath == zipfile_path.lower()
assert basename == zip_basename.lower()
else:
assert abspath == zipfile_path
assert basename == zip_basename
# Check that we can deal with zip contents.
for path in [
zipfile_path + '/zipped%s/__init__.py' % (i,),
zipfile_path + '/zipped%s/zipped_contents.py' % (i,),
zipfile_path + '\\zipped%s\\__init__.py' % (i,),
zipfile_path + '\\zipped%s\\zipped_contents.py' % (i,),
]:
assert pydevd_file_utils.exists(path), 'Expected exists to return True for path:\n%s' % (path,)
abspath, realpath, basename = pydevd_file_utils.get_abs_path_real_path_and_base_from_file(path)
assert pydevd_file_utils.exists(abspath), 'Expected exists to return True for path:\n%s' % (abspath,)
assert pydevd_file_utils.exists(realpath), 'Expected exists to return True for path:\n%s' % (realpath,)
assert zipfile_path in pydevd_file_utils._ZIP_SEARCH_CACHE, '%s not in %s' % (
zipfile_path, '\n'.join(sorted(pydevd_file_utils._ZIP_SEARCH_CACHE.keys())))