mirror of
https://github.com/bootandy/dust.git
synced 2025-12-12 15:49:58 -08:00
Use the whole width of the terminal assume width of 80 if none found Show percentages in the final column. Show ASCII bars indicating usage of the underlying directories in the space inbetween. Display (height of terminal - 10) entries by default. Reverse the output order so largest is at the bottom. Break up tests. Change older tests to check real output of program.
260 lines
11 KiB
Rust
260 lines
11 KiB
Rust
mod tests_symlinks;
|
|
|
|
// File sizes differ on both platform and on the format of the disk.
|
|
// We can at least test the file names are there
|
|
#[test]
|
|
pub fn test_basic_output() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["src/test_dir/"])
|
|
.stdout()
|
|
.contains(" ┌─┴ test_dir ")
|
|
.stdout()
|
|
.contains(" ┌─┴ many ")
|
|
.stdout()
|
|
.contains(" ├── hello_file")
|
|
.stdout()
|
|
.contains(" ┌── a_file ")
|
|
.unwrap();
|
|
}
|
|
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_main_basic() {
|
|
// -c is no color mode - This makes testing much simpler
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "src/test_dir"])
|
|
.stdout()
|
|
.is(main_output().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_main_multi_arg() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "src/test_dir/many/", "src/test_dir/", "src/test_dir"])
|
|
.stdout()
|
|
.is(main_output().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
fn main_output() -> String {
|
|
r#"
|
|
0B ┌── a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
4.0K ├── hello_file│██████████████████████████████████████████████ │ 100%
|
|
4.0K ┌─┴ many │██████████████████████████████████████████████ │ 100%
|
|
4.0K ┌─┴ test_dir │██████████████████████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
fn main_output() -> String {
|
|
r#"
|
|
0B ┌── a_file │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
4.0K ├── hello_file│ ░░░░░░░░░░░░░░░████████████████ │ 33%
|
|
8.0K ┌─┴ many │ ███████████████████████████████ │ 67%
|
|
12K ┌─┴ test_dir │██████████████████████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn main_output() -> String {
|
|
"PRs welcome".to_string()
|
|
}
|
|
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_main_long_paths() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "-p", "src/test_dir"])
|
|
.stdout()
|
|
.is(main_output_long_paths().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
fn main_output_long_paths() -> String {
|
|
r#"
|
|
0B ┌── src/test_dir/many/a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
4.0K ├── src/test_dir/many/hello_file│████████████████████████████ │ 100%
|
|
4.0K ┌─┴ src/test_dir/many │████████████████████████████ │ 100%
|
|
4.0K ┌─┴ src/test_dir │████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
fn main_output_long_paths() -> String {
|
|
r#"
|
|
0B ┌── src/test_dir/many/a_file │ ░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
4.0K ├── src/test_dir/many/hello_file│ ░░░░░░░░░██████████ │ 33%
|
|
8.0K ┌─┴ src/test_dir/many │ ███████████████████ │ 67%
|
|
12K ┌─┴ src/test_dir │████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn main_output_long_paths() -> String {
|
|
"PRs welcome".to_string()
|
|
}
|
|
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_apparent_size() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "-s", "src/test_dir"])
|
|
.stdout()
|
|
.is(output_apparent_size().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
fn output_apparent_size() -> String {
|
|
r#"
|
|
0B ┌── a_file │ ░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
6B ├── hello_file│ ░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
4.0K ┌─┴ many │ ████████████████████████ │ 50%
|
|
8.0K ┌─┴ test_dir │██████████████████████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
fn output_apparent_size() -> String {
|
|
r#"
|
|
0B ┌── a_file │ ░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
|
6B ├── hello_file│ ░░░░░░░░░░░░░░░░░░░░░░░░░██ │ 3%
|
|
134B ┌─┴ many │ ███████████████████████████ │ 58%
|
|
230B ┌─┴ test_dir │██████████████████████████████████████████████ │ 100%
|
|
"#
|
|
.to_string()
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn output_apparent_size() -> String {
|
|
"".to_string()
|
|
}
|
|
|
|
#[test]
|
|
pub fn test_reverse_flag() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "-r", "src/test_dir/"])
|
|
.stdout()
|
|
.contains(" └─┬ test_dir ")
|
|
.stdout()
|
|
.contains(" └─┬ many ")
|
|
.stdout()
|
|
.contains(" ├── hello_file")
|
|
.stdout()
|
|
.contains(" └── a_file ")
|
|
.unwrap();
|
|
}
|
|
|
|
#[test]
|
|
pub fn test_d_flag_works() {
|
|
// We should see the top level directory but not the sub dirs / files:
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-d", "1", "-s", "src/test_dir"])
|
|
.stdout()
|
|
.doesnt_contain("hello_file")
|
|
.unwrap();
|
|
}
|
|
|
|
// Check against directories and files whos names are substrings of each other
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_substring_of_names() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "src/test_dir2"])
|
|
.stdout()
|
|
.is(no_substring_of_names_output().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
fn no_substring_of_names_output() -> String {
|
|
"
|
|
4.0K ┌── dir_name_clash│ ████████ │ 17%
|
|
4.0K │ ┌── hello │ ░░░░░░░████████ │ 17%
|
|
8.0K ├─┴ dir_substring │ ███████████████ │ 33%
|
|
4.0K │ ┌── hello │ ░░░░░░░████████ │ 17%
|
|
8.0K ├─┴ dir │ ███████████████ │ 33%
|
|
24K ┌─┴ test_dir2 │████████████████████████████████████████████ │ 100%
|
|
"
|
|
.into()
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
fn no_substring_of_names_output() -> String {
|
|
"
|
|
4.0K ┌── hello │ ███████████████ │ 33%
|
|
4.0K ┌─┴ dir_substring │ ███████████████ │ 33%
|
|
4.0K ├── dir_name_clash│ ███████████████ │ 33%
|
|
4.0K │ ┌── hello │ ███████████████ │ 33%
|
|
4.0K ├─┴ dir │ ███████████████ │ 33%
|
|
12K ┌─┴ test_dir2 │████████████████████████████████████████████ │ 100%
|
|
"
|
|
.into()
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn no_substring_of_names_output() -> String {
|
|
"PRs".into()
|
|
}
|
|
|
|
// fix! [rivy; 2020-22-01] "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable
|
|
#[cfg_attr(target_os = "windows", ignore)]
|
|
#[test]
|
|
pub fn test_unicode_directories() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "src/test_dir3"])
|
|
.stdout()
|
|
.is(unicode_dir().as_str())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
fn unicode_dir() -> String {
|
|
// The way unicode & asian characters are rendered on the terminal should make this line up
|
|
"
|
|
0B ┌── 👩.unicode │ █ │ 0%
|
|
0B ├── ラウトは難しいです!.japan│ █ │ 0%
|
|
4.0K ┌─┴ test_dir3 │████████████████████████████████ │ 100%
|
|
"
|
|
.into()
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
fn unicode_dir() -> String {
|
|
"
|
|
0B ┌── 👩.unicode │ █ │ 0%
|
|
0B ├── ラウトは難しいです!.japan│ █ │ 0%
|
|
0B ┌─┴ test_dir3 │ █ │ 0%
|
|
"
|
|
.into()
|
|
}
|
|
|
|
#[cfg(target_os = "windows")]
|
|
fn unicode_dir() -> String {
|
|
"".into()
|
|
}
|
|
|
|
// Check against directories and files whos names are substrings of each other
|
|
#[test]
|
|
pub fn test_ignore_dir() {
|
|
assert_cli::Assert::main_binary()
|
|
.with_args(&["-c", "-X", "dir_substring", "src/test_dir2"])
|
|
.stdout()
|
|
.doesnt_contain("dir_substring")
|
|
.unwrap();
|
|
}
|