181 lines
4.9 KiB
Rust
181 lines
4.9 KiB
Rust
#![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");
|
|
|
|
// Verify that files from YAML exist
|
|
assert!(tree.root.join("foo.json").exists());
|
|
assert!(tree.root.join("folder/bar.yaml").exists());
|
|
|
|
// Verify content matches what's defined in the YAML
|
|
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");
|
|
|
|
// Verify that files specified in the YAML string exist
|
|
assert!(tree.root.join("foo.txt").exists());
|
|
assert!(tree.root.join("folder/bar.txt").exists());
|
|
|
|
// Verify content matches YAML definition
|
|
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");
|
|
|
|
// Verify empty files exist
|
|
assert!(tree.root.join("empty.txt").exists());
|
|
assert!(tree.root.join("nested/also-empty.txt").exists());
|
|
|
|
// Verify they are indeed empty
|
|
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");
|
|
|
|
// Verify directories exist
|
|
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() {
|
|
// Test with drop: true (default)
|
|
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 the tree, root should be deleted
|
|
drop(tree);
|
|
assert!(!root_path.exists());
|
|
|
|
// Test with drop: false
|
|
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 the tree, root should still exist
|
|
drop(tree);
|
|
assert!(root_path.exists());
|
|
|
|
// Clean up
|
|
let _ = fs::remove_dir_all(root_path);
|
|
}
|
|
|
|
#[test]
|
|
fn test_yaml_custom_root() {
|
|
// Create a custom root in the temp directory
|
|
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"
|
|
);
|
|
|
|
// Clean up
|
|
let _ = fs::remove_dir_all(&custom_root);
|
|
}
|