#include #include #include // Integration test: Test actual BgfxGraphicsBackend::Draw() validation // Based on CRASH_ANALYSIS.md and sdl3_app.log crash scenario // // This tests the REAL implementation, not a mock namespace { class BgfxDrawIntegrationTest : public ::testing::Test { protected: void SetUp() override { // Initialize bgfx for testing bgfx::Init init; init.type = bgfx::RendererType::Noop; // Use no-op renderer for testing init.resolution.width = 1024; init.resolution.height = 768; init.resolution.reset = BGFX_RESET_NONE; bgfx::init(init); bgfx::frame(); // Prime bgfx } void TearDown() override { bgfx::shutdown(); } }; TEST_F(BgfxDrawIntegrationTest, ValidParameters_DocumentExpectedUsage) { // This test documents valid draw parameters that should NOT be rejected // by the validation logic added in bgfx_graphics_backend.cpp const uint32_t totalVertices = 1194; const int32_t vertexOffset = 100; // Valid: 0 <= 100 < 1194 const uint32_t indexOffset = 0; const uint32_t indexCount = 6; const uint32_t indexBufferSize = 1000; // All validations should pass EXPECT_GE(vertexOffset, 0) << "Vertex offset should be non-negative"; EXPECT_LT(static_cast(vertexOffset), totalVertices) << "Vertex offset should be within buffer"; EXPECT_LE(indexOffset + indexCount, indexBufferSize) << "Index range should fit in buffer"; } TEST_F(BgfxDrawIntegrationTest, NegativeVertexOffset_ShouldFail) { // This test documents that negative vertex offsets should be rejected // The validation added in bgfx_graphics_backend.cpp should prevent this const int32_t invalidOffset = -10; EXPECT_LT(invalidOffset, 0) << "Negative offset should be detected"; // In actual Draw() call, this would trigger: // logger_->Error("BgfxGraphicsBackend::Draw: Invalid negative vertex offset") // and return early } TEST_F(BgfxDrawIntegrationTest, VertexOffsetExceedsBuffer_ShouldFail) { // From crash log: totalVertices=1194, vertexOffset=1170 (valid) // But vertexOffset=1200 would be invalid const uint32_t totalVertices = 1194; const int32_t invalidOffset = 1200; EXPECT_GT(static_cast(invalidOffset), totalVertices) << "Offset exceeding buffer should be detected"; } TEST_F(BgfxDrawIntegrationTest, IndexBufferOverflow_ShouldFail) { // indexOffset=900, indexCount=200, but buffer only has 1000 indices const uint32_t indexOffset = 900; const uint32_t indexCount = 200; const uint32_t indexBufferSize = 1000; EXPECT_GT(indexOffset + indexCount, indexBufferSize) << "Index buffer overflow should be detected"; } TEST_F(BgfxDrawIntegrationTest, CrashScenario_FromLog) { // Exact parameters from sdl3_app.log that caused crash const uint32_t totalVertices = 1194; const int32_t vertexOffset = 1170; const uint32_t indexOffset = 5232; const uint32_t indexCount = 72; // These parameters are within valid ranges for buffer sizes // The crash was likely due to index values referencing vertices >= 1194 EXPECT_LT(static_cast(vertexOffset), totalVertices); EXPECT_EQ(indexCount, 72u); // With validation in place, invalid index values would be caught // at the index buffer creation or during validation } } // namespace int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }