Skip to content

Commit

Permalink
test_dir_traversal: Make use of ExpectedTraverseStep self-documenting
Browse files Browse the repository at this point in the history
Each DirectoryTraversalVector encapsulate a test case for
DirectoryTraversal, and contains a list of steps that we expect
DirectoryTraversal to perform for that test case, aka. an
ExpectedTraverseStep.

These were initialized by passing four positional arguments to the
constructor (most of which are lists in their own right). The result
was that it was hard to read an ExpectedTraverseStep initialization and
immediate see what information was expected at this traversal step
(without constantly cross-referencing with the ExpectedTraverseStep
class definition).

Instead, make all ExpectedTraverseStep members (except the mandatory
.dir) optional (defaulting to empty lists), and use _named_ arguments
when intializing them. This makes reading the test cases more
straightforward: Instead of

  ExpectedTraverseStep("a/b/c", ["d"], [], [456, 123])

(meaning that we expect the traversal of "a/b/c" to list a single subdir
"d", no filenames, and passing [456, 123] as the attached data)
we now get

  ExpectedTraverseStep("a/b/c", subdirs=["d"], attached=[456, 123])
  • Loading branch information
jherland committed Oct 25, 2023
1 parent 328da0d commit 7e028ce
Showing 1 changed file with 39 additions and 39 deletions.
78 changes: 39 additions & 39 deletions tests/test_dir_traversal.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ class ExpectedTraverseStep(Generic[T]):

# All strings are relative to tmp_path
dir: str
subdirs: List[str]
files: List[str]
attached: List[T]
subdirs: List[str] = field(default_factory=list)
files: List[str] = field(default_factory=list)
attached: List[T] = field(default_factory=list)

