Files
XCEngine/tests/NewEditor/test_xcui_native_shell_layout.cpp

134 lines
5.0 KiB
C++

#include "XCUIBackend/XCUINativeShellLayout.h"
#include <gtest/gtest.h>
namespace {
using XCEngine::Editor::XCUIBackend::BuildXCUINativeShellCanvasRect;
using XCEngine::Editor::XCUIBackend::BuildXCUINativeShellLayout;
using XCEngine::Editor::XCUIBackend::XCUINativeShellMetrics;
using XCEngine::Editor::XCUIBackend::XCUINativeShellPanelLayout;
using XCEngine::Editor::XCUIBackend::XCUINativeShellPanelSpec;
using XCEngine::Editor::XCUIBackend::XCUIShellPanelId;
using XCEngine::UI::UIPoint;
using XCEngine::UI::UIRect;
void ExpectRectEq(
const UIRect& actual,
const UIRect& expected) {
EXPECT_FLOAT_EQ(actual.x, expected.x);
EXPECT_FLOAT_EQ(actual.y, expected.y);
EXPECT_FLOAT_EQ(actual.width, expected.width);
EXPECT_FLOAT_EQ(actual.height, expected.height);
}
TEST(XCUINativeShellLayoutTest, CanvasRectUsesPanelHeaderAndPaddingInsets) {
const XCUINativeShellMetrics metrics = {};
const UIRect panelRect(10.0f, 20.0f, 400.0f, 300.0f);
const UIRect canvasRect = BuildXCUINativeShellCanvasRect(panelRect, metrics);
ExpectRectEq(canvasRect, UIRect(24.0f, 62.0f, 372.0f, 244.0f));
}
TEST(XCUINativeShellLayoutTest, ActivePanelFallsBackToVisiblePanelWhenRequestedPanelIsHidden) {
const auto layout = BuildXCUINativeShellLayout(
UIRect(0.0f, 0.0f, 1200.0f, 800.0f),
{
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUIDemo, "XCUI Demo", false },
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUILayoutLab, "XCUI Layout Lab", true },
},
XCUIShellPanelId::XCUIDemo,
UIPoint(),
false,
false);
ASSERT_EQ(layout.panelLayouts.size(), 1u);
EXPECT_EQ(layout.activePanel, XCUIShellPanelId::XCUILayoutLab);
EXPECT_TRUE(layout.panelLayouts.front().active);
}
TEST(XCUINativeShellLayoutTest, TwoPanelSplitMatchesCurrentSandboxPolicy) {
const XCUINativeShellMetrics metrics = {};
const auto layout = BuildXCUINativeShellLayout(
UIRect(0.0f, 0.0f, 1200.0f, 800.0f),
{
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUIDemo, "XCUI Demo", true },
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUILayoutLab, "XCUI Layout Lab", true },
},
XCUIShellPanelId::XCUIDemo,
UIPoint(),
false,
false,
metrics);
ExpectRectEq(layout.topBarRect, UIRect(22.0f, 22.0f, 1156.0f, 58.0f));
ExpectRectEq(layout.footerRect, UIRect(22.0f, 744.0f, 1156.0f, 34.0f));
ExpectRectEq(layout.workspaceRect, UIRect(22.0f, 98.0f, 1156.0f, 628.0f));
ASSERT_EQ(layout.panelLayouts.size(), 2u);
const XCUINativeShellPanelLayout& leftPanel = layout.panelLayouts[0];
const XCUINativeShellPanelLayout& rightPanel = layout.panelLayouts[1];
EXPECT_EQ(leftPanel.panelId, XCUIShellPanelId::XCUIDemo);
EXPECT_EQ(rightPanel.panelId, XCUIShellPanelId::XCUILayoutLab);
EXPECT_NEAR(leftPanel.panelRect.width, 693.6f, 0.001f);
EXPECT_NEAR(rightPanel.panelRect.width, 444.4f, 0.001f);
EXPECT_NEAR(rightPanel.panelRect.x, 733.6f, 0.001f);
EXPECT_FLOAT_EQ(leftPanel.panelRect.height, 628.0f);
EXPECT_FLOAT_EQ(rightPanel.panelRect.height, 628.0f);
}
TEST(XCUINativeShellLayoutTest, PointerPressTransfersActivePanelToHoveredCanvas) {
const auto layout = BuildXCUINativeShellLayout(
UIRect(0.0f, 0.0f, 1200.0f, 800.0f),
{
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUIDemo, "XCUI Demo", true },
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUILayoutLab, "XCUI Layout Lab", true },
},
XCUIShellPanelId::XCUIDemo,
UIPoint(900.0f, 200.0f),
true,
true);
ASSERT_EQ(layout.panelLayouts.size(), 2u);
EXPECT_EQ(layout.activePanel, XCUIShellPanelId::XCUILayoutLab);
EXPECT_FALSE(layout.panelLayouts[0].active);
EXPECT_TRUE(layout.panelLayouts[1].active);
EXPECT_TRUE(layout.panelLayouts[1].hovered);
}
TEST(XCUINativeShellLayoutTest, SingleVisiblePanelFillsWorkspaceAndBecomesActive) {
const auto layout = BuildXCUINativeShellLayout(
UIRect(0.0f, 0.0f, 1000.0f, 720.0f),
{
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUIDemo, "XCUI Demo", true },
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUILayoutLab, "XCUI Layout Lab", false },
},
XCUIShellPanelId::XCUILayoutLab,
UIPoint(),
false,
false);
ASSERT_EQ(layout.panelLayouts.size(), 1u);
EXPECT_EQ(layout.activePanel, XCUIShellPanelId::XCUIDemo);
ExpectRectEq(layout.panelLayouts[0].panelRect, layout.workspaceRect);
}
TEST(XCUINativeShellLayoutTest, UndersizedPanelStillParticipatesButReportsNotVisible) {
const auto layout = BuildXCUINativeShellLayout(
UIRect(0.0f, 0.0f, 240.0f, 400.0f),
{
XCUINativeShellPanelSpec{ XCUIShellPanelId::XCUIDemo, "XCUI Demo", true },
},
XCUIShellPanelId::XCUIDemo,
UIPoint(),
false,
false);
ASSERT_EQ(layout.panelLayouts.size(), 1u);
EXPECT_FALSE(layout.panelLayouts[0].visible);
ExpectRectEq(layout.panelLayouts[0].panelRect, layout.workspaceRect);
}
} // namespace