1#ifndef YAZE_APP_TEST_UNIT_TEST_SUITE_H
2#define YAZE_APP_TEST_UNIT_TEST_SUITE_H
10#ifdef YAZE_ENABLE_GTEST
11#include <gtest/gtest.h>
19#ifdef YAZE_ENABLE_GTEST
21class TestResultCapture :
public ::testing::TestEventListener {
23 explicit TestResultCapture(TestResults* results) : results_(results) {}
25 void OnTestStart(const ::testing::TestInfo& test_info)
override {
26 current_test_start_ = std::chrono::steady_clock::now();
28 std::string(test_info.test_case_name()) +
"." + test_info.name();
31 void OnTestEnd(const ::testing::TestInfo& test_info)
override {
32 auto end_time = std::chrono::steady_clock::now();
33 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
34 end_time - current_test_start_);
37 result.name = test_info.name();
38 result.suite_name = test_info.test_case_name();
39 result.category = TestCategory::kUnit;
40 result.duration = duration;
41 result.timestamp = current_test_start_;
43 if (test_info.result()->Passed()) {
44 result.status = TestStatus::kPassed;
45 }
else if (test_info.result()->Skipped()) {
46 result.status = TestStatus::kSkipped;
48 result.status = TestStatus::kFailed;
51 std::stringstream error_stream;
52 for (
int i = 0; i < test_info.result()->total_part_count(); ++i) {
53 const auto& part = test_info.result()->GetTestPartResult(i);
55 error_stream << part.file_name() <<
":" << part.line_number() <<
" "
56 << part.message() <<
"\n";
59 result.error_message = error_stream.str();
63 results_->AddResult(result);
68 void OnTestProgramStart(const ::testing::UnitTest&)
override {}
69 void OnTestIterationStart(const ::testing::UnitTest&,
int)
override {}
70 void OnEnvironmentsSetUpStart(const ::testing::UnitTest&)
override {}
71 void OnEnvironmentsSetUpEnd(const ::testing::UnitTest&)
override {}
72 void OnTestCaseStart(const ::testing::TestCase&)
override {}
73 void OnTestCaseEnd(const ::testing::TestCase&)
override {}
74 void OnTestPartResult(const ::testing::TestPartResult& test_part_result)
override {
77 void OnEnvironmentsTearDownStart(const ::testing::UnitTest&)
override {}
78 void OnEnvironmentsTearDownEnd(const ::testing::UnitTest&)
override {}
79 void OnTestIterationEnd(const ::testing::UnitTest&,
int)
override {}
80 void OnTestProgramEnd(const ::testing::UnitTest&)
override {}
83 TestResults* results_;
84 std::chrono::time_point<std::chrono::steady_clock> current_test_start_;
85 std::string current_test_name_;
95 std::string
GetName()
const override {
return "Google Test Unit Tests"; }
99#ifdef YAZE_ENABLE_GTEST
101 auto& listeners = ::testing::UnitTest::GetInstance()->listeners();
104 delete listeners.Release(listeners.default_result_printer());
107 auto capture_listener =
new TestResultCapture(&results);
108 listeners.Append(capture_listener);
112 const char* argv[] = {
"yaze_tests"};
113 ::testing::InitGoogleTest(&argc,
const_cast<char**
>(argv));
116 int result = RUN_ALL_TESTS();
119 listeners.Release(capture_listener);
120 delete capture_listener;
122 return result == 0 ? absl::OkStatus()
123 : absl::InternalError(
"Some unit tests failed");
127 result.
name =
"Placeholder Test";
131 result.error_message =
"Google Test not available in this build";
132 result.duration = std::chrono::milliseconds{0};
133 result.timestamp = std::chrono::steady_clock::now();
136 return absl::OkStatus();
141 ImGui::Text(
"Google Test Configuration");
149 if (ImGui::Button(
"Clear")) {
167 std::string
GetName()
const override {
return "Arena Memory Tests"; }
176 return absl::OkStatus();
180 ImGui::Text(
"Arena Test Configuration");
188 auto start_time = std::chrono::steady_clock::now();
191 result.
name =
"Arena_Allocation_Test";
198 size_t initial_texture_count = arena.GetTextureCount();
199 size_t initial_surface_count = arena.GetSurfaceCount();
205 size_t final_texture_count = arena.GetTextureCount();
206 size_t final_surface_count = arena.GetSurfaceCount();
211 }
catch (
const std::exception& e) {
214 "Arena allocation test failed: " + std::string(e.what());
217 auto end_time = std::chrono::steady_clock::now();
218 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
219 end_time - start_time);
225 auto start_time = std::chrono::steady_clock::now();
228 result.
name =
"Arena_Cleanup_Test";
239 size_t texture_count = arena.GetTextureCount();
240 size_t surface_count = arena.GetSurfaceCount();
244 }
catch (
const std::exception& e) {
247 "Arena cleanup test failed: " + std::string(e.what());
250 auto end_time = std::chrono::steady_clock::now();
251 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
252 end_time - start_time);
258 auto start_time = std::chrono::steady_clock::now();
261 result.
name =
"Arena_Resource_Tracking_Test";
270 size_t texture_count = arena.GetTextureCount();
271 size_t surface_count = arena.GetSurfaceCount();
274 if (texture_count >= 0 && surface_count >= 0) {
281 }
catch (
const std::exception& e) {
284 "Resource tracking test failed: " + std::string(e.what());
287 auto end_time = std::chrono::steady_clock::now();
288 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
289 end_time - start_time);
void DrawConfiguration() override
void RunArenaCleanupTest(TestResults &results)
~ArenaTestSuite() override=default
TestCategory GetCategory() const override
absl::Status RunTests(TestResults &results) override
void RunArenaResourceTrackingTest(TestResults &results)
std::string GetName() const override
void RunArenaAllocationTest(TestResults &results)
int test_allocation_count_
absl::Status RunTests(TestResults &results) override
TestCategory GetCategory() const override
std::string GetName() const override
void DrawConfiguration() override
~UnitTestSuite() override=default
Main namespace for the application.
std::chrono::milliseconds duration
std::string error_message
std::chrono::time_point< std::chrono::steady_clock > timestamp
void AddResult(const TestResult &result)