use rust_tree::rust_tree::display::{colorize, format_permissions_unix};
use std::fs;
fn with_test_entry<F, R>(f: F) -> Option<R>
where
F: FnOnce(&fs::DirEntry) -> R,
{
if let Ok(entries) = fs::read_dir(".") {
for entry in entries.flatten() {
return Some(f(&entry));
}
}
None
}
#[test]
fn test_colorize_function() {
if let Some(results) = with_test_entry(|entry| {
let result1 = colorize(entry, "test.txt");
let result2 = colorize(entry, "main.rs");
let result3 = colorize(entry, "directory");
let consistent1 = colorize(entry, "same");
let consistent2 = colorize(entry, "same");
(result1, result2, result3, consistent1, consistent2)
}) {
let (result1, result2, result3, consistent1, consistent2) = results;
assert!(!result1.is_empty());
assert!(!result2.is_empty());
assert!(!result3.is_empty());
assert_eq!(consistent1, consistent2);
}
}
#[test]
fn test_colorize_different_extensions() {
with_test_entry(|entry| {
let extensions = [
"test.rs",
"script.py",
"data.json",
"config.toml",
"image.png",
"archive.zip",
"archive.tar",
"archive.gz",
"executable",
];
for filename in extensions {
let result = colorize(entry, filename);
assert!(!result.is_empty());
}
});
}
#[test]
fn test_colorize_consistency() {
if let Some((result1, result2, result3)) = with_test_entry(|entry| {
let text = "test.txt";
let result1 = colorize(entry, text);
let result2 = colorize(entry, text);
let result3 = colorize(entry, text);
(result1, result2, result3)
}) {
assert_eq!(result1, result2);
assert_eq!(result2, result3);
}
}
#[cfg(unix)]
#[test]
fn test_format_permissions_unix() {
let formatted_755 = format_permissions_unix(0o755, false);
let formatted_644 = format_permissions_unix(0o644, false);
let formatted_777 = format_permissions_unix(0o777, false);
let formatted_000 = format_permissions_unix(0o000, false);
assert_eq!(formatted_755, "[-rwxr-xr-x]");
assert_eq!(formatted_644, "[-rw-r--r--]");
assert_eq!(formatted_777, "[-rwxrwxrwx]");
assert_eq!(formatted_000, "[----------]");
}
#[cfg(unix)]
#[test]
fn test_format_permissions_directory_vs_file() {
let file_perms = format_permissions_unix(0o644, false);
let dir_perms = format_permissions_unix(0o755, true);
assert_eq!(file_perms, "[-rw-r--r--]");
assert_eq!(dir_perms, "[drwxr-xr-x]");
}
#[cfg(unix)]
#[test]
fn test_format_permissions_special_bits() {
let formatted_sticky = format_permissions_unix(0o1755, true); let formatted_setgid = format_permissions_unix(0o2755, true); let formatted_setuid = format_permissions_unix(0o4755, false);
assert!(!formatted_sticky.is_empty());
assert!(!formatted_setgid.is_empty());
assert!(!formatted_setuid.is_empty());
assert!(formatted_sticky.starts_with('[') && formatted_sticky.ends_with(']'));
assert!(formatted_setgid.starts_with('[') && formatted_setgid.ends_with(']'));
assert!(formatted_setuid.starts_with('[') && formatted_setuid.ends_with(']'));
}
#[cfg(not(unix))]
#[test]
fn test_format_permissions_non_unix() {
let result = format_permissions_unix(0o755, false);
assert_eq!(result, "");
}
#[test]
fn test_colorize_edge_cases() {
with_test_entry(|entry| {
let edge_cases = [
"",
"a",
"a_very_long_filename_that_might_cause_issues.extension",
"file-with-special_chars.123",
"file.with.multiple.dots",
"UPPERCASE.EXT",
];
for text in edge_cases {
let result = colorize(entry, text);
assert!(result.len() >= text.len());
}
});
}