blob: e7a5889fd044606a921b7a554b3d9efd40576470 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/ui/a11y/lib/screen_reader/default_action.h"
#include <fuchsia/accessibility/cpp/fidl.h>
#include <lib/sys/cpp/testing/component_context_provider.h>
#include <zircon/types.h>
#include <memory>
#include "src/lib/testing/loop_fixture/test_loop_fixture.h"
#include "src/ui/a11y/bin/a11y_manager/tests/util/util.h"
#include "src/ui/a11y/lib/screen_reader/focus/tests/mocks/mock_a11y_focus_manager.h"
#include "src/ui/a11y/lib/screen_reader/screen_reader_context.h"
#include "src/ui/a11y/lib/screen_reader/tests/mocks/mock_screen_reader_context.h"
#include "src/ui/a11y/lib/screen_reader/tests/screen_reader_action_test_fixture.h"
#include "src/ui/a11y/lib/semantics/tests/mocks/mock_semantic_provider.h"
#include "src/ui/a11y/lib/semantics/tests/mocks/mock_semantics_source.h"
namespace accessibility_test {
namespace {
using fuchsia::accessibility::semantics::Attributes;
using fuchsia::accessibility::semantics::Node;
using fuchsia::accessibility::semantics::Role;
class DefaultActionTest : public ScreenReaderActionTest {
public:
DefaultActionTest() = default;
~DefaultActionTest() = default;
void SetUp() override {
ScreenReaderActionTest::SetUp();
// Update focused node.
mock_a11y_focus_manager()->SetA11yFocus(mock_semantic_provider()->koid(), 0u,
[](bool result) { EXPECT_TRUE(result); });
}
};
// Tests the case when Hit testing results a valid node and OnAccessibilityActionRequested is
// called.
TEST_F(DefaultActionTest, OnAccessibilitActionRequestedCalled) {
// Creating test node to update.
uint32_t node_id = 0;
Node node = CreateTestNode(node_id, "Label A");
mock_semantics_source()->CreateSemanticNode(mock_semantic_provider()->koid(), std::move(node));
a11y::ScreenReaderContext* context = mock_screen_reader_context();
a11y::DefaultAction default_action(action_context(), context);
a11y::gesture_util_v2::GestureContext gesture_context;
gesture_context.view_ref_koid = mock_semantic_provider()->koid();
// Update focused node.
mock_a11y_focus_manager()->SetA11yFocus(mock_semantic_provider()->koid(), node_id,
[](bool result) { EXPECT_TRUE(result); });
// Call DefaultAction Run()
default_action.Run(gesture_context);
RunLoopUntilIdle();
ASSERT_TRUE(mock_a11y_focus_manager()->IsGetA11yFocusCalled());
const auto& requested_actions =
mock_semantics_source()->GetRequestedActionsForView(mock_semantic_provider()->koid());
EXPECT_EQ(requested_actions.size(), 1u);
EXPECT_EQ(requested_actions[0].first, node_id);
EXPECT_EQ(requested_actions[0].second, fuchsia::accessibility::semantics::Action::DEFAULT);
}
// Tests the case when Hit testing doesn't returns a valid node and OnAccessibilityActionRequested
// is not called.
TEST_F(DefaultActionTest, OnAccessibilitActionRequestedNotCalled) {
// Creating test node to update.
uint32_t node_id = 0;
Node node = CreateTestNode(node_id, "Label A");
mock_semantics_source()->CreateSemanticNode(mock_semantic_provider()->koid(), std::move(node));
a11y::ScreenReaderContext* context = mock_screen_reader_context();
a11y::DefaultAction default_action(action_context(), context);
a11y::gesture_util_v2::GestureContext gesture_context;
// Update focused node.
mock_a11y_focus_manager()->SetA11yFocus(ZX_KOID_INVALID, node_id, [](bool result) {});
// Call DefaultAction Run()
default_action.Run(gesture_context);
RunLoopUntilIdle();
ASSERT_TRUE(mock_a11y_focus_manager()->IsGetA11yFocusCalled());
const auto& requested_actions =
mock_semantics_source()->GetRequestedActionsForView(mock_semantic_provider()->koid());
EXPECT_TRUE(requested_actions.empty());
}
} // namespace
} // namespace accessibility_test