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