use fsvalidator::model::{DirNode, FileNode, NodeName};
use fsvalidator::display::SYMBOLS;
#[test]
fn test_display_file_node() {
let file_node = FileNode::new(NodeName::Literal("test.txt".to_string()), true);
let output = format!("{}", file_node);
assert!(output.contains(SYMBOLS.file));
assert!(output.contains("test.txt"));
assert!(output.contains(SYMBOLS.required));
}
#[test]
fn test_display_dir_node() {
let dir_node = DirNode::new(
NodeName::Literal("test_dir".to_string()),
vec![],
true,
false,
vec![],
);
let output = format!("{}", dir_node);
assert!(output.contains(SYMBOLS.directory));
assert!(output.contains("test_dir"));
assert!(output.contains(SYMBOLS.required));
assert!(!output.contains("restrict: yes"));
}
#[test]
fn test_display_node_with_children() {
let file_node = FileNode::new(NodeName::Literal("child.txt".to_string()), false);
let dir_node = DirNode::new(
NodeName::Literal("parent".to_string()),
vec![file_node],
true,
true,
vec![],
);
let output = format!("{}", dir_node);
assert!(output.contains(SYMBOLS.directory));
assert!(output.contains("parent"));
assert!(output.contains("restrict: yes"));
assert!(output.contains(SYMBOLS.file));
assert!(output.contains("child.txt"));
assert!(output.contains(SYMBOLS.optional));
}
#[test]
fn test_display_pattern_node() {
let file_node = FileNode::new(NodeName::Pattern(".*\\.txt".to_string()), true);
let dir_node = DirNode::new(
NodeName::Pattern("test_\\d+".to_string()),
vec![],
false,
false,
vec![],
);
let file_output = format!("{}", file_node);
let dir_output = format!("{}", dir_node);
assert!(file_output.contains(SYMBOLS.file));
assert!(file_output.contains("Pattern(.*\\.txt)"));
assert!(dir_output.contains(SYMBOLS.directory));
assert!(dir_output.contains("Pattern(test_\\d+)"));
}
#[test]
fn test_display_deep_nested_structure() {
let mut current = None;
for i in (0..15).rev() {
let name = format!("level_{}", i);
let children = match current {
Some(node) => vec![node],
None => vec![],
};
current = Some(DirNode::new(
NodeName::Literal(name),
children,
true,
false,
vec![],
));
}
if let Some(root) = current {
let output = format!("{}", root);
assert!(output.contains("..."));
assert!(output.contains("more items"));
assert!(output.contains("level_0"));
assert!(output.contains("level_1"));
} else {
panic!("Failed to create test structure");
}
}