session_rust/
tree_test.rs

1#[cfg(test)]
2mod tests {
3    use crate::point::Point;
4    use crate::tree::{Tree, TreeNode};
5
6    #[test]
7    fn test_treenode_constructor() {
8        // Test TreeNode constructor
9        let node = TreeNode::new("root");
10        assert_eq!(node.name(), "root");
11        assert!(node.is_root());
12    }
13
14    #[test]
15    fn test_treenode_to_json_data() {
16        // Test TreeNode to_json_data method - NOW MUCH SIMPLER!
17        let root = TreeNode::new("project_root");
18        let folder1 = TreeNode::new("src");
19        let folder2 = TreeNode::new("docs");
20        let file1 = TreeNode::new("main.py");
21        let file2 = TreeNode::new("README.md");
22
23        root.add(&folder1);
24        root.add(&folder2);
25        folder1.add(&file1);
26        folder2.add(&file2);
27
28        let data = root.to_json_data().unwrap();
29        let json_value: serde_json::Value = serde_json::from_str(&data).unwrap();
30
31        assert_eq!(json_value["name"], "project_root");
32        assert_eq!(json_value["type"], "TreeNode");
33        assert_eq!(json_value["children"].as_array().unwrap().len(), 2);
34        assert_eq!(json_value["children"][0]["name"], "src");
35        assert_eq!(
36            json_value["children"][0]["children"]
37                .as_array()
38                .unwrap()
39                .len(),
40            1
41        );
42    }
43
44    #[test]
45    fn test_treenode_from_json_data() {
46        // Test TreeNode from_json_data method
47        let original_root = TreeNode::new("filesystem_root");
48        let bin_folder = TreeNode::new("bin");
49        let lib_folder = TreeNode::new("lib");
50        let app_file = TreeNode::new("app.exe");
51        let config_file = TreeNode::new("config.dll");
52
53        original_root.add(&bin_folder);
54        original_root.add(&lib_folder);
55        bin_folder.add(&app_file);
56        lib_folder.add(&config_file);
57
58        let data = original_root.to_json_data().unwrap();
59        let restored_root = TreeNode::from_json_data(&data).unwrap();
60
61        assert_eq!(restored_root.name(), "filesystem_root");
62        assert_eq!(restored_root.children().len(), 2);
63        assert_eq!(restored_root.children()[0].name(), "bin");
64        assert_eq!(restored_root.children()[0].children().len(), 1);
65    }
66
67    #[test]
68    fn test_treenode_add() {
69        // Test TreeNode add method.
70        let parent = TreeNode::new("parent");
71        let child = TreeNode::new("child");
72        parent.add(&child);
73        assert_eq!(parent.children().len(), 1);
74        assert_eq!(child.parent().unwrap(), parent);
75    }
76
77    #[test]
78    fn test_treenode_remove() {
79        // Test TreeNode remove method
80        let parent = TreeNode::new("parent");
81        let child = TreeNode::new("child");
82
83        parent.add(&child);
84        parent.remove(&child);
85
86        assert_eq!(parent.children().len(), 0);
87        assert!(child.parent().is_none());
88    }
89
90    #[test]
91    fn test_treenode_traverse() {
92        // Test TreeNode traverse method
93        let root = TreeNode::new("root");
94        let child = TreeNode::new("child");
95        root.add(&child);
96        let nodes = root.traverse("depthfirst", "preorder");
97        assert_eq!(nodes.len(), 2);
98        assert_eq!(nodes[0], root);
99    }
100
101    #[test]
102    fn test_tree_constructor() {
103        // Test Tree constructor
104        let tree = Tree::new("my_tree");
105        assert_eq!(tree.name, "my_tree");
106        assert!(tree.root().is_none());
107    }
108
109    #[test]
110    fn test_tree_to_json_data() {
111        // Test Tree to_json_data method
112        let mut tree = Tree::new("object_hierarchy");
113        let point1 = Point::new(1.0, 2.0, 3.0);
114        let point2 = Point::new(4.0, 5.0, 6.0);
115        let point3 = Point::new(7.0, 8.0, 9.0);
116        let point4 = Point::new(10.0, 11.0, 12.0);
117
118        let root_node = TreeNode::new(&point1.guid.to_string());
119        let child1 = TreeNode::new(&point2.guid.to_string());
120        let child2 = TreeNode::new(&point3.guid.to_string());
121        let grandchild = TreeNode::new(&point4.guid.to_string());
122
123        tree.add(&root_node, None);
124        tree.add(&child1, Some(&root_node));
125        tree.add(&child2, Some(&root_node));
126        tree.add(&grandchild, Some(&child1));
127
128        let data = tree.to_json_data().unwrap();
129        let json_value: serde_json::Value = serde_json::from_str(&data).unwrap();
130
131        assert_eq!(json_value["name"], "object_hierarchy");
132        assert_eq!(json_value["type"], "Tree");
133        assert_eq!(json_value["root"]["name"], point1.guid.to_string());
134        assert_eq!(json_value["root"]["children"].as_array().unwrap().len(), 2);
135    }
136
137    #[test]
138    fn test_tree_from_json_data() {
139        // Test Tree from_json_data method
140        let mut original_tree = Tree::new("spatial_hierarchy");
141        let point1 = Point::new(100.0, 200.0, 300.0);
142        let point2 = Point::new(400.0, 500.0, 600.0);
143        let point3 = Point::new(700.0, 800.0, 900.0);
144
145        let root = TreeNode::new(&point1.guid.to_string());
146        let child1 = TreeNode::new(&point2.guid.to_string());
147        let child2 = TreeNode::new(&point3.guid.to_string());
148
149        original_tree.add(&root, None);
150        original_tree.add(&child1, Some(&root));
151        original_tree.add(&child2, Some(&root));
152
153        let data = original_tree.to_json_data().unwrap();
154        let restored_tree = Tree::from_json_data(&data).unwrap();
155
156        assert_eq!(restored_tree.name, "spatial_hierarchy");
157        assert_eq!(
158            restored_tree.root().unwrap().name(),
159            point1.guid.to_string()
160        );
161        assert_eq!(restored_tree.nodes().len(), 3);
162    }
163
164    #[test]
165    fn test_tree_to_json_from_json() {
166        // Test Tree file I/O with to_json and from_json
167        let mut tree = Tree::new("my_tree");
168        let point1 = Point::new(0.0, 0.0, 0.0);
169        let point2 = Point::new(1.0, 1.0, 1.0);
170        let point3 = Point::new(2.0, 2.0, 2.0);
171        let point4 = Point::new(3.0, 3.0, 3.0);
172
173        let root = TreeNode::new(&point1.guid.to_string());
174        let branch1 = TreeNode::new(&point2.guid.to_string());
175        let branch2 = TreeNode::new(&point3.guid.to_string());
176        let leaf = TreeNode::new(&point4.guid.to_string());
177
178        tree.add(&root, None);
179        tree.add(&branch1, Some(&root));
180        tree.add(&branch2, Some(&root));
181        tree.add(&leaf, Some(&branch1));
182
183        let filename = "test_tree.json";
184
185        tree.to_json(filename).unwrap();
186        let loaded_tree = Tree::from_json(filename).unwrap();
187
188        assert_eq!(loaded_tree.name, tree.name);
189        assert_eq!(
190            loaded_tree.root().unwrap().name(),
191            tree.root().unwrap().name()
192        );
193        assert_eq!(loaded_tree.nodes().len(), tree.nodes().len());
194    }
195
196    #[test]
197    fn test_tree_add() {
198        // Test Tree add method
199        let mut tree = Tree::new("my_tree");
200        let root = TreeNode::new("root");
201        tree.add(&root, None);
202        assert_eq!(tree.root().unwrap(), root);
203        assert_eq!(tree.nodes().len(), 1);
204    }
205
206    #[test]
207    fn test_tree_remove() {
208        // Test Tree remove method
209        let mut tree = Tree::new("my_tree");
210        let root = TreeNode::new("root");
211
212        tree.add(&root, None);
213        tree.remove(&root);
214
215        assert!(tree.root().is_none());
216    }
217
218    #[test]
219    fn test_tree_get_node_by_name() {
220        // Test Tree get_node_by_name method
221        let mut tree = Tree::new("my_tree");
222        let root = TreeNode::new("root");
223        tree.add(&root, None);
224        let found = tree.get_node_by_name("root");
225        assert_eq!(found.unwrap(), root);
226    }
227}