| 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..f7d37366523cccdd5c81caa5954be200be8dc82c 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() const { return mouse_was_pressed_; }
|
| +
|
| // 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,14 +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];
|
| - return value;
|
| + }
|
| +
|
| + id AttributeValueAtMidpoint(NSString* attribute) {
|
| + return [A11yElementAtMidpoint() accessibilityAttributeValue:attribute];
|
| }
|
|
|
| Textfield* AddChildTextfield(const gfx::Size& size) {
|
| @@ -311,14 +321,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 +420,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
|
|
|