84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
from textual_textarea.path_input import PathValidator, path_completer
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"relpath,expected_matches",
|
|
[
|
|
("", ["foo", "bar"]),
|
|
("f", ["foo"]),
|
|
("fo", ["foo"]),
|
|
("foo", ["baz.txt"]),
|
|
("foo/", ["baz.txt"]),
|
|
("b", ["bar"]),
|
|
("c", []),
|
|
],
|
|
)
|
|
def test_path_completer(
|
|
data_dir: Path,
|
|
relpath: str,
|
|
expected_matches: list[str],
|
|
) -> None:
|
|
test_path = data_dir / "test_validator" / relpath
|
|
test_dir = test_path if test_path.is_dir() else test_path.parent
|
|
prefix = str(test_path)
|
|
print(prefix)
|
|
matches = path_completer(prefix)
|
|
assert sorted(matches) == sorted(
|
|
[(str(test_dir / m), str(test_dir / m)) for m in expected_matches]
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"relpath,dir_okay,file_okay,must_exist,expected_result",
|
|
[
|
|
("foo", True, True, True, True),
|
|
("foo", True, True, False, True),
|
|
("foo", True, False, True, True),
|
|
("foo", True, False, False, True),
|
|
("foo", False, True, True, False),
|
|
("foo", False, True, False, False),
|
|
("foo", False, False, True, False),
|
|
("foo", False, False, False, False),
|
|
("bar", True, True, True, True),
|
|
("bar", True, True, False, True),
|
|
("bar", True, False, True, True),
|
|
("bar", True, False, False, True),
|
|
("bar", False, True, True, False),
|
|
("bar", False, True, False, False),
|
|
("bar", False, False, True, False),
|
|
("bar", False, False, False, False),
|
|
("baz", True, True, True, False),
|
|
("baz", True, True, False, True),
|
|
("baz", True, False, True, False),
|
|
("baz", True, False, False, True),
|
|
("baz", False, True, True, False),
|
|
("baz", False, True, False, True),
|
|
("baz", False, False, True, False),
|
|
("baz", False, False, False, True),
|
|
("foo/baz.txt", True, True, True, True),
|
|
("foo/baz.txt", True, True, False, True),
|
|
("foo/baz.txt", True, False, True, False),
|
|
("foo/baz.txt", True, False, False, False),
|
|
("foo/baz.txt", False, True, True, True),
|
|
("foo/baz.txt", False, True, False, True),
|
|
("foo/baz.txt", False, False, True, False),
|
|
("foo/baz.txt", False, False, False, False),
|
|
],
|
|
)
|
|
def test_path_validator(
|
|
data_dir: Path,
|
|
relpath: str,
|
|
dir_okay: bool,
|
|
file_okay: bool,
|
|
must_exist: bool,
|
|
expected_result: bool,
|
|
) -> None:
|
|
p = data_dir / "test_validator" / relpath
|
|
validator = PathValidator(dir_okay, file_okay, must_exist)
|
|
result = validator.validate(str(p))
|
|
assert result.is_valid == expected_result
|