112 lines
4.4 KiB
C++
112 lines
4.4 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "XCUIBackend/NullXCUIPanelCanvasHost.h"
|
|
|
|
namespace {
|
|
|
|
using XCEngine::Editor::XCUIBackend::CreateNullXCUIPanelCanvasHost;
|
|
using XCEngine::Editor::XCUIBackend::BuildPassiveXCUIPanelCanvasSession;
|
|
using XCEngine::Editor::XCUIBackend::IXCUIPanelCanvasHost;
|
|
using XCEngine::Editor::XCUIBackend::ResolveXCUIPanelCanvasChildId;
|
|
using XCEngine::Editor::XCUIBackend::XCUIPanelCanvasHostBackend;
|
|
using XCEngine::Editor::XCUIBackend::XCUIPanelCanvasHostCapabilities;
|
|
using XCEngine::Editor::XCUIBackend::XCUIPanelCanvasRequest;
|
|
using XCEngine::Editor::XCUIBackend::XCUIPanelCanvasSession;
|
|
|
|
TEST(NewEditorXCUIPanelCanvasHostTest, NullHostReportsExplicitBackendAndCapabilities) {
|
|
std::unique_ptr<IXCUIPanelCanvasHost> host = CreateNullXCUIPanelCanvasHost();
|
|
ASSERT_NE(host, nullptr);
|
|
|
|
EXPECT_STREQ(host->GetDebugName(), "NullXCUIPanelCanvasHost");
|
|
EXPECT_EQ(host->GetBackend(), XCUIPanelCanvasHostBackend::Null);
|
|
|
|
const XCUIPanelCanvasHostCapabilities capabilities = host->GetCapabilities();
|
|
EXPECT_FALSE(capabilities.supportsPointerHitTesting);
|
|
EXPECT_FALSE(capabilities.supportsHostedSurfaceImages);
|
|
EXPECT_FALSE(capabilities.supportsPrimitiveOverlays);
|
|
}
|
|
|
|
TEST(NewEditorXCUIPanelCanvasHostTest, ResolveChildIdFallsBackToStableDefaultForMissingNames) {
|
|
XCUIPanelCanvasRequest request = {};
|
|
EXPECT_STREQ(ResolveXCUIPanelCanvasChildId(request), "XCUIPanelCanvasHost");
|
|
EXPECT_STREQ(ResolveXCUIPanelCanvasChildId(request, "FallbackCanvas"), "FallbackCanvas");
|
|
|
|
request.childId = "";
|
|
EXPECT_STREQ(ResolveXCUIPanelCanvasChildId(request), "XCUIPanelCanvasHost");
|
|
|
|
request.childId = "CanvasHost";
|
|
EXPECT_STREQ(ResolveXCUIPanelCanvasChildId(request, "FallbackCanvas"), "CanvasHost");
|
|
}
|
|
|
|
TEST(NewEditorXCUIPanelCanvasHostTest, PassiveSessionClampsRequestGeometryIntoSafeDefaultState) {
|
|
XCUIPanelCanvasRequest request = {};
|
|
request.height = -18.0f;
|
|
request.topInset = 42.0f;
|
|
|
|
XCUIPanelCanvasSession session = BuildPassiveXCUIPanelCanvasSession(request);
|
|
EXPECT_FALSE(session.validCanvas);
|
|
EXPECT_FALSE(session.hovered);
|
|
EXPECT_FALSE(session.windowFocused);
|
|
EXPECT_FLOAT_EQ(session.hostRect.width, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.hostRect.height, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.y, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.height, 0.0f);
|
|
|
|
request.height = 120.0f;
|
|
request.topInset = 180.0f;
|
|
session = BuildPassiveXCUIPanelCanvasSession(request);
|
|
EXPECT_FLOAT_EQ(session.hostRect.height, 120.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.y, 120.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.height, 0.0f);
|
|
}
|
|
|
|
TEST(NewEditorXCUIPanelCanvasHostTest, NullHostBeginCanvasReturnsSafePassiveSessionAndDrawCallsAreNoops) {
|
|
std::unique_ptr<IXCUIPanelCanvasHost> host = CreateNullXCUIPanelCanvasHost();
|
|
ASSERT_NE(host, nullptr);
|
|
|
|
XCUIPanelCanvasRequest request = {};
|
|
request.childId = "NullCanvas";
|
|
request.height = 280.0f;
|
|
request.topInset = 24.0f;
|
|
request.bordered = true;
|
|
request.showSurfaceImage = true;
|
|
request.drawPreviewFrame = true;
|
|
request.placeholderTitle = "Placeholder";
|
|
request.badgeTitle = "Badge";
|
|
|
|
const XCUIPanelCanvasSession session = host->BeginCanvas(request);
|
|
EXPECT_FALSE(session.validCanvas);
|
|
EXPECT_FALSE(session.hovered);
|
|
EXPECT_FALSE(session.windowFocused);
|
|
EXPECT_FLOAT_EQ(session.hostRect.width, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.hostRect.height, 280.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.width, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.y, 24.0f);
|
|
EXPECT_FLOAT_EQ(session.canvasRect.height, 256.0f);
|
|
EXPECT_FLOAT_EQ(session.pointerPosition.x, 0.0f);
|
|
EXPECT_FLOAT_EQ(session.pointerPosition.y, 0.0f);
|
|
|
|
host->DrawFilledRect(
|
|
XCEngine::UI::UIRect(10.0f, 12.0f, 48.0f, 64.0f),
|
|
XCEngine::UI::UIColor(1.0f, 0.0f, 0.0f, 1.0f),
|
|
6.0f);
|
|
host->DrawOutlineRect(
|
|
XCEngine::UI::UIRect(5.0f, 6.0f, 100.0f, 40.0f),
|
|
XCEngine::UI::UIColor(0.0f, 1.0f, 0.0f, 1.0f),
|
|
2.0f,
|
|
8.0f);
|
|
host->DrawText(
|
|
XCEngine::UI::UIPoint(8.0f, 14.0f),
|
|
"Null host should ignore text draws",
|
|
XCEngine::UI::UIColor(1.0f, 1.0f, 1.0f, 1.0f),
|
|
16.0f);
|
|
host->EndCanvas();
|
|
|
|
const XCUIPanelCanvasSession secondSession = host->BeginCanvas({});
|
|
EXPECT_FLOAT_EQ(secondSession.hostRect.height, 0.0f);
|
|
EXPECT_FLOAT_EQ(secondSession.canvasRect.height, 0.0f);
|
|
host->EndCanvas();
|
|
}
|
|
|
|
} // namespace
|