OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/services/public/cpp/view_manager/view_tree_node.h" | 5 #include "mojo/services/public/cpp/view_manager/view_tree_node.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" | 8 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" |
9 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h" | 9 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 | 11 |
12 namespace mojo { | 12 namespace mojo { |
13 namespace services { | 13 namespace services { |
14 namespace view_manager { | 14 namespace view_manager { |
15 | 15 |
16 // ViewTreeNode ---------------------------------------------------------------- | 16 // ViewTreeNode ---------------------------------------------------------------- |
17 | 17 |
18 typedef testing::Test ViewTreeNodeTest; | 18 typedef testing::Test ViewTreeNodeTest; |
19 | 19 |
| 20 // Subclass with public ctor/dtor. |
| 21 class TestViewTreeNode : public ViewTreeNode { |
| 22 public: |
| 23 TestViewTreeNode() {} |
| 24 ~TestViewTreeNode() {} |
| 25 |
| 26 private: |
| 27 DISALLOW_COPY_AND_ASSIGN(TestViewTreeNode); |
| 28 }; |
| 29 |
20 TEST_F(ViewTreeNodeTest, AddChild) { | 30 TEST_F(ViewTreeNodeTest, AddChild) { |
21 ViewTreeNode v1; | 31 TestViewTreeNode v1; |
22 ViewTreeNode* v11 = new ViewTreeNode; | 32 TestViewTreeNode v11; |
23 v1.AddChild(v11); | 33 v1.AddChild(&v11); |
24 EXPECT_EQ(1U, v1.children().size()); | 34 EXPECT_EQ(1U, v1.children().size()); |
25 } | 35 } |
26 | 36 |
27 TEST_F(ViewTreeNodeTest, RemoveChild) { | 37 TEST_F(ViewTreeNodeTest, RemoveChild) { |
28 ViewTreeNode v1; | 38 TestViewTreeNode v1; |
29 ViewTreeNode* v11 = new ViewTreeNode; | 39 TestViewTreeNode v11; |
30 v1.AddChild(v11); | 40 v1.AddChild(&v11); |
31 EXPECT_EQ(1U, v1.children().size()); | 41 EXPECT_EQ(1U, v1.children().size()); |
32 v1.RemoveChild(v11); | 42 v1.RemoveChild(&v11); |
33 EXPECT_EQ(0U, v1.children().size()); | 43 EXPECT_EQ(0U, v1.children().size()); |
34 } | 44 } |
35 | 45 |
36 TEST_F(ViewTreeNodeTest, Reparent) { | 46 TEST_F(ViewTreeNodeTest, Reparent) { |
37 ViewTreeNode v1; | 47 TestViewTreeNode v1; |
38 ViewTreeNode v2; | 48 TestViewTreeNode v2; |
39 ViewTreeNode* v11 = new ViewTreeNode; | 49 TestViewTreeNode v11; |
40 v1.AddChild(v11); | 50 v1.AddChild(&v11); |
41 EXPECT_EQ(1U, v1.children().size()); | 51 EXPECT_EQ(1U, v1.children().size()); |
42 v2.AddChild(v11); | 52 v2.AddChild(&v11); |
43 EXPECT_EQ(1U, v2.children().size()); | 53 EXPECT_EQ(1U, v2.children().size()); |
44 EXPECT_EQ(0U, v1.children().size()); | 54 EXPECT_EQ(0U, v1.children().size()); |
45 } | 55 } |
46 | 56 |
47 TEST_F(ViewTreeNodeTest, Contains) { | 57 TEST_F(ViewTreeNodeTest, Contains) { |
48 ViewTreeNode v1; | 58 TestViewTreeNode v1; |
49 | 59 |
50 // Direct descendant. | 60 // Direct descendant. |
51 ViewTreeNode* v11 = new ViewTreeNode; | 61 TestViewTreeNode v11; |
52 v1.AddChild(v11); | 62 v1.AddChild(&v11); |
53 EXPECT_TRUE(v1.Contains(v11)); | 63 EXPECT_TRUE(v1.Contains(&v11)); |
54 | 64 |
55 // Indirect descendant. | 65 // Indirect descendant. |
56 ViewTreeNode* v111 = new ViewTreeNode; | 66 TestViewTreeNode v111; |
57 v11->AddChild(v111); | 67 v11.AddChild(&v111); |
58 EXPECT_TRUE(v1.Contains(v111)); | 68 EXPECT_TRUE(v1.Contains(&v111)); |
59 } | 69 } |
60 | 70 |
61 TEST_F(ViewTreeNodeTest, GetChildById) { | 71 TEST_F(ViewTreeNodeTest, GetChildById) { |
62 ViewTreeNode v1; | 72 TestViewTreeNode v1; |
63 ViewTreeNodePrivate(&v1).set_id(1); | 73 ViewTreeNodePrivate(&v1).set_id(1); |
64 ViewTreeNode v11; | 74 TestViewTreeNode v11; |
65 ViewTreeNodePrivate(&v11).set_id(11); | 75 ViewTreeNodePrivate(&v11).set_id(11); |
66 v1.AddChild(&v11); | 76 v1.AddChild(&v11); |
67 ViewTreeNode v111; | 77 TestViewTreeNode v111; |
68 ViewTreeNodePrivate(&v111).set_id(111); | 78 ViewTreeNodePrivate(&v111).set_id(111); |
69 v11.AddChild(&v111); | 79 v11.AddChild(&v111); |
70 | 80 |
71 // Find direct & indirect descendents. | 81 // Find direct & indirect descendents. |
72 EXPECT_EQ(&v11, v1.GetChildById(v11.id())); | 82 EXPECT_EQ(&v11, v1.GetChildById(v11.id())); |
73 EXPECT_EQ(&v111, v1.GetChildById(v111.id())); | 83 EXPECT_EQ(&v111, v1.GetChildById(v111.id())); |
74 } | 84 } |
75 | 85 |
76 // ViewTreeNodeObserver -------------------------------------------------------- | 86 // ViewTreeNodeObserver -------------------------------------------------------- |
77 | 87 |
(...skipping 30 matching lines...) Expand all Loading... |
108 } | 118 } |
109 | 119 |
110 ViewTreeNode* observee_; | 120 ViewTreeNode* observee_; |
111 std::vector<TreeChangeParams> received_params_; | 121 std::vector<TreeChangeParams> received_params_; |
112 | 122 |
113 DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver); | 123 DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver); |
114 }; | 124 }; |
115 | 125 |
116 // Adds/Removes v11 to v1. | 126 // Adds/Removes v11 to v1. |
117 TEST_F(ViewTreeNodeObserverTest, TreeChange_SimpleAddRemove) { | 127 TEST_F(ViewTreeNodeObserverTest, TreeChange_SimpleAddRemove) { |
118 ViewTreeNode v1; | 128 TestViewTreeNode v1; |
119 TreeChangeObserver o1(&v1); | 129 TreeChangeObserver o1(&v1); |
120 EXPECT_TRUE(o1.received_params().empty()); | 130 EXPECT_TRUE(o1.received_params().empty()); |
121 | 131 |
122 ViewTreeNode v11; | 132 TestViewTreeNode v11; |
123 v11.set_owned_by_parent(false); | |
124 TreeChangeObserver o11(&v11); | 133 TreeChangeObserver o11(&v11); |
125 EXPECT_TRUE(o11.received_params().empty()); | 134 EXPECT_TRUE(o11.received_params().empty()); |
126 | 135 |
127 // Add. | 136 // Add. |
128 | 137 |
129 v1.AddChild(&v11); | 138 v1.AddChild(&v11); |
130 | 139 |
131 EXPECT_EQ(1U, o1.received_params().size()); | 140 EXPECT_EQ(1U, o1.received_params().size()); |
132 ViewTreeNodeObserver::TreeChangeParams p1; | 141 ViewTreeNodeObserver::TreeChangeParams p1; |
133 p1.target = &v11; | 142 p1.target = &v11; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 } | 180 } |
172 | 181 |
173 // Creates these two trees: | 182 // Creates these two trees: |
174 // v1 | 183 // v1 |
175 // +- v11 | 184 // +- v11 |
176 // v111 | 185 // v111 |
177 // +- v1111 | 186 // +- v1111 |
178 // +- v1112 | 187 // +- v1112 |
179 // Then adds/removes v111 from v11. | 188 // Then adds/removes v111 from v11. |
180 TEST_F(ViewTreeNodeObserverTest, TreeChange_NestedAddRemove) { | 189 TEST_F(ViewTreeNodeObserverTest, TreeChange_NestedAddRemove) { |
181 ViewTreeNode v1, v11, v111, v1111, v1112; | 190 TestViewTreeNode v1, v11, v111, v1111, v1112; |
182 | 191 |
183 // Root tree. | 192 // Root tree. |
184 v11.set_owned_by_parent(false); | |
185 v1.AddChild(&v11); | 193 v1.AddChild(&v11); |
186 | 194 |
187 // Tree to be attached. | 195 // Tree to be attached. |
188 v111.set_owned_by_parent(false); | |
189 v1111.set_owned_by_parent(false); | |
190 v111.AddChild(&v1111); | 196 v111.AddChild(&v1111); |
191 v1112.set_owned_by_parent(false); | |
192 v111.AddChild(&v1112); | 197 v111.AddChild(&v1112); |
193 | 198 |
194 TreeChangeObserver o1(&v1), o11(&v11), o111(&v111), o1111(&v1111), | 199 TreeChangeObserver o1(&v1), o11(&v11), o111(&v111), o1111(&v1111), |
195 o1112(&v1112); | 200 o1112(&v1112); |
196 ViewTreeNodeObserver::TreeChangeParams p1, p11, p111, p1111, p1112; | 201 ViewTreeNodeObserver::TreeChangeParams p1, p11, p111, p1111, p1112; |
197 | 202 |
198 // Add. | 203 // Add. |
199 | 204 |
200 v11.AddChild(&v111); | 205 v11.AddChild(&v111); |
201 | 206 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 EXPECT_EQ(2U, o1112.received_params().size()); | 287 EXPECT_EQ(2U, o1112.received_params().size()); |
283 p1112 = p111; | 288 p1112 = p111; |
284 p1112.receiver = &v1112; | 289 p1112.receiver = &v1112; |
285 p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING; | 290 p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING; |
286 EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front())); | 291 EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front())); |
287 p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED; | 292 p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED; |
288 EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back())); | 293 EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back())); |
289 } | 294 } |
290 | 295 |
291 TEST_F(ViewTreeNodeObserverTest, TreeChange_Reparent) { | 296 TEST_F(ViewTreeNodeObserverTest, TreeChange_Reparent) { |
292 ViewTreeNode v1, v11, v12, v111; | 297 TestViewTreeNode v1, v11, v12, v111; |
293 v11.set_owned_by_parent(false); | |
294 v111.set_owned_by_parent(false); | |
295 v12.set_owned_by_parent(false); | |
296 v1.AddChild(&v11); | 298 v1.AddChild(&v11); |
297 v1.AddChild(&v12); | 299 v1.AddChild(&v12); |
298 v11.AddChild(&v111); | 300 v11.AddChild(&v111); |
299 | 301 |
300 TreeChangeObserver o1(&v1), o11(&v11), o12(&v12), o111(&v111); | 302 TreeChangeObserver o1(&v1), o11(&v11), o12(&v12), o111(&v111); |
301 | 303 |
302 // Reparent. | 304 // Reparent. |
303 v12.AddChild(&v111); | 305 v12.AddChild(&v111); |
304 | 306 |
305 // v1 (root) should see both changing and changed notifications. | 307 // v1 (root) should see both changing and changed notifications. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 p111.receiver = &v111; | 339 p111.receiver = &v111; |
338 p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING; | 340 p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING; |
339 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front())); | 341 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front())); |
340 p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED; | 342 p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED; |
341 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back())); | 343 EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back())); |
342 } | 344 } |
343 | 345 |
344 } // namespace view_manager | 346 } // namespace view_manager |
345 } // namespace services | 347 } // namespace services |
346 } // namespace mojo | 348 } // namespace mojo |
OLD | NEW |