mirror of
https://github.com/bootandy/dust.git
synced 2026-06-08 11:29:05 +03:00
Fix: Remove first space char
Before we assumed 5 chars for printing the size of a node. This change allows us to check if we need 5 chars or if we can manage with 4 which may save us a character. (1023B = 5 chars, 1.2K = 4 chars) Note: Mac test runners create very long filenames in tmp directories. To fix this we must either 1) Tell the terminal it has a very wide width 2) Duplicate the code to reduce the size of the filename (add .. at the end). This commit changes from (2) to (1)
This commit is contained in:
+39
-39
@@ -82,19 +82,19 @@ fn main_output() -> Vec<String> {
|
||||
// Some linux currently thought to be Manjaro, Arch
|
||||
// Although probably depends on how drive is formatted
|
||||
let mac_and_some_linux = r#"
|
||||
0B ┌── a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── hello_file│████████████████████████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ many │████████████████████████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ test_dir │████████████████████████████████████████████████ │ 100%
|
||||
"#
|
||||
0B ┌── a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── hello_file│█████████████████████████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ many │█████████████████████████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ test_dir │█████████████████████████████████████████████████ │ 100%
|
||||
"#
|
||||
.trim()
|
||||
.to_string();
|
||||
|
||||
let ubuntu = r#"
|
||||
0B ┌── a_file │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── hello_file│ ░░░░░░░░░░░░░░░░█████████████████ │ 33%
|
||||
8.0K ┌─┴ many │ █████████████████████████████████ │ 67%
|
||||
12K ┌─┴ test_dir │████████████████████████████████████████████████ │ 100%
|
||||
0B ┌── a_file │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── hello_file│ ░░░░░░░░░░░░░░░░█████████████████ │ 33%
|
||||
8.0K ┌─┴ many │ █████████████████████████████████ │ 67%
|
||||
12K ┌─┴ test_dir │█████████████████████████████████████████████████ │ 100%
|
||||
"#
|
||||
.trim()
|
||||
.to_string();
|
||||
@@ -111,18 +111,18 @@ pub fn test_main_long_paths() {
|
||||
|
||||
fn main_output_long_paths() -> Vec<String> {
|
||||
let mac_and_some_linux = r#"
|
||||
0B ┌── /tmp/test_dir/many/a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── /tmp/test_dir/many/hello_file│█████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ /tmp/test_dir/many │█████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ /tmp/test_dir │█████████████████████████████ │ 100%
|
||||
0B ┌── /tmp/test_dir/many/a_file │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── /tmp/test_dir/many/hello_file│██████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ /tmp/test_dir/many │██████████████████████████████ │ 100%
|
||||
4.0K ┌─┴ /tmp/test_dir │██████████████████████████████ │ 100%
|
||||
"#
|
||||
.trim()
|
||||
.to_string();
|
||||
let ubuntu = r#"
|
||||
0B ┌── /tmp/test_dir/many/a_file │ ░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── /tmp/test_dir/many/hello_file│ ░░░░░░░░░░██████████ │ 33%
|
||||
8.0K ┌─┴ /tmp/test_dir/many │ ████████████████████ │ 67%
|
||||
12K ┌─┴ /tmp/test_dir │█████████████████████████████ │ 100%
|
||||
0B ┌── /tmp/test_dir/many/a_file │ ░░░░░░░░░░░░░░░░░░░░█ │ 0%
|
||||
4.0K ├── /tmp/test_dir/many/hello_file│ ░░░░░░░░░░███████████ │ 33%
|
||||
8.0K ┌─┴ /tmp/test_dir/many │ █████████████████████ │ 67%
|
||||
12K ┌─┴ /tmp/test_dir │██████████████████████████████ │ 100%
|
||||
"#
|
||||
.trim()
|
||||
.to_string();
|
||||
@@ -139,25 +139,25 @@ pub fn test_substring_of_names_and_long_names() {
|
||||
|
||||
fn no_substring_of_names_output() -> Vec<String> {
|
||||
let ubuntu = "
|
||||
0B ┌── long_dir_name_what_a_very_long_dir_name_what_happens_when_this_goe..
|
||||
4.0K ├── dir_name_clash
|
||||
4.0K │ ┌── hello
|
||||
8.0K ├─┴ dir
|
||||
4.0K │ ┌── hello
|
||||
8.0K ├─┴ dir_substring
|
||||
24K ┌─┴ test_dir2
|
||||
0B ┌── long_dir_name_what_a_very_long_dir_name_what_happens_when_this_goes..
|
||||
4.0K ├── dir_name_clash
|
||||
4.0K │ ┌── hello
|
||||
8.0K ├─┴ dir
|
||||
4.0K │ ┌── hello
|
||||
8.0K ├─┴ dir_substring
|
||||
24K ┌─┴ test_dir2
|
||||
"
|
||||
.trim()
|
||||
.into();
|
||||
|
||||
let mac_and_some_linux = "
|
||||
0B ┌── long_dir_name_what_a_very_long_dir_name_what_happens_when_this_goe..
|
||||
4.0K │ ┌── hello
|
||||
4.0K ├─┴ dir
|
||||
4.0K ├── dir_name_clash
|
||||
4.0K │ ┌── hello
|
||||
4.0K ├─┴ dir_substring
|
||||
12K ┌─┴ test_dir2
|
||||
0B ┌── long_dir_name_what_a_very_long_dir_name_what_happens_when_this_goes..
|
||||
4.0K │ ┌── hello
|
||||
4.0K ├─┴ dir
|
||||
4.0K ├── dir_name_clash
|
||||
4.0K │ ┌── hello
|
||||
4.0K ├─┴ dir_substring
|
||||
12K ┌─┴ test_dir2
|
||||
"
|
||||
.trim()
|
||||
.into();
|
||||
@@ -174,17 +174,17 @@ pub fn test_unicode_directories() {
|
||||
fn unicode_dir() -> Vec<String> {
|
||||
// The way unicode & asian characters are rendered on the terminal should make this line up
|
||||
let ubuntu = "
|
||||
0B ┌── ラウトは難しいです!.japan│ █ │ 0%
|
||||
0B ├── 👩.unicode │ █ │ 0%
|
||||
4.0K ┌─┴ test_dir_unicode │██████████████████████████████████ │ 100%
|
||||
0B ┌── ラウトは難しいです!.japan│ █ │ 0%
|
||||
0B ├── 👩.unicode │ █ │ 0%
|
||||
4.0K ┌─┴ test_dir_unicode │███████████████████████████████████ │ 100%
|
||||
"
|
||||
.trim()
|
||||
.into();
|
||||
|
||||
let mac_and_some_linux = "
|
||||
0B ┌── ラウトは難しいです!.japan│ █ │ 0%
|
||||
0B ├── 👩.unicode │ █ │ 0%
|
||||
0B ┌─┴ test_dir_unicode │ █ │ 0%
|
||||
0B ┌── ラウトは難しいです!.japan│ █ │ 0%
|
||||
0B ├── 👩.unicode │ █ │ 0%
|
||||
0B ┌─┴ test_dir_unicode │ █ │ 0%
|
||||
"
|
||||
.trim()
|
||||
.into();
|
||||
@@ -201,8 +201,8 @@ pub fn test_apparent_size() {
|
||||
fn apparent_size_output() -> Vec<String> {
|
||||
// The apparent directory sizes are too unpredictable and system dependant to try and match
|
||||
let files = r#"
|
||||
0B ┌── a_file
|
||||
6B ├── hello_file
|
||||
0B ┌── a_file
|
||||
6B ├── hello_file
|
||||
"#
|
||||
.trim()
|
||||
.to_string();
|
||||
|
||||
+2
-2
@@ -73,8 +73,8 @@ pub fn test_ignore_dir() {
|
||||
#[test]
|
||||
pub fn test_with_bad_param() {
|
||||
let mut cmd = Command::cargo_bin("dust").unwrap();
|
||||
let stderr = cmd.arg("-").unwrap().stderr;
|
||||
let stderr = str::from_utf8(&stderr).unwrap();
|
||||
let result = cmd.arg("bad_place").unwrap();
|
||||
let stderr = str::from_utf8(&result.stderr).unwrap();
|
||||
assert!(stderr.contains("Did not have permissions for all directories"));
|
||||
}
|
||||
|
||||
|
||||
+12
-32
@@ -1,41 +1,15 @@
|
||||
use assert_cmd::Command;
|
||||
use std::cmp::max;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::PathBuf;
|
||||
use std::str;
|
||||
|
||||
use terminal_size::{terminal_size, Height, Width};
|
||||
use unicode_width::UnicodeWidthStr;
|
||||
|
||||
use tempfile::Builder;
|
||||
use tempfile::TempDir;
|
||||
|
||||
// File sizes differ on both platform and on the format of the disk.
|
||||
// Windows: `ln` is not usually an available command; creation of symbolic links requires special enhanced permissions
|
||||
|
||||
fn get_width_of_terminal() -> u16 {
|
||||
if let Some((Width(w), Height(_h))) = terminal_size() {
|
||||
max(w, 80)
|
||||
} else {
|
||||
80
|
||||
}
|
||||
}
|
||||
|
||||
// Mac test runners create tmp files with very long names, hence it may be shortened in the output
|
||||
fn get_file_name(name: String) -> String {
|
||||
let terminal_plus_buffer = (get_width_of_terminal() - 12) as usize;
|
||||
if UnicodeWidthStr::width(&*name) > terminal_plus_buffer {
|
||||
let trimmed_name = name
|
||||
.chars()
|
||||
.take(terminal_plus_buffer - 2)
|
||||
.collect::<String>();
|
||||
trimmed_name + ".."
|
||||
} else {
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
fn build_temp_file(dir: &TempDir) -> PathBuf {
|
||||
let file_path = dir.path().join("notes.txt");
|
||||
let mut file = File::create(&file_path).unwrap();
|
||||
@@ -60,12 +34,16 @@ pub fn test_soft_sym_link() {
|
||||
.output();
|
||||
assert!(c.is_ok());
|
||||
|
||||
let c = format!(" ├── {}", get_file_name(link_name_s.into()));
|
||||
let b = format!(" ┌── {}", get_file_name(file_path_s.into()));
|
||||
let c = format!(" ├── {}", link_name_s);
|
||||
let b = format!(" ┌── {}", file_path_s);
|
||||
let a = format!("─┴ {}", dir_s);
|
||||
|
||||
let mut cmd = Command::cargo_bin("dust").unwrap();
|
||||
let output = cmd.arg("-p").arg("-c").arg("-s").arg(dir_s).unwrap().stdout;
|
||||
// Mac test runners create long filenames in tmp directories
|
||||
let output = cmd
|
||||
.args(["-p", "-c", "-s", "-w 999", dir_s])
|
||||
.unwrap()
|
||||
.stdout;
|
||||
|
||||
let output = str::from_utf8(&output).unwrap();
|
||||
|
||||
@@ -90,11 +68,12 @@ pub fn test_hard_sym_link() {
|
||||
.output();
|
||||
assert!(c.is_ok());
|
||||
|
||||
let file_output = format!(" ┌── {}", get_file_name(file_path_s.into()));
|
||||
let file_output = format!(" ┌── {}", file_path_s);
|
||||
let dirs_output = format!("─┴ {}", dir_s);
|
||||
|
||||
let mut cmd = Command::cargo_bin("dust").unwrap();
|
||||
let output = cmd.arg("-p").arg("-c").arg(dir_s).unwrap().stdout;
|
||||
// Mac test runners create long filenames in tmp directories
|
||||
let output = cmd.args(["-p", "-c", "-w 999", dir_s]).unwrap().stdout;
|
||||
|
||||
// The link should not appear in the output because multiple inodes are now ordered
|
||||
// then filtered.
|
||||
@@ -120,7 +99,7 @@ pub fn test_recursive_sym_link() {
|
||||
assert!(c.is_ok());
|
||||
|
||||
let a = format!("─┬ {}", dir_s);
|
||||
let b = format!(" └── {}", get_file_name(link_name_s.into()));
|
||||
let b = format!(" └── {}", link_name_s);
|
||||
|
||||
let mut cmd = Command::cargo_bin("dust").unwrap();
|
||||
let output = cmd
|
||||
@@ -128,6 +107,7 @@ pub fn test_recursive_sym_link() {
|
||||
.arg("-c")
|
||||
.arg("-r")
|
||||
.arg("-s")
|
||||
.arg("-w 999")
|
||||
.arg(dir_s)
|
||||
.unwrap()
|
||||
.stdout;
|
||||
|
||||
Reference in New Issue
Block a user