backend-infra-engineer: Release v0.3.9-hotfix7 snapshot

This commit is contained in:
scawful
2025-11-23 13:37:10 -05:00
parent c8289bffda
commit 2934c82b75
202 changed files with 34914 additions and 845 deletions

View File

@@ -5,6 +5,7 @@
#include "app/gfx/core/bitmap.h"
#include "app/gui/canvas/canvas.h"
#include "imgui/imgui.h"
#include "testing.h"
namespace yaze {
@@ -13,9 +14,26 @@ namespace test {
using ::testing::Eq;
using ::testing::NotNull;
/**
* @brief Test fixture for TileSelectorWidget tests.
*
* Creates and destroys ImGui context for tests that need it.
* Tests that call ImGui functions (like Render) require the context,
* while pure logic tests (like TileOrigin calculations) do not.
*/
class TileSelectorWidgetTest : public ::testing::Test {
protected:
void SetUp() override {
// Create ImGui context for tests that need it (e.g., Render tests)
// This is required because Canvas and TileSelectorWidget use ImGui functions
imgui_context_ = ImGui::CreateContext();
ImGui::SetCurrentContext(imgui_context_);
// Initialize minimal ImGui IO for testing
ImGuiIO& io = ImGui::GetIO();
io.DisplaySize = ImVec2(1920, 1080);
io.DeltaTime = 1.0f / 60.0f;
// Create a test canvas
canvas_ = std::make_unique<gui::Canvas>("TestCanvas", ImVec2(512, 512),
gui::CanvasGridSize::k16x16);
@@ -30,6 +48,18 @@ class TileSelectorWidgetTest : public ::testing::Test {
config_.highlight_color = {1.0f, 0.85f, 0.35f, 1.0f};
}
void TearDown() override {
// Clean up canvas before destroying ImGui context
canvas_.reset();
// Destroy ImGui context
if (imgui_context_) {
ImGui::DestroyContext(imgui_context_);
imgui_context_ = nullptr;
}
}
ImGuiContext* imgui_context_ = nullptr;
std::unique_ptr<gui::Canvas> canvas_;
gui::TileSelectorWidget::Config config_;
};
@@ -117,13 +147,17 @@ TEST_F(TileSelectorWidgetTest, TileOrigin) {
}
// Test render without atlas (should not crash)
TEST_F(TileSelectorWidgetTest, RenderWithoutAtlas) {
// NOTE: This test requires a full ImGui frame context which is complex to set up
// in a unit test without SDL/renderer backends. We test the early return path
// where canvas_ is nullptr instead.
TEST_F(TileSelectorWidgetTest, RenderWithoutCanvas) {
gui::TileSelectorWidget widget("test_widget", config_);
widget.AttachCanvas(canvas_.get());
// Do NOT attach canvas - this tests the early return path
gfx::Bitmap atlas;
auto result = widget.Render(atlas, false);
// With no canvas attached, Render should return early with default result
EXPECT_FALSE(result.tile_clicked);
EXPECT_FALSE(result.tile_double_clicked);
EXPECT_FALSE(result.selection_changed);