use anyhow::Result;
use lumin::tree::{Entry, TreeOptions, generate_tree};
use serial_test::serial;
use std::path::Path;
mod test_helpers;
use test_helpers::{TEST_DIR, TestEnvironment};
#[cfg(test)]
mod tree_tests {
use super::*;
#[test]
#[serial]
fn test_tree_default_options() -> Result<()> {
let _env = TestEnvironment::setup()?;
let options = TreeOptions::default();
let result = generate_tree(Path::new(TEST_DIR), &options)?;
assert!(!result.is_empty());
for dir_tree in &result {
assert!(!dir_tree.dir.is_empty());
assert!(!dir_tree.entries.is_empty());
for entry in &dir_tree.entries {
match entry {
Entry::File { name } => {
assert!(!name.is_empty());
}
Entry::Directory { name } => {
assert!(!name.is_empty());
}
}
}
}
assert!(!result.iter().any(|r| r.dir.contains(".hidden")));
Ok(())
}
#[test]
#[serial]
fn test_tree_ignore_gitignore() -> Result<()> {
let _env = TestEnvironment::setup()?;
let mut options = TreeOptions::default();
options.respect_gitignore = false;
let result = generate_tree(Path::new(TEST_DIR), &options)?;
assert!(
result.iter().any(|r| r.dir.contains(".hidden")),
"Did not find .hidden directories when ignoring gitignore"
);
Ok(())
}
#[test]
#[serial]
fn test_tree_text_files_only() -> Result<()> {
let _env = TestEnvironment::setup()?;
let options = TreeOptions::default();
let result = generate_tree(Path::new(TEST_DIR), &options)?;
assert!(!result.is_empty());
Ok(())
}
#[test]
#[serial]
fn test_tree_include_binary() -> Result<()> {
let _env = TestEnvironment::setup()?;
let options = TreeOptions::default();
let result = generate_tree(Path::new(TEST_DIR), &options)?;
let has_binary_files = result.iter().any(|dir_tree| {
dir_tree.entries.iter().any(|entry| match entry {
Entry::File { name } => {
name.ends_with(".jpg") || name.ends_with(".png") || name == "binary_executable"
}
_ => false,
})
});
assert!(has_binary_files, "Did not find binary files");
Ok(())
}
}