1#[cfg(test)]
2mod node {
3 use taffy::geometry::*;
4 use taffy::node::{MeasureFunc, Taffy};
5 use taffy::style::*;
6
7 #[test]
8 fn children() {
9 let mut taffy = Taffy::new();
10 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
11 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
12 let node = taffy.new_node(Style::default(), &[child1, child2]).unwrap();
13
14 assert_eq!(taffy.child_count(node).unwrap(), 2);
15 assert_eq!(taffy.children(node).unwrap()[0], child1);
16 assert_eq!(taffy.children(node).unwrap()[1], child2);
17 }
18
19 #[test]
20 fn set_measure() {
21 let mut taffy = Taffy::new();
22 let node =
23 taffy.new_leaf(Style::default(), MeasureFunc::Raw(|_| Size { width: 200.0, height: 200.0 })).unwrap();
24 taffy.compute_layout(node, Size::undefined()).unwrap();
25 assert_eq!(taffy.layout(node).unwrap().size.width, 200.0);
26
27 taffy.set_measure(node, Some(MeasureFunc::Raw(|_| Size { width: 100.0, height: 100.0 }))).unwrap();
28 taffy.compute_layout(node, Size::undefined()).unwrap();
29 assert_eq!(taffy.layout(node).unwrap().size.width, 100.0);
30 }
31
32 #[test]
33 fn add_child() {
34 let mut taffy = Taffy::new();
35 let node = taffy.new_node(Style::default(), &[]).unwrap();
36 assert_eq!(taffy.child_count(node).unwrap(), 0);
37
38 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
39 taffy.add_child(node, child1).unwrap();
40 assert_eq!(taffy.child_count(node).unwrap(), 1);
41
42 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
43 taffy.add_child(node, child2).unwrap();
44 assert_eq!(taffy.child_count(node).unwrap(), 2);
45 }
46
47 #[test]
48 fn remove_child() {
49 let mut taffy = Taffy::new();
50
51 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
52 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
53
54 let node = taffy.new_node(Style::default(), &[child1, child2]).unwrap();
55 assert_eq!(taffy.child_count(node).unwrap(), 2);
56
57 taffy.remove_child(node, child1).unwrap();
58 assert_eq!(taffy.child_count(node).unwrap(), 1);
59 assert_eq!(taffy.children(node).unwrap()[0], child2);
60
61 taffy.remove_child(node, child2).unwrap();
62 assert_eq!(taffy.child_count(node).unwrap(), 0);
63 }
64
65 #[test]
66 fn remove_child_at_index() {
67 let mut taffy = Taffy::new();
68
69 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
70 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
71
72 let node = taffy.new_node(Style::default(), &[child1, child2]).unwrap();
73 assert_eq!(taffy.child_count(node).unwrap(), 2);
74
75 taffy.remove_child_at_index(node, 0).unwrap();
76 assert_eq!(taffy.child_count(node).unwrap(), 1);
77 assert_eq!(taffy.children(node).unwrap()[0], child2);
78
79 taffy.remove_child_at_index(node, 0).unwrap();
80 assert_eq!(taffy.child_count(node).unwrap(), 0);
81 }
82
83 #[test]
84 fn replace_child_at_index() {
85 let mut taffy = Taffy::new();
86
87 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
88 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
89
90 let node = taffy.new_node(Style::default(), &[child1]).unwrap();
91 assert_eq!(taffy.child_count(node).unwrap(), 1);
92 assert_eq!(taffy.children(node).unwrap()[0], child1);
93
94 taffy.replace_child_at_index(node, 0, child2).unwrap();
95 assert_eq!(taffy.child_count(node).unwrap(), 1);
96 assert_eq!(taffy.children(node).unwrap()[0], child2);
97 }
98
99 #[test]
100 fn remove() {
101 let mut taffy = Taffy::new();
102
103 let style2 = Style { flex_direction: FlexDirection::Column, ..Style::default() };
104
105 // Build a linear tree layout: <0> <- <1> <- <2>
106 let node2 = taffy.new_node(style2, &[]).unwrap();
107 let node1 = taffy.new_node(Style::default(), &[node2]).unwrap();
108 let node0 = taffy.new_node(Style::default(), &[node1]).unwrap();
109
110 assert_eq!(taffy.children(node0).unwrap().as_slice(), &[node1]);
111
112 // Disconnect the tree: <0> <2>
113 taffy.remove(node1);
114
115 assert!(taffy.style(node1).is_err());
116
117 assert!(taffy.children(node0).unwrap().is_empty());
118 assert!(taffy.children(node2).unwrap().is_empty());
119 assert_eq!(taffy.style(node2).unwrap().flex_direction, style2.flex_direction);
120 }
121
122 #[test]
123 fn set_children() {
124 let mut taffy = Taffy::new();
125
126 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
127 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
128 let node = taffy.new_node(Style::default(), &[child1, child2]).unwrap();
129
130 assert_eq!(taffy.child_count(node).unwrap(), 2);
131 assert_eq!(taffy.children(node).unwrap()[0], child1);
132 assert_eq!(taffy.children(node).unwrap()[1], child2);
133
134 let child3 = taffy.new_node(Style::default(), &[]).unwrap();
135 let child4 = taffy.new_node(Style::default(), &[]).unwrap();
136 taffy.set_children(node, &[child3, child4]).unwrap();
137
138 assert_eq!(taffy.child_count(node).unwrap(), 2);
139 assert_eq!(taffy.children(node).unwrap()[0], child3);
140 assert_eq!(taffy.children(node).unwrap()[1], child4);
141 }
142
143 #[test]
144 fn set_style() {
145 let mut taffy = Taffy::new();
146
147 let node = taffy.new_node(Style::default(), &[]).unwrap();
148 assert_eq!(taffy.style(node).unwrap().display, Display::Flex);
149
150 taffy.set_style(node, Style { display: Display::None, ..Style::default() }).unwrap();
151 assert_eq!(taffy.style(node).unwrap().display, Display::None);
152 }
153
154 #[test]
155 fn mark_dirty() {
156 let mut taffy = Taffy::new();
157
158 let child1 = taffy.new_node(Style::default(), &[]).unwrap();
159 let child2 = taffy.new_node(Style::default(), &[]).unwrap();
160 let node = taffy.new_node(Style::default(), &[child1, child2]).unwrap();
161
162 taffy.compute_layout(node, taffy::geometry::Size::undefined()).unwrap();
163
164 assert_eq!(taffy.dirty(child1).unwrap(), false);
165 assert_eq!(taffy.dirty(child2).unwrap(), false);
166 assert_eq!(taffy.dirty(node).unwrap(), false);
167
168 taffy.mark_dirty(node).unwrap();
169 assert_eq!(taffy.dirty(child1).unwrap(), false);
170 assert_eq!(taffy.dirty(child2).unwrap(), false);
171 assert_eq!(taffy.dirty(node).unwrap(), true);
172
173 taffy.compute_layout(node, taffy::geometry::Size::undefined()).unwrap();
174 taffy.mark_dirty(child1).unwrap();
175 assert_eq!(taffy.dirty(child1).unwrap(), true);
176 assert_eq!(taffy.dirty(child2).unwrap(), false);
177 assert_eq!(taffy.dirty(node).unwrap(), true);
178 }
179
180 #[test]
181 fn remove_last_node() {
182 let mut taffy = Taffy::new();
183
184 let parent = taffy.new_node(Style::default(), &[]).unwrap();
185 let child = taffy.new_node(Style::default(), &[]).unwrap();
186 taffy.add_child(parent, child).unwrap();
187
188 taffy.remove(child);
189 taffy.remove(parent);
190 }
191}