blob: bb12bf20e5ba76d8da1dff38501b525d7b6f4d55 [file] [log] [blame]
// Copyright 2019 The Chromium 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 "fuchsia/engine/browser/accessibility_bridge.h"
#include <fuchsia/accessibility/semantics/cpp/fidl.h>
#include <fuchsia/accessibility/semantics/cpp/fidl_test_base.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/ui/scenic/cpp/view_ref_pair.h>
#include <zircon/types.h>
#include "base/fuchsia/default_context.h"
#include "base/fuchsia/scoped_service_binding.h"
#include "base/fuchsia/service_directory_client.h"
#include "base/logging.h"
#include "base/test/task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
using fuchsia::accessibility::semantics::SemanticListener;
using fuchsia::accessibility::semantics::SemanticsManager;
namespace {
class FakeSemanticsManager : public fuchsia::accessibility::semantics::testing::
SemanticsManager_TestBase {
public:
explicit FakeSemanticsManager() = default;
~FakeSemanticsManager() override = default;
// fuchsia::accessibility::semantics::SemanticsManager implementation.
void RegisterViewForSemantics(
fuchsia::ui::views::ViewRef view_ref,
fidl::InterfaceHandle<SemanticListener> listener,
fidl::InterfaceRequest<fuchsia::accessibility::semantics::SemanticTree>
semantic_tree) final {
view_ref_ = std::move(view_ref);
listener_ = std::move(listener);
semantic_tree_ = std::move(semantic_tree);
}
bool is_view_registered() const { return view_ref_.reference.is_valid(); }
bool is_listener_handle_valid() const { return listener_.is_valid(); }
bool is_semantic_tree_handle_valid() const {
return semantic_tree_.is_valid();
}
void NotImplemented_(const std::string& name) final {
NOTIMPLEMENTED() << name;
}
private:
fuchsia::ui::views::ViewRef view_ref_;
fidl::InterfaceHandle<SemanticListener> listener_;
fidl::InterfaceRequest<fuchsia::accessibility::semantics::SemanticTree>
semantic_tree_;
DISALLOW_COPY_AND_ASSIGN(FakeSemanticsManager);
};
} // namespace
class AccessibilityBridgeTest : public testing::Test {
public:
AccessibilityBridgeTest()
: task_environment_(base::test::TaskEnvironment::MainThreadType::IO),
semantics_manager_binding_(&semantics_manager_) {}
~AccessibilityBridgeTest() override = default;
void CreateAccessibilityBridge() {
auto view_ref_pair = scenic::ViewRefPair::New();
control_ref_ = std::move(view_ref_pair.control_ref);
fuchsia::accessibility::semantics::SemanticsManagerPtr
semantics_manager_ptr;
semantics_manager_binding_.Bind(semantics_manager_ptr.NewRequest());
accessibility_bridge_ = std::make_unique<AccessibilityBridge>(
std::move(semantics_manager_ptr), std::move(view_ref_pair.view_ref));
}
protected:
base::test::SingleThreadTaskEnvironment task_environment_;
std::unique_ptr<AccessibilityBridge> accessibility_bridge_;
FakeSemanticsManager semantics_manager_;
fidl::Binding<fuchsia::accessibility::semantics::SemanticsManager>
semantics_manager_binding_;
fuchsia::ui::views::ViewRefControl control_ref_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityBridgeTest);
};
// Test registration to the SemanticsManager.
TEST_F(AccessibilityBridgeTest, RegisterViewRef) {
CreateAccessibilityBridge();
// Run loop so FIDL registration requests are processed.
task_environment_.RunUntilIdle();
EXPECT_TRUE(semantics_manager_.is_view_registered());
EXPECT_TRUE(semantics_manager_.is_listener_handle_valid());
EXPECT_TRUE(semantics_manager_.is_semantic_tree_handle_valid());
}