mirror of
https://github.com/ModOrganizer2/modorganizer-plugin_python.git
synced 2026-07-27 14:03:33 -07:00
Add bindings for IFileTree glob() and walk() generators (#142)
* Adding binding for new IFileTree glob and walk. * Fix issues with Version binding.
This commit is contained in:
@@ -53,7 +53,7 @@ foreach (test_file ${test_files})
|
||||
pybind11_add_module(${target} EXCLUDE_FROM_ALL THIN_LTO ${test_file})
|
||||
set_target_properties(${target}
|
||||
PROPERTIES
|
||||
CXX_STANDARD 20
|
||||
CXX_STANDARD 23
|
||||
OUTPUT_NAME ${pymodule}
|
||||
FOLDER tests/python
|
||||
LIBRARY_OUTPUT_DIRECTORY "${PYLIB_DIR}/mobase_tests")
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from typing import TypeAlias, cast
|
||||
|
||||
import mobase
|
||||
|
||||
import mobase_tests.filetree as m
|
||||
@@ -34,3 +36,51 @@ def test_filetype():
|
||||
|
||||
assert m.is_file(FT.FILE_OR_DIRECTORY & ~FT.DIRECTORY)
|
||||
assert not m.is_directory(FT.FILE_OR_DIRECTORY & ~FT.DIRECTORY)
|
||||
|
||||
|
||||
_tree_values: TypeAlias = list["str | tuple[str, _tree_values]"]
|
||||
|
||||
|
||||
def make_tree(
|
||||
values: _tree_values, root: mobase.IFileTree | None = None
|
||||
) -> mobase.IFileTree:
|
||||
if root is None:
|
||||
root = cast(mobase.IFileTree, mobase.private.makeTree()) # type: ignore
|
||||
|
||||
for value in values:
|
||||
if isinstance(value, str):
|
||||
root.addFile(value)
|
||||
else:
|
||||
sub_tree = root.addDirectory(value[0])
|
||||
make_tree(value[1], sub_tree)
|
||||
|
||||
return root
|
||||
|
||||
|
||||
def test_walk():
|
||||
tree = make_tree(
|
||||
[("a", []), ("b", ["u", "v"]), "c.x", "d.y", ("e", [("q", ["c.t", ("p", [])])])]
|
||||
)
|
||||
|
||||
assert {"a", "b", "b/u", "b/v", "c.x", "d.y", "e", "e/q", "e/q/c.t", "e/q/p"} == {
|
||||
e.path("/") for e in tree.walk()
|
||||
}
|
||||
|
||||
entries: list[str] = []
|
||||
for e in tree.walk():
|
||||
if e.name() == "e":
|
||||
break
|
||||
entries.append(e.path("/"))
|
||||
assert {"a", "b", "b/u", "b/v"} == set(entries)
|
||||
|
||||
|
||||
def test_glob():
|
||||
tree = make_tree(
|
||||
[("a", []), ("b", ["u", "v"]), "c.x", "d.y", ("e", [("q", ["c.t", ("p", [])])])]
|
||||
)
|
||||
|
||||
assert {"a", "b", "b/u", "b/v", "c.x", "d.y", "e", "e/q", "e/q/c.t", "e/q/p"} == {
|
||||
e.path("/") for e in tree.glob("**/*")
|
||||
}
|
||||
|
||||
assert {"d.y"} == {e.path("/") for e in tree.glob("**/*.y")}
|
||||
|
||||
Reference in New Issue
Block a user