| 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 |