1#ifndef YAZE_APP_CORE_SERVICE_IMGUI_TEST_HARNESS_SERVICE_H_
2#define YAZE_APP_CORE_SERVICE_IMGUI_TEST_HARNESS_SERVICE_H_
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
19#include <grpcpp/impl/service_type.h>
20#include <grpcpp/server.h>
41class FlushUiActionsRequest;
42class FlushUiActionsResponse;
43class WaitForIdleRequest;
44class WaitForIdleResponse;
45class GetUiSyncStateRequest;
46class GetUiSyncStateResponse;
47class ScreenshotRequest;
48class ScreenshotResponse;
49class GetTestStatusRequest;
50class GetTestStatusResponse;
51class ListTestsRequest;
52class ListTestsResponse;
53class GetTestResultsRequest;
54class GetTestResultsResponse;
55class DiscoverWidgetsRequest;
56class DiscoverWidgetsResponse;
57class StartRecordingRequest;
58class StartRecordingResponse;
59class StopRecordingResponse;
60class StopRecordingRequest;
61class ReplayTestRequest;
62class ReplayTestResponse;
66class ImGuiTestHarnessServiceImpl {
69 explicit ImGuiTestHarnessServiceImpl(
70 TestManager* test_manager,
71 util::UiThreadQueue* ui_thread_queue =
nullptr);
72 ~ImGuiTestHarnessServiceImpl() =
default;
75 ImGuiTestHarnessServiceImpl(
const ImGuiTestHarnessServiceImpl&) =
delete;
76 ImGuiTestHarnessServiceImpl& operator=(
const ImGuiTestHarnessServiceImpl&) =
82 absl::Status Ping(
const PingRequest* request, PingResponse* response);
85 absl::Status Click(
const ClickRequest* request, ClickResponse* response);
88 absl::Status Type(
const TypeRequest* request, TypeResponse* response);
91 absl::Status Wait(
const WaitRequest* request, WaitResponse* response);
94 absl::Status Assert(
const AssertRequest* request, AssertResponse* response);
97 absl::Status FlushUiActions(
const FlushUiActionsRequest* request,
98 FlushUiActionsResponse* response);
99 absl::Status WaitForIdle(
const WaitForIdleRequest* request,
100 WaitForIdleResponse* response);
101 absl::Status GetUiSyncState(
const GetUiSyncStateRequest* request,
102 GetUiSyncStateResponse* response);
105 absl::Status Screenshot(
const ScreenshotRequest* request,
106 ScreenshotResponse* response);
109 absl::Status GetTestStatus(
const GetTestStatusRequest* request,
110 GetTestStatusResponse* response);
111 absl::Status ListTests(
const ListTestsRequest* request,
112 ListTestsResponse* response);
113 absl::Status GetTestResults(
const GetTestResultsRequest* request,
114 GetTestResultsResponse* response);
115 absl::Status DiscoverWidgets(
const DiscoverWidgetsRequest* request,
116 DiscoverWidgetsResponse* response);
117 absl::Status StartRecording(
const StartRecordingRequest* request,
118 StartRecordingResponse* response);
119 absl::Status StopRecording(
const StopRecordingRequest* request,
120 StopRecordingResponse* response);
121 absl::Status ReplayTest(
const ReplayTestRequest* request,
122 ReplayTestResponse* response);
125 TestManager* test_manager_;
128 WidgetDiscoveryService widget_discovery_service_;
129 TestRecorder test_recorder_;
137std::unique_ptr<::grpc::Service> CreateImGuiTestHarnessServiceGrpc(
138 ImGuiTestHarnessServiceImpl* impl);
149absl::StatusOr<ScreenshotArtifact> CaptureScreenshotOnRenderThread(
150 const std::string& preferred_path =
"",
151 const std::string& window_title =
"",
153 std::chrono::milliseconds timeout = std::chrono::seconds(5));
157class ImGuiTestHarnessServer {
160 static ImGuiTestHarnessServer& Instance();
166 absl::Status Start(
int port, TestManager* test_manager);
172 bool IsRunning()
const {
return server_ !=
nullptr; }
175 int Port()
const {
return port_; }
178 ImGuiTestHarnessServer() =
default;
179 ~ImGuiTestHarnessServer();
183 ImGuiTestHarnessServer(
const ImGuiTestHarnessServer&) =
delete;
184 ImGuiTestHarnessServer& operator=(
const ImGuiTestHarnessServer&) =
delete;
186 std::unique_ptr<::grpc::Server> server_;
187 std::unique_ptr<ImGuiTestHarnessServiceImpl> service_;
188 std::unique_ptr<::grpc::Service> grpc_service_;