#![cfg(feature = "yaml")]
use std::fs;
use std::path::PathBuf;
#[test]
fn test_from_yaml_file() {
let yaml_path = PathBuf::from("tests/fixtures/tree.yaml");
let tree = tree_fs::from_yaml_file(&yaml_path).expect("Failed to create tree from YAML file");
assert!(tree.root.join("foo.json").exists());
assert!(tree.root.join("folder/bar.yaml").exists());
assert_eq!(
fs::read_to_string(tree.root.join("foo.json")).expect("Failed to read foo.json content"),
"{ \"foo\": \"bar\" }\n"
);
assert_eq!(
fs::read_to_string(tree.root.join("folder").join("bar.yaml"))
.expect("Failed to read bar.yaml content"),
"foo: bar\n"
);
}
#[test]
fn test_from_yaml_str() {
let yaml_content = r"
override_file: false
entries:
- path: foo.txt
type: text_file
content: foo
- path: folder/bar.txt
type: text_file
content: bar
";
let tree =
tree_fs::from_yaml_str(yaml_content).expect("Failed to create tree from YAML string");
assert!(tree.root.join("foo.txt").exists());
assert!(tree.root.join("folder/bar.txt").exists());
assert_eq!(
fs::read_to_string(tree.root.join("foo.txt")).expect("Failed to read foo.txt content"),
"foo"
);
assert_eq!(
fs::read_to_string(tree.root.join("folder/bar.txt"))
.expect("Failed to read bar.txt content"),
"bar"
);
}
#[test]
fn test_yaml_with_empty_files() {
let yaml_content = r"
entries:
- path: empty.txt
type: empty_file
- path: nested/also-empty.txt
type: empty_file
";
let tree = tree_fs::from_yaml_str(yaml_content)
.expect("Failed to create tree with empty files from YAML");
assert!(tree.root.join("empty.txt").exists());
assert!(tree.root.join("nested/also-empty.txt").exists());
assert_eq!(
fs::read_to_string(tree.root.join("empty.txt")).expect("Failed to read empty.txt"),
""
);
assert_eq!(
fs::read_to_string(tree.root.join("nested/also-empty.txt"))
.expect("Failed to read also-empty.txt"),
""
);
}
#[test]
fn test_yaml_with_directories() {
let yaml_content = r"
entries:
- path: empty-dir
type: directory
- path: nested/dir/structure
type: directory
";
let tree = tree_fs::from_yaml_str(yaml_content)
.expect("Failed to create tree with directories from YAML");
assert!(tree.root.join("empty-dir").exists());
assert!(tree.root.join("empty-dir").is_dir());
assert!(tree.root.join("nested/dir/structure").exists());
assert!(tree.root.join("nested/dir/structure").is_dir());
}
#[test]
fn test_yaml_drop_behavior() {
let yaml_content = r"
entries:
- path: file.txt
type: text_file
content: test content
";
let tree =
tree_fs::from_yaml_str(yaml_content).expect("Failed to create tree with default drop=true");
let root_path = tree.root.clone();
assert!(root_path.exists());
drop(tree);
assert!(!root_path.exists());
let yaml_content = r"
drop: false
entries:
- path: file.txt
type: text_file
content: test content
";
let tree = tree_fs::from_yaml_str(yaml_content).expect("Failed to create tree with drop=false");
let root_path = tree.root.clone();
assert!(root_path.exists());
drop(tree);
assert!(root_path.exists());
let _ = fs::remove_dir_all(root_path);
}
#[test]
fn test_yaml_custom_root() {
let custom_root = std::env::temp_dir().join("tree-fs-yaml-test-root");
let _ = fs::create_dir_all(&custom_root);
let yaml_content = format!(
r"
root: {}
entries:
- path: custom-root-file.txt
type: text_file
content: in custom root
",
custom_root.to_string_lossy()
);
let tree =
tree_fs::from_yaml_str(&yaml_content).expect("Failed to create tree with custom root");
assert_eq!(tree.root, custom_root);
assert!(tree.root.join("custom-root-file.txt").exists());
assert_eq!(
fs::read_to_string(tree.root.join("custom-root-file.txt"))
.expect("Failed to read file in custom root"),
"in custom root"
);
let _ = fs::remove_dir_all(&custom_root);
}