1#[cfg(test)]
2mod node {
3 use stretch::node::Node;
4 use stretch::style::*;
5
6 #[test]
7 fn children() {
8 let child1 = Node::new(Style::default(), vec![]);
9 let child2 = Node::new(Style::default(), vec![]);
10 let node = Node::new(Style::default(), vec![&child1, &child2]);
11
12 assert_eq!(node.children().len(), 2);
13 assert_eq!(node.children()[0], child1);
14 assert_eq!(node.children()[1], child2);
15 }
16
17 #[test]
18 fn add_child() {
19 let mut node = Node::new(Style::default(), vec![]);
20 assert_eq!(node.children().len(), 0);
21
22 node.add_child(&Node::new(Style::default(), vec![]));
23 assert_eq!(node.children().len(), 1);
24
25 node.add_child(&Node::new(Style::default(), vec![]));
26 assert_eq!(node.children().len(), 2);
27 }
28
29 #[test]
30 fn remove_child() {
31 let child1 = Node::new(Style::default(), vec![]);
32 let child2 = Node::new(Style::default(), vec![]);
33
34 let mut node = Node::new(Style::default(), vec![&child1, &child2]);
35 assert_eq!(node.children().len(), 2);
36
37 node.remove_child(&child1);
38 assert_eq!(node.children().len(), 1);
39 assert_eq!(node.children()[0], child2);
40
41 node.remove_child(&child2);
42 assert_eq!(node.children().len(), 0);
43 }
44
45 #[test]
46 fn remove_child_at_index() {
47 let child1 = Node::new(Style::default(), vec![]);
48 let child2 = Node::new(Style::default(), vec![]);
49
50 let mut node = Node::new(Style::default(), vec![&child1, &child2]);
51 assert_eq!(node.children().len(), 2);
52
53 node.remove_child_at_index(0);
54 assert_eq!(node.children().len(), 1);
55 assert_eq!(node.children()[0], child2);
56
57 node.remove_child_at_index(0);
58 assert_eq!(node.children().len(), 0);
59 }
60
61 #[test]
62 fn replace_child_at_index() {
63 let child1 = Node::new(Style::default(), vec![]);
64 let child2 = Node::new(Style::default(), vec![]);
65
66 let mut node = Node::new(Style::default(), vec![&child1]);
67 assert_eq!(node.children().len(), 1);
68 assert_eq!(node.children()[0], child1);
69
70 node.replace_child_at_index(0, &child2);
71 assert_eq!(node.children().len(), 1);
72 assert_eq!(node.children()[0], child2);
73 }
74
75 #[test]
76 fn set_children() {
77 let child1 = Node::new(Style::default(), vec![]);
78 let child2 = Node::new(Style::default(), vec![]);
79 let mut node = Node::new(Style::default(), vec![&child1, &child2]);
80
81 assert_eq!(node.children().len(), 2);
82 assert_eq!(node.children()[0], child1);
83 assert_eq!(node.children()[1], child2);
84
85 let child3 = Node::new(Style::default(), vec![]);
86 let child4 = Node::new(Style::default(), vec![]);
87 node.set_children(vec![&child3, &child4]);
88
89 assert_eq!(node.children().len(), 2);
90 assert_eq!(node.children()[0], child3);
91 assert_eq!(node.children()[1], child4);
92 }
93
94 #[test]
95 fn set_style() {
96 let mut node = Node::new(Style::default(), vec![]);
97 assert_eq!(node.style().display, Display::Flex);
98
99 node.set_style(Style { display: Display::None, ..Style::default() });
100 assert_eq!(node.style().display, Display::None);
101 }
102
103 #[test]
104 fn mark_dirty() {
105 let mut child1 = Node::new(Style::default(), vec![]);
106 let mut child2 = Node::new(Style::default(), vec![]);
107 let mut node = Node::new(Style::default(), vec![&child1, &child2]);
108
109 node.compute_layout(stretch::geometry::Size::undefined()).unwrap();
110
111 assert_eq!(child1.is_dirty(), false);
112 assert_eq!(child2.is_dirty(), false);
113 assert_eq!(node.is_dirty(), false);
114
115 node.mark_dirty();
116 assert_eq!(child1.is_dirty(), false);
117 assert_eq!(child2.is_dirty(), false);
118 assert_eq!(node.is_dirty(), true);
119
120 node.compute_layout(stretch::geometry::Size::undefined()).unwrap();
121 child1.mark_dirty();
122 assert_eq!(child1.is_dirty(), true);
123 assert_eq!(child2.is_dirty(), false);
124 assert_eq!(node.is_dirty(), true);
125 }
126}