Index: ui/views/widget/native_widget_mac_accessibility_unittest.mm |
diff --git a/ui/views/widget/native_widget_mac_accessibility_unittest.mm b/ui/views/widget/native_widget_mac_accessibility_unittest.mm |
index 8f224aa37768d8d07e59c3ae67f668a1fe1c1b1e..8cfc4b5c8383a58547f32be16aca9f35428438dd 100644 |
--- a/ui/views/widget/native_widget_mac_accessibility_unittest.mm |
+++ b/ui/views/widget/native_widget_mac_accessibility_unittest.mm |
@@ -14,6 +14,7 @@ |
#import "ui/accessibility/platform/ax_platform_node_mac.h" |
#include "ui/base/ime/text_input_type.h" |
#import "ui/gfx/mac/coordinate_conversion.h" |
+#include "ui/views/accessibility/native_view_accessibility.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/textfield/textfield.h" |
#include "ui/views/test/widget_test.h" |
@@ -34,7 +35,10 @@ NSString* const kTestTitle = @"Test textfield"; |
class FlexibleRoleTestView : public View { |
public: |
- explicit FlexibleRoleTestView(ui::AXRole role) : role_(role) {} |
+ explicit FlexibleRoleTestView(ui::AXRole role) : role_(role) { |
+ SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); |
+ } |
+ |
void set_role(ui::AXRole role) { role_ = role; } |
// Add a child view and resize to fit the child. |
@@ -111,7 +115,7 @@ TEST_F(NativeWidgetMacAccessibilityTest, ChildrenAttribute) { |
const size_t kNumChildren = 3; |
for (size_t i = 0; i < kNumChildren; ++i) { |
- // Make sure the labels won't interfere with the hit test. |
+ // Add children sized 0x0 to ensure they won't interfere with the hit tests. |
AddChildTextfield(gfx::Size()); |
} |
@@ -130,12 +134,14 @@ TEST_F(NativeWidgetMacAccessibilityTest, ChildrenAttribute) { |
TEST_F(NativeWidgetMacAccessibilityTest, ParentAttribute) { |
Textfield* child = AddChildTextfield(widget()->GetContentsView()->size()); |
- // Views with Widget parents will have a NSWindow parent. |
- EXPECT_NSEQ( |
- NSAccessibilityWindowRole, |
- [AttributeValueAtMidpoint(NSAccessibilityParentAttribute) AXRole]); |
+ // Views with Widget parents will have a RootView (BridgedContentView) parent, |
+ // which doesn't use the legacy NSAccessibility Informal Protocol Reference, |
+ // so retrieve the AXRole via accessibilityAttributeValue instead. |
+ EXPECT_NSEQ(NSAccessibilityWindowRole, |
+ [AttributeValueAtMidpoint(NSAccessibilityParentAttribute) |
+ accessibilityAttributeValue:NSAccessibilityRoleAttribute]); |
- // Views with non-Widget parents will have the role of the parent view. |
+ // Children of other Views will report their View parent's role. |
widget()->GetContentsView()->RemoveChildView(child); |
FlexibleRoleTestView* parent = new FlexibleRoleTestView(ui::AX_ROLE_GROUP); |
parent->FitBoundsToNewChild(child); |
@@ -146,9 +152,9 @@ TEST_F(NativeWidgetMacAccessibilityTest, ParentAttribute) { |
// Test an ignored role parent is skipped in favor of the grandparent. |
parent->set_role(ui::AX_ROLE_IGNORED); |
- EXPECT_NSEQ( |
- NSAccessibilityWindowRole, |
- [AttributeValueAtMidpoint(NSAccessibilityParentAttribute) AXRole]); |
+ EXPECT_NSEQ(NSAccessibilityWindowRole, |
+ [AttributeValueAtMidpoint(NSAccessibilityParentAttribute) |
+ accessibilityAttributeValue:NSAccessibilityRoleAttribute]); |
} |
// Test for NSAccessibilityPositionAttribute, including on Widget movement |
@@ -167,11 +173,22 @@ TEST_F(NativeWidgetMacAccessibilityTest, PositionAttribute) { |
valueWithPoint:gfx::ScreenPointToNSPoint(new_bounds.bottom_left())]; |
EXPECT_NSEQ(widget_origin, |
AttributeValueAtMidpoint(NSAccessibilityPositionAttribute)); |
+ |
+ // Check the attribute is correct for a View. |
+ Textfield* textfield = AddChildTextfield(gfx::Size(70, 70)); |
+ widget_origin = [NSValue |
+ valueWithPoint:gfx::ScreenPointToNSPoint( |
+ textfield->GetBoundsInScreen().bottom_left())]; |
+ EXPECT_NSEQ(NSAccessibilityTextFieldRole, |
+ AttributeValueAtMidpoint(NSAccessibilityRoleAttribute)); |
+ EXPECT_NSEQ(widget_origin, |
+ AttributeValueAtMidpoint(NSAccessibilityPositionAttribute)); |
} |
// Test for NSAccessibilityHelpAttribute. |
TEST_F(NativeWidgetMacAccessibilityTest, HelpAttribute) { |
Label* label = new Label(base::SysNSStringToUTF16(kTestPlaceholderText)); |
+ label->SetFocusBehavior(ClientView::FocusBehavior::ACCESSIBLE_ONLY); |
label->SetSize(GetWidgetBounds().size()); |
EXPECT_NSEQ(nil, AttributeValueAtMidpoint(NSAccessibilityHelpAttribute)); |
label->SetTooltipText(base::SysNSStringToUTF16(kTestPlaceholderText)); |
@@ -204,6 +221,9 @@ TEST_F(NativeWidgetMacAccessibilityTest, TextfieldGenericAttributes) { |
// NSAccessibilityEnabledAttribute. |
textfield->SetEnabled(false); |
+ // Disabled items should be unfocusable but shouldn't be ignored. |
+ EXPECT_FALSE(textfield->IsAccessibilityFocusable()); |
+ EXPECT_FALSE(textfield->GetNativeViewAccessibility()->IsIgnored()); |
EXPECT_EQ(NO, [AttributeValueAtMidpoint(NSAccessibilityEnabledAttribute) |
boolValue]); |
textfield->SetEnabled(true); |