yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
gui_automation_client.h
Go to the documentation of this file.
1// gui_automation_client.h
2// gRPC client for automating YAZE GUI through ImGuiTestHarness service
3
4#ifndef YAZE_CLI_SERVICE_GUI_AUTOMATION_CLIENT_H
5#define YAZE_CLI_SERVICE_GUI_AUTOMATION_CLIENT_H
6
7#include "absl/status/status.h"
8#include "absl/status/statusor.h"
9#include "absl/time/time.h"
10
11#include <chrono>
12#include <cstdint>
13#include <map>
14#include <memory>
15#include <optional>
16#include <string>
17#include <vector>
18
19#ifdef YAZE_WITH_GRPC
20// Undefine Windows macros that conflict with protobuf generated code
21#ifdef _WIN32
22#pragma push_macro("DWORD")
23#pragma push_macro("ERROR")
24#undef DWORD
25#undef ERROR
26#endif // _WIN32
27
28#include <grpcpp/grpcpp.h>
29#include "protos/imgui_test_harness.grpc.pb.h"
30
31// Restore Windows macros
32#ifdef _WIN32
33#pragma pop_macro("DWORD")
34#pragma pop_macro("ERROR")
35#endif
36#endif
37
38namespace yaze {
39namespace cli {
40
44enum class ClickType {
45 kLeft,
46 kRight,
47 kMiddle,
49};
50
55 bool success;
56 std::string message;
57 std::chrono::milliseconds execution_time;
58 std::string actual_value; // For assertions
59 std::string expected_value; // For assertions
60 std::string test_id; // Test execution identifier (for introspection)
61};
62
66enum class TestRunStatus {
68 kQueued,
70 kPassed,
71 kFailed,
73};
74
79 std::string test_id;
81 std::optional<absl::Time> queued_at;
82 std::optional<absl::Time> started_at;
83 std::optional<absl::Time> completed_at;
85 std::string error_message;
86 std::vector<std::string> assertion_failures;
87};
88
93 std::string test_id;
94 std::string name;
95 std::string category;
96 std::optional<absl::Time> last_run_at;
97 int total_runs = 0;
98 int pass_count = 0;
99 int fail_count = 0;
101};
102
107 std::vector<HarnessTestSummary> tests;
108 std::string next_page_token;
109 int total_count = 0;
110};
111
116 std::string description;
117 bool passed = false;
118 std::string expected_value;
119 std::string actual_value;
120 std::string error_message;
121};
122
127 std::string test_id;
128 bool success = false;
129 std::string test_name;
130 std::string category;
131 std::optional<absl::Time> executed_at;
132 int duration_ms = 0;
133 std::vector<AssertionOutcome> assertions;
134 std::vector<std::string> logs;
135 std::map<std::string, int> metrics;
136 std::string screenshot_path;
138 std::string failure_context;
139 std::string widget_state;
140};
141
143 bool success = false;
144 std::string message;
145 std::string replay_session_id;
147 std::vector<AssertionOutcome> assertions;
148 std::vector<std::string> logs;
149};
150
152 bool success = false;
153 std::string message;
154 std::string recording_id;
155 std::optional<absl::Time> started_at;
156};
157
159 bool success = false;
160 std::string message;
161 std::string output_path;
162 int step_count = 0;
163 std::chrono::milliseconds duration{0};
164};
165
168 kAll,
169 kButton,
170 kInput,
171 kMenu,
172 kTab,
173 kCheckbox,
174 kSlider,
175 kCanvas,
177 kOther,
178};
179
181 float min_x = 0.0f;
182 float min_y = 0.0f;
183 float max_x = 0.0f;
184 float max_y = 0.0f;
185};
186
188 std::string path;
189 std::string label;
190 std::string type;
191 std::string description;
192 std::string suggested_action;
193 bool visible = true;
194 bool enabled = true;
196 uint32_t widget_id = 0;
197 bool has_bounds = false;
198 int64_t last_seen_frame = -1;
199 std::optional<absl::Time> last_seen_at;
200 bool stale = false;
201};
202
204 std::string name;
205 bool visible = true;
206 std::vector<WidgetDescriptor> widgets;
207};
208
216
218 std::vector<DiscoveredWindowInfo> windows;
220 std::optional<absl::Time> generated_at;
221};
222
243 public:
248 explicit GuiAutomationClient(const std::string& server_address);
249
254 absl::Status Connect();
255
261 absl::StatusOr<AutomationResult> Ping(const std::string& message = "ping");
262
269 absl::StatusOr<AutomationResult> Click(const std::string& target,
271
279 absl::StatusOr<AutomationResult> Type(const std::string& target,
280 const std::string& text,
281 bool clear_first = false);
282
290 absl::StatusOr<AutomationResult> Wait(const std::string& condition,
291 int timeout_ms = 5000,
292 int poll_interval_ms = 100);
293
299 absl::StatusOr<AutomationResult> Assert(const std::string& condition);
300
307 absl::StatusOr<AutomationResult> Screenshot(const std::string& region = "full",
308 const std::string& format = "PNG");
309
313 absl::StatusOr<TestStatusDetails> GetTestStatus(const std::string& test_id);
314
318 absl::StatusOr<ListTestsResult> ListTests(const std::string& category_filter = "",
319 int page_size = 100,
320 const std::string& page_token = "");
321
325 absl::StatusOr<TestResultDetails> GetTestResults(const std::string& test_id,
326 bool include_logs = false);
327
328 absl::StatusOr<DiscoverWidgetsResult> DiscoverWidgets(
329 const DiscoverWidgetsQuery& query);
330
331 absl::StatusOr<ReplayTestResult> ReplayTest(
332 const std::string& script_path, bool ci_mode,
333 const std::map<std::string, std::string>& parameter_overrides = {});
334
335 absl::StatusOr<StartRecordingResult> StartRecording(
336 const std::string& output_path,
337 const std::string& session_name,
338 const std::string& description);
339
340 absl::StatusOr<StopRecordingResult> StopRecording(
341 const std::string& recording_id,
342 bool discard = false);
343
347 bool IsConnected() const { return connected_; }
348
352 const std::string& ServerAddress() const { return server_address_; }
353
354 private:
355#ifdef YAZE_WITH_GRPC
356 std::unique_ptr<yaze::test::ImGuiTestHarness::Stub> stub_;
357#endif
358 std::string server_address_;
359 bool connected_ = false;
360};
361
362} // namespace cli
363} // namespace yaze
364
365#endif // YAZE_CLI_SERVICE_GUI_AUTOMATION_CLIENT_H
Client for automating YAZE GUI through gRPC.
absl::StatusOr< ReplayTestResult > ReplayTest(const std::string &script_path, bool ci_mode, const std::map< std::string, std::string > &parameter_overrides={})
absl::StatusOr< AutomationResult > Screenshot(const std::string &region="full", const std::string &format="PNG")
Capture a screenshot.
absl::Status Connect()
Connect to the test harness server.
absl::StatusOr< StartRecordingResult > StartRecording(const std::string &output_path, const std::string &session_name, const std::string &description)
absl::StatusOr< AutomationResult > Ping(const std::string &message="ping")
Check if the server is reachable and responsive.
absl::StatusOr< TestStatusDetails > GetTestStatus(const std::string &test_id)
Fetch the current execution status for a harness test.
absl::StatusOr< AutomationResult > Type(const std::string &target, const std::string &text, bool clear_first=false)
Type text into an input field.
absl::StatusOr< DiscoverWidgetsResult > DiscoverWidgets(const DiscoverWidgetsQuery &query)
bool IsConnected() const
Check if client is connected.
absl::StatusOr< AutomationResult > Wait(const std::string &condition, int timeout_ms=5000, int poll_interval_ms=100)
Wait for a condition to be met.
const std::string & ServerAddress() const
Get the server address.
absl::StatusOr< TestResultDetails > GetTestResults(const std::string &test_id, bool include_logs=false)
Retrieve detailed results for a harness test execution.
absl::StatusOr< StopRecordingResult > StopRecording(const std::string &recording_id, bool discard=false)
absl::StatusOr< AutomationResult > Assert(const std::string &condition)
Assert a GUI state condition.
absl::StatusOr< AutomationResult > Click(const std::string &target, ClickType type=ClickType::kLeft)
Click a GUI element.
absl::StatusOr< ListTestsResult > ListTests(const std::string &category_filter="", int page_size=100, const std::string &page_token="")
Enumerate harness tests with optional filtering.
TestRunStatus
Execution status codes returned by the harness.
ClickType
Type of click action to perform.
Main namespace for the application.
Individual assertion outcome within a harness test.
Result of a GUI automation action.
std::chrono::milliseconds execution_time
std::vector< DiscoveredWindowInfo > windows
std::optional< absl::Time > generated_at
std::vector< WidgetDescriptor > widgets
Aggregated metadata about a harness test.
std::optional< absl::Time > last_run_at
Result container for ListTests RPC.
std::vector< HarnessTestSummary > tests
std::vector< AssertionOutcome > assertions
std::vector< std::string > logs
std::optional< absl::Time > started_at
std::chrono::milliseconds duration
Detailed execution results for a specific harness test.
std::optional< absl::Time > executed_at
std::map< std::string, int > metrics
std::vector< AssertionOutcome > assertions
std::vector< std::string > logs
Detailed information about an individual test execution.
std::vector< std::string > assertion_failures
std::optional< absl::Time > completed_at
std::optional< absl::Time > started_at
std::optional< absl::Time > queued_at
std::optional< absl::Time > last_seen_at