Files
XCEngine/tests/editor/test_xcui_imgui_transition_backend.cpp

98 lines
2.9 KiB
C++

#include <gtest/gtest.h>
#include "XCUIBackend/ImGuiTransitionBackend.h"
#include <XCEngine/UI/DrawData.h>
#include <imgui.h>
namespace {
class ImGuiContextScope {
public:
ImGuiContextScope() {
IMGUI_CHECKVERSION();
ImGui::CreateContext();
}
~ImGuiContextScope() {
ImGui::DestroyContext();
}
};
} // namespace
TEST(XCUIImGuiTransitionBackendTest, BeginFrameResetsPendingState) {
ImGuiContextScope contextScope;
XCEngine::Editor::XCUIBackend::ImGuiTransitionBackend backend = {};
XCEngine::UI::UIDrawList drawList("Pending");
drawList.AddFilledRect(
XCEngine::UI::UIRect(0.0f, 0.0f, 16.0f, 16.0f),
XCEngine::UI::UIColor(1.0f, 0.0f, 0.0f, 1.0f));
backend.BeginFrame();
backend.Submit(drawList);
ASSERT_EQ(backend.GetPendingDrawListCount(), 1u);
ASSERT_EQ(backend.GetPendingCommandCount(), 1u);
backend.BeginFrame();
EXPECT_EQ(backend.GetPendingDrawListCount(), 0u);
EXPECT_EQ(backend.GetPendingCommandCount(), 0u);
}
TEST(XCUIImGuiTransitionBackendTest, EndFrameFlushesCommandsToImGuiDrawList) {
ImGuiContextScope contextScope;
ImGuiIO& io = ImGui::GetIO();
io.DisplaySize = ImVec2(1280.0f, 720.0f);
io.DeltaTime = 1.0f / 60.0f;
unsigned char* fontPixels = nullptr;
int fontWidth = 0;
int fontHeight = 0;
io.Fonts->GetTexDataAsRGBA32(&fontPixels, &fontWidth, &fontHeight);
io.Fonts->SetTexID(static_cast<ImTextureID>(1));
XCEngine::Editor::XCUIBackend::ImGuiTransitionBackend backend = {};
XCEngine::UI::UIDrawList drawList("FlushTest");
drawList.PushClipRect(XCEngine::UI::UIRect(0.0f, 0.0f, 220.0f, 160.0f));
drawList.AddFilledRect(
XCEngine::UI::UIRect(10.0f, 10.0f, 60.0f, 40.0f),
XCEngine::UI::UIColor(0.1f, 0.2f, 0.3f, 1.0f),
4.0f);
drawList.AddRectOutline(
XCEngine::UI::UIRect(10.0f, 10.0f, 60.0f, 40.0f),
XCEngine::UI::UIColor(0.9f, 0.9f, 0.9f, 1.0f),
2.0f,
4.0f);
drawList.AddText(
XCEngine::UI::UIPoint(18.0f, 26.0f),
"Backend",
XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f),
16.0f);
drawList.AddImage(
XCEngine::UI::UIRect(90.0f, 12.0f, 32.0f, 32.0f),
XCEngine::UI::UITextureHandle{ 0x100u, 32u, 32u },
XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f));
drawList.PopClipRect();
backend.BeginFrame();
backend.Submit(drawList);
ImGui::NewFrame();
ASSERT_TRUE(ImGui::Begin("XCUIBackendTest"));
ImDrawList* targetDrawList = ImGui::GetWindowDrawList();
ASSERT_NE(targetDrawList, nullptr);
const bool flushed = backend.EndFrame(targetDrawList);
ImGui::End();
ImGui::EndFrame();
EXPECT_TRUE(flushed);
EXPECT_EQ(backend.GetLastFlushedDrawListCount(), 1u);
EXPECT_EQ(backend.GetLastFlushedCommandCount(), 6u);
EXPECT_EQ(backend.GetPendingCommandCount(), 0u);
EXPECT_GT(targetDrawList->VtxBuffer.Size, 0);
EXPECT_GT(targetDrawList->CmdBuffer.Size, 0);
}