blob: 99a1ad68a0032e05bf3be0475d13fbfe46c60077 [file] [log] [blame]
// Copyright 2022 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 <fuchsia/accessibility/semantics/cpp/fidl.h>
#include <fuchsia/element/cpp/fidl.h>
#include <fuchsia/ui/composition/cpp/fidl.h>
#include <fuchsia/ui/display/singleton/cpp/fidl.h>
#include <fuchsia/ui/focus/cpp/fidl.h>
#include <fuchsia/ui/input/cpp/fidl.h>
#include <fuchsia/ui/input3/cpp/fidl.h>
#include <fuchsia/ui/pointerinjector/cpp/fidl.h>
#include <fuchsia/ui/policy/cpp/fidl.h>
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <fuchsia/ui/test/input/cpp/fidl.h>
#include <fuchsia/ui/test/scene/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/syslog/cpp/macros.h>
#include <cstring>
#include "src/ui/testing/test_ui_stack/test_ui_stack_config_lib.h"
#include "src/ui/testing/ui_test_realm/ui_test_realm.h"
namespace {
template <typename T>
void AddPublicService(sys::ComponentContext* context,
sys::ServiceDirectory* realm_exposed_services) {
FX_CHECK(realm_exposed_services);
context->outgoing()->AddPublicService(
fidl::InterfaceRequestHandler<T>([realm_exposed_services](fidl::InterfaceRequest<T> request) {
realm_exposed_services->Connect(std::move(request));
}));
}
int run_test_ui_stack(int argc, const char** argv) {
FX_LOGS(INFO) << "Test UI stack starting";
async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
auto context = sys::ComponentContext::Create();
// Read component configuration, and convert to UITestRealm::Config.
auto test_ui_stack_config = test_ui_stack_config_lib::Config::TakeFromStartupHandle();
ui_testing::UITestRealm::Config config;
config.use_scene_owner = true;
config.accessibility_owner = ui_testing::UITestRealm::AccessibilityOwnerType::FAKE;
config.display_rotation = test_ui_stack_config.display_rotation();
config.device_pixel_ratio = std::stof(test_ui_stack_config.device_pixel_ratio());
// Build test realm.
ui_testing::UITestRealm realm(config);
realm.Build();
auto realm_exposed_services = realm.CloneExposedServicesDirectory();
// Bind incoming service requests to realm's exposed services directory.
// Base UI services.
AddPublicService<fuchsia::accessibility::semantics::SemanticsManager>(
context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::element::GraphicalPresenter>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::composition::Allocator>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::composition::Flatland>(context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::ui::scenic::Scenic>(context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::ui::focus::FocusChainListenerRegistry>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::input::ImeService>(context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::ui::input3::Keyboard>(context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::ui::input3::KeyEventInjector>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::pointerinjector::Registry>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::policy::DeviceListenerRegistry>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::composition::ScreenCapture>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::composition::Screenshot>(context.get(),
realm_exposed_services.get());
AddPublicService<fuchsia::ui::display::singleton::Info>(context.get(),
realm_exposed_services.get());
// Helper services.
AddPublicService<fuchsia::ui::test::input::Registry>(context.get(), realm_exposed_services.get());
AddPublicService<fuchsia::ui::test::scene::Controller>(context.get(),
realm_exposed_services.get());
context->outgoing()->ServeFromStartupInfo();
loop.Run();
return 0;
FX_LOGS(INFO) << "Test UI stack exiting";
}
} // namespace
int main(int argc, const char** argv) { return run_test_ui_stack(argc, argv); }