Index: ui/views/accessibility/native_view_accessibility_unittest.cc |
diff --git a/ui/views/accessibility/native_view_accessibility_unittest.cc b/ui/views/accessibility/native_view_accessibility_unittest.cc |
index ba8fa7e04fa5f2dd6a70edb983b7192e6cc587de..25f7a0aaef69a82f8dddb1149344de05a856fbd0 100644 |
--- a/ui/views/accessibility/native_view_accessibility_unittest.cc |
+++ b/ui/views/accessibility/native_view_accessibility_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "ui/views/controls/button/button.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/test/views_test_base.h" |
+#include "ui/views/widget/widget.h" |
namespace views { |
namespace test { |
@@ -36,9 +37,8 @@ class NativeViewAccessibilityTest : public ViewsTestBase { |
void SetUp() override { |
ViewsTestBase::SetUp(); |
- widget_ = new views::Widget; |
- views::Widget::InitParams params = |
- CreateParams(views::Widget::InitParams::TYPE_WINDOW); |
+ widget_ = new Widget; |
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
params.bounds = gfx::Rect(0, 0, 200, 200); |
widget_->Init(params); |
@@ -78,15 +78,25 @@ class NativeViewAccessibilityTest : public ViewsTestBase { |
} |
protected: |
- views::Widget* widget_; |
+ Widget* widget_; |
TestButton* button_; |
std::unique_ptr<NativeViewAccessibility> button_accessibility_; |
Label* label_; |
std::unique_ptr<NativeViewAccessibility> label_accessibility_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NativeViewAccessibilityTest); |
}; |
TEST_F(NativeViewAccessibilityTest, RoleShouldMatch) { |
EXPECT_EQ(ui::AX_ROLE_BUTTON, button_accessibility()->GetData().role); |
+ // Since the label is a subview of |button_|, and the button is keyboard |
+ // focusable, the label is assumed to form part of the button and not have a |
+ // role of its own. |
+ EXPECT_EQ(ui::AX_ROLE_IGNORED, label_accessibility()->GetData().role); |
+ // This will happen for all potentially keyboard-focusable Views with |
+ // non-keyboard-focusable children, so if we make the button unfocusable, the |
+ // label will be allowed to have its own role again. |
+ button_->SetFocusBehavior(View::FocusBehavior::NEVER); |
EXPECT_EQ(ui::AX_ROLE_STATIC_TEXT, label_accessibility()->GetData().role); |
} |
@@ -100,11 +110,21 @@ TEST_F(NativeViewAccessibilityTest, BoundsShouldMatch) { |
} |
TEST_F(NativeViewAccessibilityTest, LabelIsChildOfButton) { |
+ // |button_| is focusable, so |label_| (as its child) should be ignored. |
+ EXPECT_EQ(View::FocusBehavior::ACCESSIBLE_ONLY, button_->focus_behavior()); |
+ EXPECT_EQ(1, button_accessibility()->GetChildCount()); |
+ EXPECT_EQ(button_->GetNativeViewAccessible(), |
+ label_accessibility()->GetParent()); |
+ EXPECT_EQ(ui::AX_ROLE_IGNORED, label_accessibility()->GetData().role); |
+ |
+ // If |button_| is no longer focusable, |label_| should show up again. |
+ button_->SetFocusBehavior(View::FocusBehavior::NEVER); |
EXPECT_EQ(1, button_accessibility()->GetChildCount()); |
EXPECT_EQ(label_->GetNativeViewAccessible(), |
button_accessibility()->ChildAtIndex(0)); |
EXPECT_EQ(button_->GetNativeViewAccessible(), |
label_accessibility()->GetParent()); |
+ EXPECT_NE(ui::AX_ROLE_IGNORED, label_accessibility()->GetData().role); |
} |
// Verify Views with invisible ancestors have AX_STATE_INVISIBLE. |
@@ -158,7 +178,7 @@ class TestNativeViewAccessibility : public NativeViewAccessibilityBase { |
TEST_F(NativeViewAccessibilityTest, CrashOnWidgetDestroyed) { |
std::unique_ptr<Widget> parent_widget(new Widget); |
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
params.bounds = gfx::Rect(50, 50, 650, 650); |
parent_widget->Init(params); |
@@ -189,8 +209,7 @@ class AxTestViewsDelegate : public TestViewsDelegate { |
AxTestViewsDelegate() {} |
~AxTestViewsDelegate() override {} |
- void NotifyAccessibilityEvent(views::View* view, |
- ui::AXEvent event_type) override { |
+ void NotifyAccessibilityEvent(View* view, ui::AXEvent event_type) override { |
AXAuraObjCache* ax = AXAuraObjCache::GetInstance(); |
std::vector<AXAuraObjWrapper*> out_children; |
AXAuraObjWrapper* ax_obj = ax->GetOrCreate(view->GetWidget()); |
@@ -209,7 +228,7 @@ class AXViewTest : public ViewsTestBase { |
std::unique_ptr<TestViewsDelegate> views_delegate( |
new AxTestViewsDelegate()); |
set_views_delegate(std::move(views_delegate)); |
- views::ViewsTestBase::SetUp(); |
+ ViewsTestBase::SetUp(); |
} |
}; |
@@ -218,7 +237,7 @@ class AXViewTest : public ViewsTestBase { |
TEST_F(AXViewTest, LayoutCalledInvalidateRootView) { |
std::unique_ptr<Widget> widget(new Widget); |
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
widget->Init(params); |
widget->Show(); |