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