#![allow(unused_imports)]
#![allow(clippy::approx_constant)]
use unity_asset_binary::typetree::{TypeTree, TypeTreeNode};
#[test]
fn test_typetree_basic_functionality() {
println!("Testing TypeTree basic functionality...");
let mut tree = TypeTree::new();
assert!(tree.is_empty(), "New TypeTree should be empty");
assert_eq!(tree.node_count(), 0, "New TypeTree should have 0 nodes");
let mut root_node = TypeTreeNode::new();
root_node.type_name = "GameObject".to_string();
root_node.name = "".to_string();
root_node.level = 0;
tree.add_node(root_node);
assert!(
!tree.is_empty(),
"TypeTree should not be empty after adding node"
);
assert_eq!(tree.node_count(), 1, "TypeTree should have 1 node");
let mut name_node = TypeTreeNode::new();
name_node.type_name = "string".to_string();
name_node.name = "m_Name".to_string();
name_node.level = 1;
tree.add_node(name_node);
let mut active_node = TypeTreeNode::new();
active_node.type_name = "bool".to_string();
active_node.name = "m_IsActive".to_string();
active_node.level = 1;
tree.add_node(active_node);
assert_eq!(tree.node_count(), 3, "TypeTree should have 3 nodes");
assert!(
tree.find_node("m_Name").is_some(),
"Should find m_Name node"
);
assert!(
tree.find_node("m_IsActive").is_some(),
"Should find m_IsActive node"
);
assert!(
tree.find_node("nonexistent").is_none(),
"Should not find nonexistent node"
);
let validation_result = tree.validate();
assert!(
validation_result.is_ok(),
"TypeTree validation should succeed"
);
let stats = tree.statistics();
assert_eq!(stats.root_nodes, 3, "Should have 3 root nodes");
assert!(stats.total_nodes >= 3, "Should have at least 3 total nodes");
println!(" ✓ TypeTree basic functionality test passed");
}
#[test]
fn test_typetree_node_operations() {
println!("Testing TypeTree node operations...");
let mut tree = TypeTree::new();
let nodes_data = vec![
("GameObject", "", 0),
("string", "m_Name", 1),
("bool", "m_IsActive", 1),
("int", "m_Layer", 1),
];
for (type_name, name, level) in nodes_data {
let mut node = TypeTreeNode::new();
node.type_name = type_name.to_string();
node.name = name.to_string();
node.level = level;
tree.add_node(node);
}
let node_names = tree.node_names();
assert_eq!(node_names.len(), 4, "Should have 4 node names");
assert!(node_names.contains(&""), "Should contain root node");
assert!(node_names.contains(&"m_Name"), "Should contain m_Name");
assert!(
node_names.contains(&"m_IsActive"),
"Should contain m_IsActive"
);
assert!(node_names.contains(&"m_Layer"), "Should contain m_Layer");
if let Some(name_node) = tree.find_node("m_Name") {
assert_eq!(name_node.type_name, "string");
assert_eq!(name_node.level, 1);
}
if let Some(active_node) = tree.find_node("m_IsActive") {
assert_eq!(active_node.type_name, "bool");
assert_eq!(active_node.level, 1);
}
if let Some(layer_node) = tree.find_node("m_Layer") {
assert_eq!(layer_node.type_name, "int");
assert_eq!(layer_node.level, 1);
}
println!(" ✓ TypeTree node operations test passed");
}
#[test]
fn test_typetree_string_buffer() {
println!("Testing TypeTree string buffer operations...");
let mut tree = TypeTree::new();
let offset1 = tree.add_string("TestString1");
let offset2 = tree.add_string("TestString2");
let offset3 = tree.add_string("AnotherString");
assert_eq!(tree.get_string(offset1), Some("TestString1".to_string()));
assert_eq!(tree.get_string(offset2), Some("TestString2".to_string()));
assert_eq!(tree.get_string(offset3), Some("AnotherString".to_string()));
assert_eq!(tree.get_string(9999), None);
println!(" ✓ TypeTree string buffer test passed");
}
#[test]
fn test_typetree_validation() {
println!("Testing TypeTree validation...");
let empty_tree = TypeTree::new();
let validation_result = empty_tree.validate();
assert!(
validation_result.is_err(),
"Empty TypeTree should fail validation"
);
let mut valid_tree = TypeTree::new();
let mut root_node = TypeTreeNode::new();
root_node.type_name = "GameObject".to_string();
root_node.name = "".to_string();
valid_tree.add_node(root_node);
let validation_result = valid_tree.validate();
assert!(
validation_result.is_ok(),
"Valid TypeTree should pass validation"
);
println!(" ✓ TypeTree validation test passed");
}
#[test]
fn test_typetree_statistics() {
println!("Testing TypeTree statistics...");
let mut tree = TypeTree::new();
for i in 0..5 {
let mut node = TypeTreeNode::new();
node.type_name = format!("Type{}", i);
node.name = format!("field{}", i);
node.level = i;
tree.add_node(node);
}
let stats = tree.statistics();
assert_eq!(stats.root_nodes, 5, "Should have 5 root nodes");
assert!(stats.total_nodes >= 5, "Should have at least 5 total nodes");
assert!(stats.max_depth >= 0, "Should have max depth of at least 0");
println!(" ✓ TypeTree statistics test passed");
}