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

Side by Side Diff: chrome/browser/ui/views/accessibility/ax_tree_source_views_unittest.cc

Issue 246433012: Extend AXTreeSourceViews to handle aura::Window and views::Widget. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: With tests. Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "ash/test/ash_test_base.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/ui/views/accessibility/ax_tree_source_views.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/accessibility/ax_enums.h"
12 #include "ui/accessibility/ax_node.h"
13 #include "ui/accessibility/ax_serializable_tree.h"
14 #include "ui/accessibility/ax_tree_serializer.h"
15 #include "ui/accessibility/ax_tree_update.h"
16 #include "ui/aura/window.h"
17 #include "ui/views/accessibility/ax_aura_obj_cache.h"
18 #include "ui/views/accessibility/ax_aura_obj_wrapper.h"
19 #include "ui/views/controls/textfield/textfield.h"
20 #include "ui/views/test/views_test_base.h"
21 #include "ui/views/widget/widget.h"
22
23 namespace views {
24
25 // Helper to count the number of nodes in a tree.
26 size_t GetSize(AXAuraObjWrapper* tree) {
27 size_t count = 1;
28
29 std::vector<AXAuraObjWrapper*> out_children;
30 tree->GetChildren(&out_children);
31 for (size_t i = 0; i < out_children.size(); ++i)
32 count += GetSize(out_children[i]);
33
34 return count;
35 }
36
37 class AXTreeSourceViewsTest : public ash::test::AshTestBase {
38 public:
39 AXTreeSourceViewsTest() {}
40 virtual ~AXTreeSourceViewsTest() {}
41
42 virtual void SetUp() OVERRIDE {
43 AshTestBase::SetUp();
44
45 widget_ = new Widget();
46 Widget::InitParams init_params(Widget::InitParams::TYPE_POPUP);
47 init_params.parent = CurrentContext();
48 widget_->Init(init_params);
49
50 content_ = new View();
51 widget_->SetContentsView(content_);
52
53 textfield_ = new Textfield();
54 textfield_->SetText(base::ASCIIToUTF16("Value"));
55 content_->AddChildView(textfield_);
56 }
57
58 protected:
59 Widget* widget_;
60 View* content_;
61 Textfield* textfield_;
62
63 private:
64 DISALLOW_COPY_AND_ASSIGN(AXTreeSourceViewsTest);
65 };
66
67 TEST_F(AXTreeSourceViewsTest, SimpleAccessers) {
68 AXTreeSourceViews ax_tree;
69 ASSERT_TRUE(ax_tree.GetRoot());
70 ASSERT_EQ(0, ax_tree.GetRoot()->GetID());
71
72 AXAuraObjWrapper* content =
73 AXAuraObjCache::GetInstance()->GetOrCreate(content_);
74 std::vector<AXAuraObjWrapper*> content_children;
75 ax_tree.GetChildren(content, &content_children);
76 ASSERT_EQ(1U, content_children.size());
77
78 AXAuraObjWrapper* textfield = content_children[0];
79 std::vector<AXAuraObjWrapper*> textfield_children;
80 ax_tree.GetChildren(textfield, &textfield_children);
81 ASSERT_EQ(0U, textfield_children.size());
82
83 ASSERT_EQ(content, textfield->GetParent());
84
85 AXAuraObjWrapper* root_finder = content;
86 AXAuraObjWrapper* test_root = NULL;
87
88 while ((root_finder = ax_tree.GetParent(root_finder)))
89 test_root = root_finder;
90
91 ASSERT_EQ(ax_tree.GetRoot(), test_root);
92 }
93
94 TEST_F(AXTreeSourceViewsTest, SimpleSerialization) {
95 AXTreeSourceViews ax_tree;
96 ui::AXTreeSerializer<AXAuraObjWrapper*> ax_serializer(&ax_tree);
97 ui::AXTreeUpdate out_update;
98
99 // This is the initial serialization.
100 ax_serializer.SerializeChanges(ax_tree.GetRoot(), &out_update);
101
102 // We should get an update per node.
103 ASSERT_EQ(GetSize(ax_tree.GetRoot()), out_update.nodes.size());
104
105 // Try removing some child views and re-adding.
106 content_->RemoveAllChildViews(false);
107 content_->AddChildView(textfield_);
108
109 // Grab the textfield since serialization only walks up the tree (not down
110 // from root).
111 AXAuraObjWrapper* textfield_wrapper =
112 AXAuraObjCache::GetInstance()->GetOrCreate(textfield_);
113
114 // Now, re-serialize.
115 ui::AXTreeUpdate out_update2;
116 ax_serializer.SerializeChanges(textfield_wrapper, &out_update2);
117
118 // We should have far fewer updates this time around.
119 ASSERT_EQ(2U, out_update2.nodes.size());
120 ASSERT_EQ(ui::AX_ROLE_CLIENT,
121 out_update2.nodes[0].role);
122
123 ASSERT_EQ(textfield_wrapper->GetID(), out_update2.nodes[1].id);
124 ASSERT_EQ(ui::AX_ROLE_TEXT_FIELD,
125 out_update2.nodes[1].role);
126 }
127
128 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698