From 5c6165da8a352ac158c8cfc95c435d346a469177 Mon Sep 17 00:00:00 2001 From: bootandy Date: Thu, 5 Apr 2018 14:08:53 +0100 Subject: [PATCH] First integration test This test needs neatening but it is the first example of a working integration test --- Cargo.toml | 1 + src/display.rs | 24 +++++++++++++++--------- src/main.rs | 8 ++++++-- src/test_dir/many/a_file | 0 src/test_dir/many/hello_file | 1 + src/tests.rs | 28 ++++++++++++++++++++++++++++ 6 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 src/test_dir/many/a_file create mode 100644 src/test_dir/many/hello_file create mode 100644 src/tests.rs diff --git a/Cargo.toml b/Cargo.toml index 19b37ab..f2410c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ authors = ["bootandy ", "nebkor "] [dependencies] ansi_term = "0.11" clap = "2.31" +assert_cli = "0.5" diff --git a/src/display.rs b/src/display.rs index 92f38b7..b2d3c68 100644 --- a/src/display.rs +++ b/src/display.rs @@ -1,8 +1,7 @@ extern crate ansi_term; -use dust::Node; -use std::cmp; use self::ansi_term::Colour::Fixed; +use dust::Node; static UNITS: [char; 4] = ['T', 'G', 'M', 'K']; @@ -77,18 +76,25 @@ fn display_node>( } } -fn print_this_node(node_to_print: &Node, is_biggest: bool, indentation_str: &str) { - let padded_size = format!("{:>5}", human_readable_number(node_to_print.size()),); +fn print_this_node(node: &Node, is_biggest: bool, indentation: &str) { + let pretty_size = format!("{:>5}", human_readable_number(node.size()),); println!( + "{}", + format_string(node.name(), is_biggest, pretty_size.as_ref(), indentation) + ) +} + +pub fn format_string(dir_name: &str, is_biggest: bool, size: &str, indentation: &str) -> String { + format!( "{} {} {}", if is_biggest { - Fixed(196).paint(padded_size) + Fixed(196).paint(size) } else { - Fixed(7).paint(padded_size) + Fixed(7).paint(size) }, - indentation_str, - node_to_print.name() - ); + indentation, + dir_name, + ) } fn human_readable_number(size: u64) -> (String) { diff --git a/src/main.rs b/src/main.rs index 73ddc39..ab17d16 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,14 @@ #[macro_use] extern crate clap; +extern crate assert_cli; extern crate dust; +use self::display::draw_it; use clap::{App, AppSettings, Arg}; use utils::{find_big_ones, get_dir_tree}; -use self::display::draw_it; -mod utils; mod display; +mod utils; static DEFAULT_NUMBER_OF_LINES: &'static str = "15"; @@ -42,3 +43,6 @@ fn main() { let slice_it = find_big_ones(&node_per_top_level_dir, number_of_lines); draw_it(permissions, &node_per_top_level_dir, &slice_it); } + +#[cfg(test)] +mod tests; diff --git a/src/test_dir/many/a_file b/src/test_dir/many/a_file new file mode 100644 index 0000000..e69de29 diff --git a/src/test_dir/many/hello_file b/src/test_dir/many/hello_file new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/src/test_dir/many/hello_file @@ -0,0 +1 @@ +hello diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..3af44b9 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,28 @@ +extern crate ansi_term; +use super::*; +use display::format_string; + +// TESTS TODO: +// handle recursive dirs +// handle soft links +// handle hard links + +#[test] +pub fn test_main() { + let r = format!( + "{} +{} +{} +{}", + format_string("src/test_dir", true, " 4.0K", ""), + format_string("src/test_dir/many", true, " 4.0K", "└─┬",), + format_string("src/test_dir/many/hello_file", true, " 4.0K", " ├──",), + format_string("src/test_dir/many/a_file", false, " 0B", " └──",), + ); + + assert_cli::Assert::main_binary() + .with_args(&["src/test_dir"]) + .stdout() + .is(r) + .unwrap(); +}