def prepare(self, tmp_path: Path) -> TraversalStep:
return TraversalStep(
Expand All @@ -105,64 +105,64 @@ class DirectoryTraversalVector(Generic[T]):
DirectoryTraversalVector(
"empty_dir",
given=[],
expect=[ExpectedTraverseStep(".", [], [], [])],
expect=[ExpectedTraverseStep(".")],
),
DirectoryTraversalVector(
"one_file__attach_data",
given=[File("foo")],
add=[(".", (123,))],
expect=[ExpectedTraverseStep(".", [], ["foo"], [123])],
expect=[ExpectedTraverseStep(".", files=["foo"], attached=[123])],
),
DirectoryTraversalVector(
"one_subdir_plus__attach_data_on_both",
given=[Dir("sub")],
add=[(".", (123,)), ("sub", (456,))],
expect=[
ExpectedTraverseStep(".", ["sub"], [], [123]),
ExpectedTraverseStep("sub", [], [], [123, 456]),
ExpectedTraverseStep(".", subdirs=["sub"], attached=[123]),
ExpectedTraverseStep("sub", attached=[123, 456]),
],
),
DirectoryTraversalVector(
"one_subdir__attach_two_data_items_on_parent_dir",
given=[Dir("sub")],
add=[(".", (123, 456))],
expect=[
ExpectedTraverseStep(".", ["sub"], [], [123, 456]),
ExpectedTraverseStep("sub", [], [], [123, 456]),
ExpectedTraverseStep(".", subdirs=["sub"], attached=[123, 456]),
ExpectedTraverseStep("sub", attached=[123, 456]),
],
),
DirectoryTraversalVector(
"one_subdir__attach_data_twice_on_parent_dir",
given=[Dir("sub")],
add=[(".", (123,)), (".", (456,))],
expect=[
ExpectedTraverseStep(".", ["sub"], [], [123, 456]),
ExpectedTraverseStep("sub", [], [], [123, 456]),
ExpectedTraverseStep(".", subdirs=["sub"], attached=[123, 456]),
ExpectedTraverseStep("sub", attached=[123, 456]),
],
),
DirectoryTraversalVector(
"add_subdir__skip_parent_with_data__traverse_only_subdir_with_no_data",
given=[Dir("sub")],
add=[(".", (123,)), ("sub", ())],
skip_dirs=["."],
expect=[ExpectedTraverseStep("sub", [], [], [])],
expect=[ExpectedTraverseStep("sub")],
),
DirectoryTraversalVector(
"nested_subdir__attach_data_on_some_parents__gets_data_from_grandparents",
given=[Dir("a/b/c/d")],
add=[("a/b/c", (123,)), ("a", (456,)), (".", ())],
expect=[
ExpectedTraverseStep(".", ["a"], [], []),
ExpectedTraverseStep("a", ["b"], [], [456]),
ExpectedTraverseStep("a/b", ["c"], [], [456]),
ExpectedTraverseStep("a/b/c", ["d"], [], [456, 123]),
ExpectedTraverseStep("a/b/c/d", [], [], [456, 123]),
ExpectedTraverseStep(".", subdirs=["a"]),
ExpectedTraverseStep("a", subdirs=["b"], attached=[456]),
ExpectedTraverseStep("a/b", subdirs=["c"], attached=[456]),
ExpectedTraverseStep("a/b/c", subdirs=["d"], attached=[456, 123]),
ExpectedTraverseStep("a/b/c/d", attached=[456, 123]),
],
),
DirectoryTraversalVector(
"symlinks_to_self__are_not_traversed",
given=[RelativeSymlink("rel_self", "."), AbsoluteSymlink("abs_self", ".")],
expect=[ExpectedTraverseStep(".", ["rel_self", "abs_self"], [], [])],
expect=[ExpectedTraverseStep(".", subdirs=["rel_self", "abs_self"])],
),
DirectoryTraversalVector(
"symlinks_to_parent__are_not_traversed",
Expand All @@ -171,8 +171,8 @@ class DirectoryTraversalVector(Generic[T]):
AbsoluteSymlink("sub/abs_parent", "."),
],
expect=[
ExpectedTraverseStep(".", ["sub"], [], []),
ExpectedTraverseStep("sub", ["rel_parent", "abs_parent"], [], []),
ExpectedTraverseStep(".", subdirs=["sub"]),
ExpectedTraverseStep("sub", subdirs=["rel_parent", "abs_parent"]),
],
),
DirectoryTraversalVector(
Expand All @@ -183,19 +183,19 @@ class DirectoryTraversalVector(Generic[T]):
],
expect_alternatives=[
[
ExpectedTraverseStep(".", ["sub1", "sub2"], [], []),
ExpectedTraverseStep("sub1", ["rel_link_sub2"], [], []),
ExpectedTraverseStep("sub2", ["abs_link_sub1"], [], []),
ExpectedTraverseStep(".", subdirs=["sub1", "sub2"]),
ExpectedTraverseStep("sub1", subdirs=["rel_link_sub2"]),
ExpectedTraverseStep("sub2", subdirs=["abs_link_sub1"]),
],
[
ExpectedTraverseStep(".", ["sub1", "sub2"], [], []),
ExpectedTraverseStep("sub1", ["rel_link_sub2"], [], []),
ExpectedTraverseStep("sub1/rel_link_sub2", ["abs_link_sub1"], [], []),
ExpectedTraverseStep(".", subdirs=["sub1", "sub2"]),
ExpectedTraverseStep("sub1", subdirs=["rel_link_sub2"]),
ExpectedTraverseStep("sub1/rel_link_sub2", subdirs=["abs_link_sub1"]),
],
[
ExpectedTraverseStep(".", ["sub1", "sub2"], [], []),
ExpectedTraverseStep("sub2", ["abs_link_sub1"], [], []),
ExpectedTraverseStep("sub2/abs_link_sub1", ["rel_link_sub2"], [], []),
ExpectedTraverseStep(".", subdirs=["sub1", "sub2"]),
ExpectedTraverseStep("sub2", subdirs=["abs_link_sub1"]),
ExpectedTraverseStep("sub2/abs_link_sub1", subdirs=["rel_link_sub2"]),
],
],
),
Expand All @@ -207,8 +207,8 @@ class DirectoryTraversalVector(Generic[T]):
],
add=[("here", ())],
expect=[
ExpectedTraverseStep("here", ["symlink"], [], []),
ExpectedTraverseStep("here/symlink", [], ["file"], []),
ExpectedTraverseStep("here", subdirs=["symlink"]),
ExpectedTraverseStep("here/symlink", files=["file"]),
],
),
DirectoryTraversalVector(
Expand All @@ -219,8 +219,8 @@ class DirectoryTraversalVector(Generic[T]):
],
add=[("here", ())],
expect=[
ExpectedTraverseStep("here", ["symlink"], [], []),
ExpectedTraverseStep("here/symlink", [], ["file"], []),
ExpectedTraverseStep("here", subdirs=["symlink"]),
ExpectedTraverseStep("here/symlink", files=["file"]),
],
),
DirectoryTraversalVector(
Expand All @@ -232,16 +232,16 @@ class DirectoryTraversalVector(Generic[T]):
],
expect_alternatives=[
[
ExpectedTraverseStep(".", ["dir", "rel_link", "abs_link"], [], []),
ExpectedTraverseStep("dir", [], ["file"], []),
ExpectedTraverseStep(".", subdirs=["dir", "rel_link", "abs_link"]),
ExpectedTraverseStep("dir", files=["file"]),
],
[
ExpectedTraverseStep(".", ["dir", "rel_link", "abs_link"], [], []),
ExpectedTraverseStep("rel_link", [], ["file"], []),
ExpectedTraverseStep(".", subdirs=["dir", "rel_link", "abs_link"]),
ExpectedTraverseStep("rel_link", files=["file"]),
],
[
ExpectedTraverseStep(".", ["dir", "rel_link", "abs_link"], [], []),
ExpectedTraverseStep("abs_link", [], ["file"], []),
ExpectedTraverseStep(".", subdirs=["dir", "rel_link", "abs_link"]),
ExpectedTraverseStep("abs_link", files=["file"]),
],
],
),
Expand Down

0 comments on commit 7e028ce

Please sign in to comment.