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 <chrono>
8#include <cstdint>
9#include <map>
10#include <memory>
11#include <optional>
12#include <string>
13#include <vector>
14
15#include "absl/status/status.h"
16#include "absl/status/statusor.h"
17#include "absl/time/time.h"
18
19#ifdef YAZE_WITH_GRPC
21
22#include <grpcpp/grpcpp.h>
23
24#include "protos/imgui_test_harness.grpc.pb.h"
25#endif
26
27namespace yaze {
28namespace cli {
29
34
39 bool success;
40 std::string message;
41 std::chrono::milliseconds execution_time;
42 std::string actual_value; // For assertions
43 std::string expected_value; // For assertions
44 std::string test_id; // Test execution identifier (for introspection)
45};
46
50enum class TestRunStatus {
52 kQueued,
54 kPassed,
55 kFailed,
57};
58
63 std::string test_id;
65 std::optional<absl::Time> queued_at;
66 std::optional<absl::Time> started_at;
67 std::optional<absl::Time> completed_at;
69 std::string error_message;
70 std::vector<std::string> assertion_failures;
71};
72
77 std::string test_id;
78 std::string name;
79 std::string category;
80 std::optional<absl::Time> last_run_at;
81 int total_runs = 0;
82 int pass_count = 0;
83 int fail_count = 0;
85};
86
91 std::vector<HarnessTestSummary> tests;
92 std::string next_page_token;
93 int total_count = 0;
94};
95
100 std::string description;
101 bool passed = false;
102 std::string expected_value;
103 std::string actual_value;
104 std::string error_message;
105};
106
111 std::string test_id;
112 bool success = false;
113 std::string test_name;
114 std::string category;
115 std::optional<absl::Time> executed_at;
116 int duration_ms = 0;
117 std::vector<AssertionOutcome> assertions;
118 std::vector<std::string> logs;
119 std::map<std::string, int> metrics;
120 std::string screenshot_path;
122 std::string failure_context;
123 std::string widget_state;
124};
125
127 bool success = false;
128 std::string message;
129 std::string replay_session_id;
131 std::vector<AssertionOutcome> assertions;
132 std::vector<std::string> logs;
133};
134
136 bool success = false;
137 std::string message;
138 std::string recording_id;
139 std::optional<absl::Time> started_at;
140};
141
143 bool success = false;
144 std::string message;
145 std::string output_path;
146 int step_count = 0;
147 std::chrono::milliseconds duration{0};
148};
149
152 kAll,
153 kButton,
154 kInput,
155 kMenu,
156 kTab,
157 kCheckbox,
158 kSlider,
159 kCanvas,
161 kOther,
162};
163
165 float min_x = 0.0f;
166 float min_y = 0.0f;
167 float max_x = 0.0f;
168 float max_y = 0.0f;
169};
170
172 std::string path;
173 std::string label;
174 std::string type;
175 std::string description;
176 std::string suggested_action;
177 bool visible = true;
178 bool enabled = true;
180 uint32_t widget_id = 0;
181 bool has_bounds = false;
182 int64_t last_seen_frame = -1;
183 std::optional<absl::Time> last_seen_at;
184 bool stale = false;
185};
186
188 std::string name;
189 bool visible = true;
190 std::vector<WidgetDescriptor> widgets;
191};
192
200
202 std::vector<DiscoveredWindowInfo> windows;
204 std::optional<absl::Time> generated_at;
205};
206
227 public:
233 explicit GuiAutomationClient(const std::string& server_address);
234
239 absl::Status Connect();
240
246 absl::StatusOr<AutomationResult> Ping(const std::string& message = "ping");
247
254 absl::StatusOr<AutomationResult> Click(const std::string& target,
256
264 absl::StatusOr<AutomationResult> Type(const std::string& target,
265 const std::string& text,
266 bool clear_first = false);
267
275 absl::StatusOr<AutomationResult> Wait(const std::string& condition,
276 int timeout_ms = 5000,
277 int poll_interval_ms = 100);
278
284 absl::StatusOr<AutomationResult> Assert(const std::string& condition);
285
292 absl::StatusOr<AutomationResult> Screenshot(
293 const std::string& region = "full", const std::string& format = "PNG");
294
298 absl::StatusOr<TestStatusDetails> GetTestStatus(const std::string& test_id);
299
303 absl::StatusOr<ListTestsResult> ListTests(
304 const std::string& category_filter = "", int page_size = 100,
305 const std::string& page_token = "");
306
310 absl::StatusOr<TestResultDetails> GetTestResults(const std::string& test_id,
311 bool include_logs = false);
312
313 absl::StatusOr<DiscoverWidgetsResult> DiscoverWidgets(
314 const DiscoverWidgetsQuery& query);
315
316 absl::StatusOr<ReplayTestResult> ReplayTest(
317 const std::string& script_path, bool ci_mode,
318 const std::map<std::string, std::string>& parameter_overrides = {});
319
320 absl::StatusOr<StartRecordingResult> StartRecording(
321 const std::string& output_path, const std::string& session_name,
322 const std::string& description);
323
324 absl::StatusOr<StopRecordingResult> StopRecording(
325 const std::string& recording_id, bool discard = false);
326
330 bool IsConnected() const { return connected_; }
331
335 const std::string& ServerAddress() const { return server_address_; }
336
337 private:
338#ifdef YAZE_WITH_GRPC
339 std::unique_ptr<yaze::test::ImGuiTestHarness::Stub> stub_;
340#endif
341 std::string server_address_;
342 bool connected_ = false;
343};
344
345} // namespace cli
346} // namespace yaze
347
348#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.
GuiAutomationClient(const std::string &server_address)
Construct a new GUI automation client.
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.
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