Chromium Code Reviews| 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 3d641d190f9eab41fa0d4a97d726766736902263..26f864a92eda8a86bbc5611f56880c74e988db44 100644 |
| --- a/ui/views/widget/native_widget_mac_accessibility_unittest.mm |
| +++ b/ui/views/widget/native_widget_mac_accessibility_unittest.mm |
| @@ -39,19 +39,27 @@ class FlexibleRoleTestView : public View { |
| // Add a child view and resize to fit the child. |
| void FitBoundsToNewChild(View* view) { |
| - View::AddChildView(view); |
| + AddChildView(view); |
| // Fit the parent widget to the size of the child for accurate hit tests. |
| SetBoundsRect(view->bounds()); |
| } |
| + bool mouse_was_pressed() { return mouse_was_pressed_; } |
|
tapted
2017/02/09 02:45:18
nit: const method
Patti Lor
2017/02/09 23:11:23
Done.
|
| + |
| // View: |
| void GetAccessibleNodeData(ui::AXNodeData* node_data) override { |
| View::GetAccessibleNodeData(node_data); |
| node_data->role = role_; |
| } |
| + bool OnMousePressed(const ui::MouseEvent& event) override { |
| + mouse_was_pressed_ = true; |
| + return false; |
| + } |
| + |
| private: |
| ui::AXRole role_; |
| + bool mouse_was_pressed_ = false; |
| DISALLOW_COPY_AND_ASSIGN(FlexibleRoleTestView); |
| }; |
| @@ -72,13 +80,16 @@ class NativeWidgetMacAccessibilityTest : public test::WidgetTest { |
| test::WidgetTest::TearDown(); |
| } |
| - id AttributeValueAtMidpoint(NSString* attribute) { |
| + id A11yElementAtMidpoint() { |
| // Accessibility hit tests come in Cocoa screen coordinates. |
| NSPoint midpoint_in_screen_ = gfx::ScreenPointToNSPoint( |
| widget_->GetWindowBoundsInScreen().CenterPoint()); |
| - id hit = |
| + return |
| [widget_->GetNativeWindow() accessibilityHitTest:midpoint_in_screen_]; |
| - id value = [hit accessibilityAttributeValue:attribute]; |
| + } |
| + |
| + id AttributeValueAtMidpoint(NSString* attribute) { |
| + id value = [A11yElementAtMidpoint() accessibilityAttributeValue:attribute]; |
|
tapted
2017/02/09 02:45:18
nit: just return? (i.e. |value| not required)
Patti Lor
2017/02/09 23:11:23
Done, thanks!
|
| return value; |
| } |
| @@ -311,14 +322,11 @@ TEST_F(NativeWidgetMacAccessibilityTest, ViewWritableAttributes) { |
| view->SetSize(GetWidgetBounds().size()); |
| widget()->GetContentsView()->AddChildView(view); |
| - // Get the FlexibleRoleTestView accessibility object. |
| - NSPoint midpoint = gfx::ScreenPointToNSPoint(GetWidgetBounds().CenterPoint()); |
| - id ax_node = [widget()->GetNativeWindow() accessibilityHitTest:midpoint]; |
| + // Make sure the accessibility object tested is the correct one. |
| + id ax_node = A11yElementAtMidpoint(); |
| EXPECT_TRUE(ax_node); |
| - |
| - // Make sure it's the correct accessibility object. |
| - id value = [ax_node accessibilityAttributeValue:NSAccessibilityRoleAttribute]; |
| - EXPECT_NSEQ(NSAccessibilityGroupRole, value); |
| + EXPECT_NSEQ(NSAccessibilityGroupRole, |
| + AttributeValueAtMidpoint(NSAccessibilityRoleAttribute)); |
| // Make sure |view| is focusable, then focus/unfocus it. |
| view->SetFocusBehavior(View::FocusBehavior::ALWAYS); |
| @@ -413,4 +421,20 @@ TEST_F(NativeWidgetMacAccessibilityTest, TextfieldWritableAttributes) { |
| textfield->GetSelectedRange()); |
| } |
| +// Test performing a 'click' on Views with clickable roles work. |
| +TEST_F(NativeWidgetMacAccessibilityTest, PressAction) { |
| + FlexibleRoleTestView* view = new FlexibleRoleTestView(ui::AX_ROLE_BUTTON); |
| + widget()->GetContentsView()->AddChildView(view); |
| + view->SetSize(GetWidgetBounds().size()); |
| + |
| + id ax_node = A11yElementAtMidpoint(); |
| + EXPECT_NSEQ(NSAccessibilityButtonRole, |
| + AttributeValueAtMidpoint(NSAccessibilityRoleAttribute)); |
| + |
| + EXPECT_TRUE([[ax_node accessibilityActionNames] |
| + containsObject:NSAccessibilityPressAction]); |
| + [ax_node accessibilityPerformAction:NSAccessibilityPressAction]; |
| + EXPECT_TRUE(view->mouse_was_pressed()); |
| +} |
| + |
| } // namespace views |