virtual_node/
test_utils.rs1use crate::VirtualNode;
4
5impl VirtualNode {
6 pub fn children_recursive<'a>(&'a self) -> Vec<&'a VirtualNode> {
29 let mut descendants: Vec<&'a VirtualNode> = vec![];
30 match self {
31 VirtualNode::Text(_) => {}
32 VirtualNode::Element(element_node) => {
33 for child in element_node.children.iter() {
34 get_descendants(&mut descendants, child);
35 }
36 }
37 }
38
39 descendants.into_iter().collect()
40 }
41}
42
43fn get_descendants<'a>(descendants: &mut Vec<&'a VirtualNode>, node: &'a VirtualNode) {
44 descendants.push(node);
45 match node {
46 VirtualNode::Text(_) => {}
47 VirtualNode::Element(element_node) => {
48 for child in element_node.children.iter() {
49 get_descendants(descendants, child);
50 }
51 }
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58 use crate::VElement;
59
60 #[test]
62 fn children_recursive() {
63 let span = VirtualNode::element("span");
64
65 let mut em = VElement::new("em");
66 em.children.push(span);
67
68 let mut html = VElement::new("div");
69 html.children.push(em.into());
70
71 let html_node = VirtualNode::Element(html);
72
73 assert_eq!(html_node.children_recursive().len(), 2);
74 }
75}