Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(511)

Side by Side Diff: ui/accessibility/ax_tree_unittest.cc

Issue 830943004: Improve the notifications sent from AXTree updates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix win and android compile Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« ui/accessibility/ax_tree.h ('K') | « ui/accessibility/ax_tree.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
OLDNEW
« ui/accessibility/ax_tree.h ('K') | « ui/accessibility/ax_tree.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698