You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.8 KiB
Python
119 lines
3.8 KiB
Python
import pathlib
|
|
import platform
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from ..paths import file_uri_to_path, is_relative, normalized_uri
|
|
|
|
WIN = platform.system() == "Windows"
|
|
HOME = pathlib.Path("~").expanduser()
|
|
PY35 = sys.version_info[:2] == (3, 5)
|
|
|
|
|
|
@pytest.mark.skipif(WIN, reason="can't test POSIX paths on Windows")
|
|
@pytest.mark.parametrize("root_dir, expected_root_uri", [["~", HOME.as_uri()]])
|
|
def test_normalize_posix_path_home(root_dir, expected_root_uri): # pragma: no cover
|
|
assert normalized_uri(root_dir) == expected_root_uri
|
|
|
|
|
|
@pytest.mark.skipif(WIN, reason="can't test POSIX paths on Windows")
|
|
@pytest.mark.parametrize(
|
|
"root, path",
|
|
[["~", "~/a"], ["~", "~/a/../b/"], ["/", "/"], ["/a", "/a/b"], ["/a", "/a/b/../c"]],
|
|
)
|
|
def test_is_relative_ok(root, path):
|
|
assert is_relative(root, path)
|
|
|
|
|
|
@pytest.mark.skipif(WIN, reason="can't test POSIX paths on Windows")
|
|
@pytest.mark.parametrize(
|
|
"root, path",
|
|
[
|
|
["~", "~/.."],
|
|
["~", "/"],
|
|
["/a", "/"],
|
|
["/a/b", "/a"],
|
|
["/a/b", "/a/b/.."],
|
|
["/a", "/a/../b"],
|
|
["/a", "a//"],
|
|
],
|
|
)
|
|
def test_is_relative_not_ok(root, path):
|
|
assert not is_relative(root, path)
|
|
|
|
|
|
@pytest.mark.skipif(not WIN, reason="can't test Windows paths on POSIX")
|
|
@pytest.mark.parametrize(
|
|
"root, path",
|
|
[
|
|
["c:\\Users\\user1", "c:\\Users\\"],
|
|
["c:\\Users\\user1", "d:\\"],
|
|
["c:\\Users", "c:\\Users\\.."],
|
|
],
|
|
)
|
|
def test_is_relative_not_ok_win(root, path):
|
|
assert not is_relative(root, path)
|
|
|
|
|
|
@pytest.mark.skipif(PY35, reason="can't test non-existent paths on py35")
|
|
@pytest.mark.skipif(WIN, reason="can't test POSIX paths on Windows")
|
|
@pytest.mark.parametrize(
|
|
"root_dir, expected_root_uri",
|
|
[
|
|
# probably need to try some other things
|
|
[str(HOME / "foo"), (HOME / "foo").as_uri()]
|
|
],
|
|
)
|
|
def test_normalize_posix_path_home_subdir(
|
|
root_dir, expected_root_uri
|
|
): # pragma: no cover
|
|
assert normalized_uri(root_dir) == expected_root_uri
|
|
|
|
|
|
@pytest.mark.skipif(not WIN, reason="can't test Windows paths on POSIX")
|
|
@pytest.mark.parametrize(
|
|
"root_dir, expected_root_uri",
|
|
[
|
|
["c:\\Users\\user1", "file:///c:/Users/user1"],
|
|
["C:\\Users\\user1", "file:///c:/Users/user1"],
|
|
["//VBOXSVR/shared-folder", "file://vboxsvr/shared-folder/"],
|
|
],
|
|
)
|
|
def test_normalize_windows_path_case(root_dir, expected_root_uri): # pragma: no cover
|
|
try:
|
|
normalized = normalized_uri(root_dir)
|
|
except FileNotFoundError as err:
|
|
if sys.version_info < (3, 12) and root_dir == "//VBOXSVR/shared-folder":
|
|
# see https://github.com/python/cpython/issues/136755
|
|
return
|
|
raise err
|
|
|
|
assert normalized == expected_root_uri
|
|
|
|
|
|
@pytest.mark.skipif(WIN, reason="can't test POSIX paths on Windows")
|
|
@pytest.mark.parametrize(
|
|
"file_uri, expected_posix_path",
|
|
[
|
|
["file:///C:/Windows/System32/Drivers/etc", "/C:/Windows/System32/Drivers/etc"],
|
|
["file:///C:/some%20dir/some%20file.txt", "/C:/some dir/some file.txt"],
|
|
["file:///home/user/some%20file.txt", "/home/user/some file.txt"],
|
|
],
|
|
)
|
|
def test_file_uri_to_path_posix(file_uri, expected_posix_path): # pragma: no cover
|
|
assert file_uri_to_path(file_uri) == expected_posix_path
|
|
|
|
|
|
@pytest.mark.skipif(not WIN, reason="can't test Windows paths on POSIX")
|
|
@pytest.mark.parametrize(
|
|
"file_uri, expected_windows_path",
|
|
[
|
|
# https://github.com/jupyter-lsp/jupyterlab-lsp/pull/305#issuecomment-665996145
|
|
["file:///C:/Windows/System32/Drivers/etc", "C:/Windows/System32/Drivers/etc"],
|
|
["file:///C:/some%20dir/some%20file.txt", "C:/some dir/some file.txt"],
|
|
],
|
|
)
|
|
def test_file_uri_to_path_windows(file_uri, expected_windows_path): # pragma: no cover
|
|
assert file_uri_to_path(file_uri) == expected_windows_path
|