134 lines
5.0 KiB
C++
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
|