Skip to content

Commit b7f9a37

Browse files
committed
Add a few tests to check binding for IFileTree glob and walk.
1 parent a698df0 commit b7f9a37

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

tests/python/test_filetree.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import TypeAlias, cast
2+
13
import mobase
24

35
import mobase_tests.filetree as m
@@ -34,3 +36,51 @@ def test_filetype():
3436

3537
assert m.is_file(FT.FILE_OR_DIRECTORY & ~FT.DIRECTORY)
3638
assert not m.is_directory(FT.FILE_OR_DIRECTORY & ~FT.DIRECTORY)
39+
40+
41+
_tree_values: TypeAlias = list["str | tuple[str, _tree_values]"]
42+
43+
44+
def make_tree(
45+
values: _tree_values, root: mobase.IFileTree | None = None
46+
) -> mobase.IFileTree:
47+
if root is None:
48+
root = cast(mobase.IFileTree, mobase.private.makeTree()) # type: ignore
49+
50+
for value in values:
51+
if isinstance(value, str):
52+
root.addFile(value)
53+
else:
54+
sub_tree = root.addDirectory(value[0])
55+
make_tree(value[1], sub_tree)
56+
57+
return root
58+
59+
60+
def test_walk():
61+
tree = make_tree(
62+
[("a", []), ("b", ["u", "v"]), "c.x", "d.y", ("e", [("q", ["c.t", ("p", [])])])]
63+
)
64+
65+
assert {"a", "b", "b/u", "b/v", "c.x", "d.y", "e", "e/q", "e/q/c.t", "e/q/p"} == {
66+
e.path("/") for e in tree.walk()
67+
}
68+
69+
entries: list[str] = []
70+
for e in tree.walk():
71+
if e.name() == "e":
72+
break
73+
entries.append(e.path("/"))
74+
assert {"a", "b", "b/u", "b/v"} == set(entries)
75+
76+
77+
def test_glob():
78+
tree = make_tree(
79+
[("a", []), ("b", ["u", "v"]), "c.x", "d.y", ("e", [("q", ["c.t", ("p", [])])])]
80+
)
81+
82+
assert {"a", "b", "b/u", "b/v", "c.x", "d.y", "e", "e/q", "e/q/c.t", "e/q/p"} == {
83+
e.path("/") for e in tree.glob("**/*")
84+
}
85+
86+
assert {"d.y"} == {e.path("/") for e in tree.glob("**/*.y")}

0 commit comments

Comments
 (0)