yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
test_generation_api.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_AUTOMATION_TEST_GENERATION_API_H
2#define YAZE_CLI_AUTOMATION_TEST_GENERATION_API_H
3
4#include <chrono>
5#include <functional>
6#include <memory>
7#include <string>
8#include <vector>
9
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
12#include "app/editor/editor.h"
13#include "nlohmann/json.hpp"
14
15namespace yaze {
16namespace cli {
17namespace automation {
18
27 public:
28 // ============================================================================
29 // Test Frameworks
30 // ============================================================================
31
32 enum class TestFramework {
33 GTEST, // Google Test
34 CATCH2, // Catch2
35 DOCTEST, // doctest
36 IMGUI_TEST // ImGui Test Engine
37 };
38
39 // ============================================================================
40 // Recording Infrastructure
41 // ============================================================================
42
47 std::chrono::steady_clock::time_point timestamp;
48 std::string action_type; // click, drag, keyboard, menu, etc.
49 nlohmann::json parameters;
50 nlohmann::json pre_state; // State before action
51 nlohmann::json post_state; // State after action
52 };
53
58 std::string name;
59 std::chrono::steady_clock::time_point started_at;
60 std::chrono::steady_clock::time_point ended_at;
61 std::vector<RecordedInteraction> interactions;
62 nlohmann::json initial_state;
63 nlohmann::json final_state;
64 std::map<std::string, std::string> metadata;
65 };
66
73 absl::Status StartRecording(const std::string& test_name,
74 bool capture_state = true);
75
80 absl::StatusOr<RecordingSession> StopRecording();
81
86
91
96 void AnnotateRecording(const std::string& annotation);
97
98 // ============================================================================
99 // Test Code Generation
100 // ============================================================================
101
115
122 absl::StatusOr<std::string> GenerateTestFromRecording(
123 const RecordingSession& session,
124 const GenerationOptions& options = {});
125
130 std::string class_under_test;
131 std::vector<std::string> methods_to_test;
135 std::map<std::string, nlohmann::json> custom_cases;
136 };
137
144 absl::StatusOr<std::string> GenerateTestSuite(
145 const TestSpecification& spec,
146 const GenerationOptions& options = {});
147
156 absl::StatusOr<std::string> GenerateRegressionTest(
157 const std::string& bug_description,
158 const std::vector<std::string>& repro_steps,
159 const std::string& expected_behavior,
160 const GenerationOptions& options = {});
161
162 // ============================================================================
163 // Test Fixtures and Mocks
164 // ============================================================================
165
172 absl::StatusOr<std::string> GenerateFixture(
173 app::editor::Editor* editor,
174 const std::string& fixture_name);
175
182 absl::StatusOr<std::string> GenerateMock(
183 const std::string& interface_name,
184 const std::string& mock_name);
185
186 // ============================================================================
187 // Test Execution
188 // ============================================================================
189
193 struct TestResult {
194 bool passed;
195 std::string test_name;
197 std::string output;
198 std::vector<std::string> failures;
199 std::vector<std::string> warnings;
200 nlohmann::json coverage_data;
201 };
202
209 absl::StatusOr<TestResult> ExecuteGeneratedTest(
210 const std::string& test_code,
211 bool compile_only = false);
212
219 absl::StatusOr<std::vector<TestResult>> RunTestFile(
220 const std::string& test_file,
221 const std::string& filter = "");
222
223 // ============================================================================
224 // Coverage Analysis
225 // ============================================================================
226
234 std::map<std::string, double> file_coverage;
235 std::vector<std::string> uncovered_lines;
236 std::vector<std::string> uncovered_branches;
237 };
238
244 absl::StatusOr<CoverageReport> GenerateCoverageReport(
245 const std::vector<TestResult>& test_results);
246
247 // ============================================================================
248 // Test Validation
249 // ============================================================================
250
256 std::vector<std::string> ValidateTestCode(const std::string& test_code);
257
264 std::map<std::string, std::vector<std::string>> CheckRequirementsCoverage(
265 const std::string& test_code,
266 const std::vector<std::string>& requirements);
267
268 // ============================================================================
269 // AI-Assisted Test Generation
270 // ============================================================================
271
278 absl::StatusOr<nlohmann::json> SuggestTestCases(
279 const std::string& code_under_test,
280 const std::string& model_name = "gemini");
281
288 absl::StatusOr<std::string> ImproveTest(
289 const std::string& test_code,
290 const std::vector<std::string>& improvement_goals);
291
292 // ============================================================================
293 // Test Organization
294 // ============================================================================
295
301 nlohmann::json OrganizeTestSuites(
302 const std::vector<std::string>& test_files);
303
310 absl::StatusOr<std::string> GenerateTestDocumentation(
311 const std::string& test_file,
312 const std::string& format = "markdown");
313
314 // ============================================================================
315 // Callbacks and Events
316 // ============================================================================
317
318 using RecordingCallback = std::function<void(const RecordedInteraction&)>;
319 using GenerationCallback = std::function<void(const std::string& progress)>;
320
325
330
331 private:
332 std::unique_ptr<RecordingSession> current_recording_;
333 bool is_recording_ = false;
334 bool is_paused_ = false;
337
338 // Helper methods
339 std::string GenerateTestHeader(const GenerationOptions& options) const;
340 std::string GenerateTestBody(const RecordingSession& session,
341 const GenerationOptions& options) const;
342 std::string GenerateAssertion(const RecordedInteraction& interaction,
343 TestFramework framework) const;
344 absl::Status CompileTest(const std::string& test_code) const;
345};
346
347} // namespace automation
348} // namespace cli
349} // namespace yaze
350
351#endif // YAZE_CLI_AUTOMATION_TEST_GENERATION_API_H
API for automated test generation and execution.
std::string GenerateTestBody(const RecordingSession &session, const GenerationOptions &options) const
absl::Status StartRecording(const std::string &test_name, bool capture_state=true)
Start recording user interactions.
std::string GenerateAssertion(const RecordedInteraction &interaction, TestFramework framework) const
absl::StatusOr< std::string > GenerateTestFromRecording(const RecordingSession &session, const GenerationOptions &options={})
Generate test code from recording.
std::map< std::string, std::vector< std::string > > CheckRequirementsCoverage(const std::string &test_code, const std::vector< std::string > &requirements)
Check if test covers specified requirements.
absl::StatusOr< std::string > ImproveTest(const std::string &test_code, const std::vector< std::string > &improvement_goals)
Use AI to improve existing test.
void ResumeRecording()
Resume paused recording.
void SetRecordingCallback(RecordingCallback callback)
Set callback for recording events.
absl::StatusOr< TestResult > ExecuteGeneratedTest(const std::string &test_code, bool compile_only=false)
Execute generated test code.
absl::StatusOr< std::string > GenerateRegressionTest(const std::string &bug_description, const std::vector< std::string > &repro_steps, const std::string &expected_behavior, const GenerationOptions &options={})
Generate regression test from bug report.
absl::StatusOr< std::string > GenerateTestSuite(const TestSpecification &spec, const GenerationOptions &options={})
Generate comprehensive test suite from specification.
std::string GenerateTestHeader(const GenerationOptions &options) const
absl::StatusOr< CoverageReport > GenerateCoverageReport(const std::vector< TestResult > &test_results)
Generate coverage report for tests.
absl::Status CompileTest(const std::string &test_code) const
absl::StatusOr< nlohmann::json > SuggestTestCases(const std::string &code_under_test, const std::string &model_name="gemini")
Use AI model to suggest test cases.
std::vector< std::string > ValidateTestCode(const std::string &test_code)
Validate generated test code.
void AnnotateRecording(const std::string &annotation)
Add annotation to current recording.
absl::StatusOr< std::vector< TestResult > > RunTestFile(const std::string &test_file, const std::string &filter="")
Run existing test file.
absl::StatusOr< std::string > GenerateTestDocumentation(const std::string &test_file, const std::string &format="markdown")
Generate test documentation.
std::function< void(const std::string &progress)> GenerationCallback
absl::StatusOr< RecordingSession > StopRecording()
Stop current recording session.
nlohmann::json OrganizeTestSuites(const std::vector< std::string > &test_files)
Organize tests into suites.
absl::StatusOr< std::string > GenerateFixture(app::editor::Editor *editor, const std::string &fixture_name)
Generate test fixture from current editor state.
std::unique_ptr< RecordingSession > current_recording_
absl::StatusOr< std::string > GenerateMock(const std::string &interface_name, const std::string &mock_name)
Generate mock object for testing.
void SetGenerationCallback(GenerationCallback callback)
Set callback for generation progress.
void PauseRecording()
Pause recording temporarily.
std::function< void(const RecordedInteraction &)> RecordingCallback