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 if (root_changed) | |
David Tseng
2015/01/23 17:25:39
I think you always want to assign this value (i.e.
dmazzoni
2015/01/23 23:00:17
Done.
| |
40 root_changed_ = true; | |
41 | |
42 for (size_t i = 0; i < changes.size(); ++i) { | |
43 int id = changes[i].node->id(); | |
44 switch (changes[i].type) { | |
45 case NODE_CREATED: | |
46 node_creation_finished_ids_.push_back(id); | |
47 break; | |
48 case SUBTREE_CREATED: | |
49 subtree_creation_finished_ids_.push_back(id); | |
50 break; | |
51 case NODE_CHANGED: | |
52 change_finished_ids_.push_back(id); | |
53 break; | |
54 } | |
55 } | |
33 } | 56 } |
34 | 57 |
35 void OnNodeChangeFinished(AXNode* node) override { | 58 bool root_changed() const { return root_changed_; } |
36 change_finished_ids_.push_back(node->id()); | 59 const std::vector<int32>& deleted_ids() { return deleted_ids_; } |
60 const std::vector<int32>& subtree_deleted_ids() { | |
61 return subtree_deleted_ids_; | |
62 } | |
63 const std::vector<int32>& created_ids() { return created_ids_; } | |
64 const std::vector<int32>& node_creation_finished_ids() { | |
65 return node_creation_finished_ids_; | |
66 } | |
67 const std::vector<int32>& subtree_creation_finished_ids() { | |
68 return subtree_creation_finished_ids_; | |
69 } | |
70 const std::vector<int32>& change_finished_ids() { | |
71 return change_finished_ids_; | |
37 } | 72 } |
38 | 73 |
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: | 74 private: |
75 bool root_changed_; | |
51 std::vector<int32> deleted_ids_; | 76 std::vector<int32> deleted_ids_; |
77 std::vector<int32> subtree_deleted_ids_; | |
52 std::vector<int32> created_ids_; | 78 std::vector<int32> created_ids_; |
53 std::vector<int32> creation_finished_ids_; | |
54 std::vector<int32> changed_ids_; | 79 std::vector<int32> changed_ids_; |
80 std::vector<int32> node_creation_finished_ids_; | |
81 std::vector<int32> subtree_creation_finished_ids_; | |
55 std::vector<int32> change_finished_ids_; | 82 std::vector<int32> change_finished_ids_; |
56 std::vector<int32> new_root_ids_; | |
57 }; | 83 }; |
58 | 84 |
59 } // namespace | 85 } // namespace |
60 | 86 |
61 TEST(AXTreeTest, SerializeSimpleAXTree) { | 87 TEST(AXTreeTest, SerializeSimpleAXTree) { |
62 AXNodeData root; | 88 AXNodeData root; |
63 root.id = 1; | 89 root.id = 1; |
64 root.role = AX_ROLE_ROOT_WEB_AREA; | 90 root.role = AX_ROLE_ROOT_WEB_AREA; |
65 root.state = (1 << AX_STATE_FOCUSABLE) | (1 << AX_STATE_FOCUSED); | 91 root.state = (1 << AX_STATE_FOCUSABLE) | (1 << AX_STATE_FOCUSED); |
66 root.location = gfx::Rect(0, 0, 800, 600); | 92 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); | 279 update.nodes[0].child_ids.push_back(3); |
254 update.nodes[0].child_ids.push_back(2); | 280 update.nodes[0].child_ids.push_back(2); |
255 update.nodes[1].id = 2; | 281 update.nodes[1].id = 2; |
256 update.nodes[2].id = 3; | 282 update.nodes[2].id = 3; |
257 EXPECT_FALSE(tree.Unserialize(update)); | 283 EXPECT_FALSE(tree.Unserialize(update)); |
258 ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error()); | 284 ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error()); |
259 } | 285 } |
260 | 286 |
261 TEST(AXTreeTest, TreeDelegateIsCalled) { | 287 TEST(AXTreeTest, TreeDelegateIsCalled) { |
262 AXTreeUpdate initial_state; | 288 AXTreeUpdate initial_state; |
263 initial_state.nodes.resize(1); | 289 initial_state.nodes.resize(2); |
264 initial_state.nodes[0].id = 1; | 290 initial_state.nodes[0].id = 1; |
265 initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; | 291 initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
292 initial_state.nodes[0].child_ids.push_back(2); | |
293 initial_state.nodes[1].id = 2; | |
266 | 294 |
267 AXTree tree(initial_state); | 295 AXTree tree(initial_state); |
268 AXTreeUpdate update; | 296 AXTreeUpdate update; |
269 update.node_id_to_clear = 1; | 297 update.node_id_to_clear = 1; |
270 update.nodes.resize(2); | 298 update.nodes.resize(2); |
271 update.nodes[0].id = 2; | 299 update.nodes[0].id = 3; |
272 update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; | 300 update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
273 update.nodes[0].child_ids.push_back(3); | 301 update.nodes[0].child_ids.push_back(4); |
274 update.nodes[1].id = 3; | 302 update.nodes[1].id = 4; |
275 | 303 |
276 FakeAXTreeDelegate fake_delegate; | 304 FakeAXTreeDelegate fake_delegate; |
277 tree.SetDelegate(&fake_delegate); | 305 tree.SetDelegate(&fake_delegate); |
278 | 306 |
279 EXPECT_TRUE(tree.Unserialize(update)); | 307 EXPECT_TRUE(tree.Unserialize(update)); |
280 | 308 |
281 ASSERT_EQ(1U, fake_delegate.deleted_ids().size()); | 309 ASSERT_EQ(2U, fake_delegate.deleted_ids().size()); |
282 EXPECT_EQ(1, fake_delegate.deleted_ids()[0]); | 310 EXPECT_EQ(2, fake_delegate.deleted_ids()[0]); |
311 EXPECT_EQ(1, fake_delegate.deleted_ids()[1]); | |
312 | |
313 ASSERT_EQ(1U, fake_delegate.subtree_deleted_ids().size()); | |
314 EXPECT_EQ(1, fake_delegate.subtree_deleted_ids()[0]); | |
283 | 315 |
284 ASSERT_EQ(2U, fake_delegate.created_ids().size()); | 316 ASSERT_EQ(2U, fake_delegate.created_ids().size()); |
285 EXPECT_EQ(2, fake_delegate.created_ids()[0]); | 317 EXPECT_EQ(3, fake_delegate.created_ids()[0]); |
286 EXPECT_EQ(3, fake_delegate.created_ids()[1]); | 318 EXPECT_EQ(4, fake_delegate.created_ids()[1]); |
287 | 319 |
288 ASSERT_EQ(2U, fake_delegate.creation_finished_ids().size()); | 320 ASSERT_EQ(1U, fake_delegate.subtree_creation_finished_ids().size()); |
289 EXPECT_EQ(2, fake_delegate.creation_finished_ids()[0]); | 321 EXPECT_EQ(3, fake_delegate.subtree_creation_finished_ids()[0]); |
290 EXPECT_EQ(3, fake_delegate.creation_finished_ids()[1]); | |
291 | 322 |
292 ASSERT_EQ(1U, fake_delegate.new_root_ids().size()); | 323 ASSERT_EQ(1U, fake_delegate.node_creation_finished_ids().size()); |
293 EXPECT_EQ(2, fake_delegate.new_root_ids()[0]); | 324 EXPECT_EQ(4, fake_delegate.node_creation_finished_ids()[0]); |
325 | |
326 ASSERT_EQ(true, fake_delegate.root_changed()); | |
294 | 327 |
295 tree.SetDelegate(NULL); | 328 tree.SetDelegate(NULL); |
296 } | 329 } |
297 | 330 |
298 } // namespace ui | 331 } // namespace ui |
OLD | NEW |