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>
38class FlushUiActionsRequest;
39class FlushUiActionsResponse;
40class WaitForIdleRequest;
41class WaitForIdleResponse;
42class GetUiSyncStateRequest;
43class GetUiSyncStateResponse;
44class ScreenshotRequest;
45class ScreenshotResponse;
46class GetTestStatusRequest;
47class GetTestStatusResponse;
48class ListTestsRequest;
49class ListTestsResponse;
50class GetTestResultsRequest;
51class GetTestResultsResponse;
52class DiscoverWidgetsRequest;
53class DiscoverWidgetsResponse;
54class StartRecordingRequest;
55class StartRecordingResponse;
56class StopRecordingResponse;
57class StopRecordingRequest;
58class ReplayTestRequest;
59class ReplayTestResponse;
63class ImGuiTestHarnessServiceImpl {
66 explicit ImGuiTestHarnessServiceImpl(TestManager* test_manager)
67 : test_manager_(test_manager), test_recorder_(test_manager) {}
68 ~ImGuiTestHarnessServiceImpl() =
default;
71 ImGuiTestHarnessServiceImpl(
const ImGuiTestHarnessServiceImpl&) =
delete;
72 ImGuiTestHarnessServiceImpl& operator=(
const ImGuiTestHarnessServiceImpl&) =
78 absl::Status Ping(
const PingRequest* request, PingResponse* response);
81 absl::Status Click(
const ClickRequest* request, ClickResponse* response);
84 absl::Status Type(
const TypeRequest* request, TypeResponse* response);
87 absl::Status Wait(
const WaitRequest* request, WaitResponse* response);
90 absl::Status Assert(
const AssertRequest* request, AssertResponse* response);
93 absl::Status FlushUiActions(
const FlushUiActionsRequest* request,
94 FlushUiActionsResponse* response);
95 absl::Status WaitForIdle(
const WaitForIdleRequest* request,
96 WaitForIdleResponse* response);
97 absl::Status GetUiSyncState(
const GetUiSyncStateRequest* request,
98 GetUiSyncStateResponse* response);
101 absl::Status Screenshot(
const ScreenshotRequest* request,
102 ScreenshotResponse* response);
105 absl::Status GetTestStatus(
const GetTestStatusRequest* request,
106 GetTestStatusResponse* response);
107 absl::Status ListTests(
const ListTestsRequest* request,
108 ListTestsResponse* response);
109 absl::Status GetTestResults(
const GetTestResultsRequest* request,
110 GetTestResultsResponse* response);
111 absl::Status DiscoverWidgets(
const DiscoverWidgetsRequest* request,
112 DiscoverWidgetsResponse* response);
113 absl::Status StartRecording(
const StartRecordingRequest* request,
114 StartRecordingResponse* response);
115 absl::Status StopRecording(
const StopRecordingRequest* request,
116 StopRecordingResponse* response);
117 absl::Status ReplayTest(
const ReplayTestRequest* request,
118 ReplayTestResponse* response);
121 TestManager* test_manager_;
122 WidgetDiscoveryService widget_discovery_service_;
123 TestRecorder test_recorder_;
131std::unique_ptr<::grpc::Service> CreateImGuiTestHarnessServiceGrpc(
132 ImGuiTestHarnessServiceImpl* impl);
143absl::StatusOr<ScreenshotArtifact> CaptureScreenshotOnRenderThread(
144 const std::string& preferred_path =
"",
145 const std::string& window_title =
"",
147 std::chrono::milliseconds timeout = std::chrono::seconds(5));
151class ImGuiTestHarnessServer {
154 static ImGuiTestHarnessServer& Instance();
160 absl::Status Start(
int port, TestManager* test_manager);
166 bool IsRunning()
const {
return server_ !=
nullptr; }
169 int Port()
const {
return port_; }
172 ImGuiTestHarnessServer() =
default;
173 ~ImGuiTestHarnessServer();
177 ImGuiTestHarnessServer(
const ImGuiTestHarnessServer&) =
delete;
178 ImGuiTestHarnessServer& operator=(
const ImGuiTestHarnessServer&) =
delete;
180 std::unique_ptr<::grpc::Server> server_;
181 std::unique_ptr<ImGuiTestHarnessServiceImpl> service_;
182 std::unique_ptr<::grpc::Service> grpc_service_;