| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/strings/string_number_conversions.h" | 6 #include "base/strings/string_number_conversions.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "ui/accessibility/ax_node.h" | 8 #include "ui/accessibility/ax_node.h" |
| 9 #include "ui/accessibility/ax_serializable_tree.h" | 9 #include "ui/accessibility/ax_serializable_tree.h" |
| 10 #include "ui/accessibility/ax_tree.h" | 10 #include "ui/accessibility/ax_tree.h" |
| 11 #include "ui/accessibility/ax_tree_serializer.h" | 11 #include "ui/accessibility/ax_tree_serializer.h" |
| 12 | 12 |
| 13 namespace ui { | 13 namespace ui { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 class FakeAXTreeDelegate : public AXTreeDelegate { | 17 class FakeAXTreeDelegate : public AXTreeDelegate { |
| 18 public: | 18 public: |
| 19 FakeAXTreeDelegate() : root_changed_(false) {} |
| 20 |
| 19 void OnNodeWillBeDeleted(AXNode* node) override { | 21 void OnNodeWillBeDeleted(AXNode* node) override { |
| 20 deleted_ids_.push_back(node->id()); | 22 deleted_ids_.push_back(node->id()); |
| 21 } | 23 } |
| 22 | 24 |
| 25 void OnSubtreeWillBeDeleted(AXNode* node) override { |
| 26 subtree_deleted_ids_.push_back(node->id()); |
| 27 } |
| 28 |
| 23 void OnNodeCreated(AXNode* node) override { | 29 void OnNodeCreated(AXNode* node) override { |
| 24 created_ids_.push_back(node->id()); | 30 created_ids_.push_back(node->id()); |
| 25 } | 31 } |
| 26 | 32 |
| 27 void OnNodeChanged(AXNode* node) override { | 33 void OnNodeChanged(AXNode* node) override { |
| 28 changed_ids_.push_back(node->id()); | 34 changed_ids_.push_back(node->id()); |
| 29 } | 35 } |
| 30 | 36 |
| 31 void OnNodeCreationFinished(AXNode* node) override { | 37 void OnAtomicUpdateFinished(bool root_changed, |
| 32 creation_finished_ids_.push_back(node->id()); | 38 const std::vector<Change>& changes) override { |
| 39 root_changed_ = root_changed; |
| 40 |
| 41 for (size_t i = 0; i < changes.size(); ++i) { |
| 42 int id = changes[i].node->id(); |
| 43 switch (changes[i].type) { |
| 44 case NODE_CREATED: |
| 45 node_creation_finished_ids_.push_back(id); |
| 46 break; |
| 47 case SUBTREE_CREATED: |
| 48 subtree_creation_finished_ids_.push_back(id); |
| 49 break; |
| 50 case NODE_CHANGED: |
| 51 change_finished_ids_.push_back(id); |
| 52 break; |
| 53 } |
| 54 } |
| 33 } | 55 } |
| 34 | 56 |
| 35 void OnNodeChangeFinished(AXNode* node) override { | 57 bool root_changed() const { return root_changed_; } |
| 36 change_finished_ids_.push_back(node->id()); | 58 const std::vector<int32>& deleted_ids() { return deleted_ids_; } |
| 59 const std::vector<int32>& subtree_deleted_ids() { |
| 60 return subtree_deleted_ids_; |
| 61 } |
| 62 const std::vector<int32>& created_ids() { return created_ids_; } |
| 63 const std::vector<int32>& node_creation_finished_ids() { |
| 64 return node_creation_finished_ids_; |
| 65 } |
| 66 const std::vector<int32>& subtree_creation_finished_ids() { |
| 67 return subtree_creation_finished_ids_; |
| 68 } |
| 69 const std::vector<int32>& change_finished_ids() { |
| 70 return change_finished_ids_; |
| 37 } | 71 } |
| 38 | 72 |
| 39 void OnRootChanged(AXNode* new_root) override { | |
| 40 new_root_ids_.push_back(new_root->id()); | |
| 41 } | |
| 42 | |
| 43 const std::vector<int32>& deleted_ids() { return deleted_ids_; } | |
| 44 const std::vector<int32>& created_ids() { return created_ids_; } | |
| 45 const std::vector<int32>& creation_finished_ids() { | |
| 46 return creation_finished_ids_; | |
| 47 } | |
| 48 const std::vector<int32>& new_root_ids() { return new_root_ids_; } | |
| 49 | |
| 50 private: | 73 private: |
| 74 bool root_changed_; |
| 51 std::vector<int32> deleted_ids_; | 75 std::vector<int32> deleted_ids_; |
| 76 std::vector<int32> subtree_deleted_ids_; |
| 52 std::vector<int32> created_ids_; | 77 std::vector<int32> created_ids_; |
| 53 std::vector<int32> creation_finished_ids_; | |
| 54 std::vector<int32> changed_ids_; | 78 std::vector<int32> changed_ids_; |
| 79 std::vector<int32> node_creation_finished_ids_; |
| 80 std::vector<int32> subtree_creation_finished_ids_; |
| 55 std::vector<int32> change_finished_ids_; | 81 std::vector<int32> change_finished_ids_; |
| 56 std::vector<int32> new_root_ids_; | |
| 57 }; | 82 }; |
| 58 | 83 |
| 59 } // namespace | 84 } // namespace |
| 60 | 85 |
| 61 TEST(AXTreeTest, SerializeSimpleAXTree) { | 86 TEST(AXTreeTest, SerializeSimpleAXTree) { |
| 62 AXNodeData root; | 87 AXNodeData root; |
| 63 root.id = 1; | 88 root.id = 1; |
| 64 root.role = AX_ROLE_ROOT_WEB_AREA; | 89 root.role = AX_ROLE_ROOT_WEB_AREA; |
| 65 root.state = (1 << AX_STATE_FOCUSABLE) | (1 << AX_STATE_FOCUSED); | 90 root.state = (1 << AX_STATE_FOCUSABLE) | (1 << AX_STATE_FOCUSED); |
| 66 root.location = gfx::Rect(0, 0, 800, 600); | 91 root.location = gfx::Rect(0, 0, 800, 600); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 update.nodes[0].child_ids.push_back(3); | 278 update.nodes[0].child_ids.push_back(3); |
| 254 update.nodes[0].child_ids.push_back(2); | 279 update.nodes[0].child_ids.push_back(2); |
| 255 update.nodes[1].id = 2; | 280 update.nodes[1].id = 2; |
| 256 update.nodes[2].id = 3; | 281 update.nodes[2].id = 3; |
| 257 EXPECT_FALSE(tree.Unserialize(update)); | 282 EXPECT_FALSE(tree.Unserialize(update)); |
| 258 ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error()); | 283 ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error()); |
| 259 } | 284 } |
| 260 | 285 |
| 261 TEST(AXTreeTest, TreeDelegateIsCalled) { | 286 TEST(AXTreeTest, TreeDelegateIsCalled) { |
| 262 AXTreeUpdate initial_state; | 287 AXTreeUpdate initial_state; |
| 263 initial_state.nodes.resize(1); | 288 initial_state.nodes.resize(2); |
| 264 initial_state.nodes[0].id = 1; | 289 initial_state.nodes[0].id = 1; |
| 265 initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; | 290 initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
| 291 initial_state.nodes[0].child_ids.push_back(2); |
| 292 initial_state.nodes[1].id = 2; |
| 266 | 293 |
| 267 AXTree tree(initial_state); | 294 AXTree tree(initial_state); |
| 268 AXTreeUpdate update; | 295 AXTreeUpdate update; |
| 269 update.node_id_to_clear = 1; | 296 update.node_id_to_clear = 1; |
| 270 update.nodes.resize(2); | 297 update.nodes.resize(2); |
| 271 update.nodes[0].id = 2; | 298 update.nodes[0].id = 3; |
| 272 update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; | 299 update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
| 273 update.nodes[0].child_ids.push_back(3); | 300 update.nodes[0].child_ids.push_back(4); |
| 274 update.nodes[1].id = 3; | 301 update.nodes[1].id = 4; |
| 275 | 302 |
| 276 FakeAXTreeDelegate fake_delegate; | 303 FakeAXTreeDelegate fake_delegate; |
| 277 tree.SetDelegate(&fake_delegate); | 304 tree.SetDelegate(&fake_delegate); |
| 278 | 305 |
| 279 EXPECT_TRUE(tree.Unserialize(update)); | 306 EXPECT_TRUE(tree.Unserialize(update)); |
| 280 | 307 |
| 281 ASSERT_EQ(1U, fake_delegate.deleted_ids().size()); | 308 ASSERT_EQ(2U, fake_delegate.deleted_ids().size()); |
| 282 EXPECT_EQ(1, fake_delegate.deleted_ids()[0]); | 309 EXPECT_EQ(2, fake_delegate.deleted_ids()[0]); |
| 310 EXPECT_EQ(1, fake_delegate.deleted_ids()[1]); |
| 311 |
| 312 ASSERT_EQ(1U, fake_delegate.subtree_deleted_ids().size()); |
| 313 EXPECT_EQ(1, fake_delegate.subtree_deleted_ids()[0]); |
| 283 | 314 |
| 284 ASSERT_EQ(2U, fake_delegate.created_ids().size()); | 315 ASSERT_EQ(2U, fake_delegate.created_ids().size()); |
| 285 EXPECT_EQ(2, fake_delegate.created_ids()[0]); | 316 EXPECT_EQ(3, fake_delegate.created_ids()[0]); |
| 286 EXPECT_EQ(3, fake_delegate.created_ids()[1]); | 317 EXPECT_EQ(4, fake_delegate.created_ids()[1]); |
| 287 | 318 |
| 288 ASSERT_EQ(2U, fake_delegate.creation_finished_ids().size()); | 319 ASSERT_EQ(1U, fake_delegate.subtree_creation_finished_ids().size()); |
| 289 EXPECT_EQ(2, fake_delegate.creation_finished_ids()[0]); | 320 EXPECT_EQ(3, fake_delegate.subtree_creation_finished_ids()[0]); |
| 290 EXPECT_EQ(3, fake_delegate.creation_finished_ids()[1]); | |
| 291 | 321 |
| 292 ASSERT_EQ(1U, fake_delegate.new_root_ids().size()); | 322 ASSERT_EQ(1U, fake_delegate.node_creation_finished_ids().size()); |
| 293 EXPECT_EQ(2, fake_delegate.new_root_ids()[0]); | 323 EXPECT_EQ(4, fake_delegate.node_creation_finished_ids()[0]); |
| 324 |
| 325 ASSERT_EQ(true, fake_delegate.root_changed()); |
| 294 | 326 |
| 295 tree.SetDelegate(NULL); | 327 tree.SetDelegate(NULL); |
| 296 } | 328 } |
| 297 | 329 |
| 298 } // namespace ui | 330 } // namespace ui |
| OLD | NEW |