From 00952c6aa7b585cd27712ab75fd854d8cec11fc4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 2 Jun 2019 18:05:13 +0530 Subject: Add another failing test --- tests/fixtures/sample-02/a | 1 + tests/fixtures/sample-02/b | 1 + tests/fixtures/sample-02/dir/c | 1 + tests/fixtures/sample-02/dir/d | 1 + tests/fixtures/sample-02/dir/empty-dir/.gitkeep | 0 tests/fixtures/sample-02/dir/sub/e | 1 + tests/interactive.rs | 108 ++++++++++++++++++------ 7 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 tests/fixtures/sample-02/a create mode 100644 tests/fixtures/sample-02/b create mode 100644 tests/fixtures/sample-02/dir/c create mode 100644 tests/fixtures/sample-02/dir/d create mode 100644 tests/fixtures/sample-02/dir/empty-dir/.gitkeep create mode 100644 tests/fixtures/sample-02/dir/sub/e (limited to 'tests') diff --git a/tests/fixtures/sample-02/a b/tests/fixtures/sample-02/a new file mode 100644 index 0000000..6385b6e --- /dev/null +++ b/tests/fixtures/sample-02/a @@ -0,0 +1 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/tests/fixtures/sample-02/b b/tests/fixtures/sample-02/b new file mode 100644 index 0000000..2e65efe --- /dev/null +++ b/tests/fixtures/sample-02/b @@ -0,0 +1 @@ +a \ No newline at end of file diff --git a/tests/fixtures/sample-02/dir/c b/tests/fixtures/sample-02/dir/c new file mode 100644 index 0000000..a6c4069 --- /dev/null +++ b/tests/fixtures/sample-02/dir/c @@ -0,0 +1 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/tests/fixtures/sample-02/dir/d b/tests/fixtures/sample-02/dir/d new file mode 100644 index 0000000..7ec9a4b --- /dev/null +++ b/tests/fixtures/sample-02/dir/d @@ -0,0 +1 @@ +aa \ No newline at end of file diff --git a/tests/fixtures/sample-02/dir/empty-dir/.gitkeep b/tests/fixtures/sample-02/dir/empty-dir/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/sample-02/dir/sub/e b/tests/fixtures/sample-02/dir/sub/e new file mode 100644 index 0000000..15e3a1f --- /dev/null +++ b/tests/fixtures/sample-02/dir/sub/e @@ -0,0 +1 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/tests/interactive.rs b/tests/interactive.rs index 38c5952..62f3aef 100644 --- a/tests/interactive.rs +++ b/tests/interactive.rs @@ -13,7 +13,7 @@ mod app { } #[test] - fn journey_with_single_path() -> Result<(), Error> { + fn it_can_handle_ending_traversal_reaching_top_but_skipping_levels() -> Result<(), Error> { let (_, app) = initialized_app_and_terminal("sample-01")?; let expected_tree = sample_01_tree(); @@ -25,6 +25,19 @@ mod app { Ok(()) } + #[test] + fn it_can_handle_ending_traversal_without_reaching_the_top() -> Result<(), Error> { + let (_, app) = initialized_app_and_terminal("sample-02")?; + let expected_tree = sample_02_tree(); + + assert_eq!( + debug(app.tree), + debug(expected_tree), + "filesystem graph is stable and matches the directory structure" + ); + Ok(()) + } + fn initialized_app_and_terminal( fixture_path: &str, ) -> Result<(Terminal, TerminalApp), Error> { @@ -47,43 +60,82 @@ mod app { fn sample_01_tree() -> Tree { let mut t = Tree::new(); - let mut add_node = |name, size, maybe_from_idx: Option>| { - let n = t.add_node(EntryData { - name: OsString::from(name), - size, - metadata_io_error: false, - }); - if let Some(from) = maybe_from_idx { - t.add_edge(from, n, ()); - } - n - }; - let root_size = 1259070; - let r = add_node("", root_size, None); { - let s = add_node("sample-01", root_size, Some(r)); + let mut add_node = make_add_node(&mut t); + let root_size = 1259070; + let r = add_node("", root_size, None); { - add_node(".hidden.666", 666, Some(s)); - add_node("a", 256, Some(s)); - add_node("b.empty", 0, Some(s)); - add_node("c.lnk", 1, Some(s)); - let d = add_node("dir", 1258024, Some(s)); + let s = add_node("sample-01", root_size, Some(r)); { - add_node("1000bytes", 1000, Some(d)); - add_node("dir-a.1mb", 1_000_000, Some(d)); - add_node("dir-a.kb", 1024, Some(d)); - let e = add_node("empty-dir", 0, Some(d)); + add_node(".hidden.666", 666, Some(s)); + add_node("a", 256, Some(s)); + add_node("b.empty", 0, Some(s)); + add_node("c.lnk", 1, Some(s)); + let d = add_node("dir", 1258024, Some(s)); { - add_node(".gitkeep", 0, Some(e)); + add_node("1000bytes", 1000, Some(d)); + add_node("dir-a.1mb", 1_000_000, Some(d)); + add_node("dir-a.kb", 1024, Some(d)); + let e = add_node("empty-dir", 0, Some(d)); + { + add_node(".gitkeep", 0, Some(e)); + } + let sub = add_node("sub", 256_000, Some(d)); + { + add_node("dir-sub-a.256kb", 256_000, Some(sub)); + } } - let sub = add_node("sub", 256_000, Some(d)); + add_node("z123.b", 123, Some(s)); + } + } + } + t + } + fn sample_02_tree() -> Tree { + let mut t = Tree::new(); + { + let mut add_node = make_add_node(&mut t); + let root_size = 1540; + let r = add_node("", root_size, None); + { + let s = add_node("sample-02", root_size, Some(r)); + { + add_node("a", 256, Some(s)); + add_node("b", 1, Some(s)); + let d = add_node("dir", 1283, Some(s)); { - add_node("dir-sub-a.256kb", 256_000, Some(sub)); + add_node("c", 257, Some(d)); + add_node("d", 2, Some(d)); + let e = add_node("empty-dir", 0, Some(d)); + { + add_node(".gitkeep", 0, Some(e)); + } + let sub = add_node("sub", 1024, Some(d)); + { + add_node("e", 1024, Some(sub)); + } } } - add_node("z123.b", 123, Some(s)); } } t } + + fn make_add_node<'a>( + t: &'a mut Tree, + ) -> impl FnMut(&str, u64, Option>) -> NodeIndex + 'a + { + move |name, size, maybe_from_idx| { + let n = t.add_node(EntryData { + name: OsString::from(name), + size, + metadata_io_error: false, + }); + if let Some(from) = maybe_from_idx { + t.add_edge(from, n, ()); + } + n + } + } + } -- cgit v1.2.3