222 lines
11 KiB
C++
222 lines
11 KiB
C++
|
|
#include "XCUIBackend/XCUIShellChromeState.h"
|
||
|
|
|
||
|
|
#include <gtest/gtest.h>
|
||
|
|
|
||
|
|
namespace {
|
||
|
|
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellChromeCommandIds;
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellChromeState;
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellHostedPreviewMode;
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellHostedPreviewState;
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellPanelId;
|
||
|
|
using XCEngine::Editor::XCUIBackend::XCUIShellViewToggleId;
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, DefaultsMatchCurrentShellChromeConfiguration) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
const auto& viewToggles = state.GetViewToggles();
|
||
|
|
EXPECT_FALSE(viewToggles.imguiDemoWindowVisible);
|
||
|
|
EXPECT_TRUE(viewToggles.nativeBackdropVisible);
|
||
|
|
EXPECT_TRUE(viewToggles.pulseAccentEnabled);
|
||
|
|
EXPECT_TRUE(viewToggles.nativeXCUIOverlayVisible);
|
||
|
|
EXPECT_TRUE(viewToggles.hostedPreviewHudVisible);
|
||
|
|
|
||
|
|
const auto* demoPanel = state.TryGetPanelState(XCUIShellPanelId::XCUIDemo);
|
||
|
|
ASSERT_NE(demoPanel, nullptr);
|
||
|
|
EXPECT_EQ(demoPanel->panelTitle, "XCUI Demo");
|
||
|
|
EXPECT_EQ(demoPanel->previewDebugName, "XCUI Demo");
|
||
|
|
EXPECT_EQ(demoPanel->previewDebugSource, "new_editor.panels.xcui_demo");
|
||
|
|
EXPECT_TRUE(demoPanel->visible);
|
||
|
|
EXPECT_TRUE(demoPanel->hostedPreviewEnabled);
|
||
|
|
EXPECT_EQ(demoPanel->previewMode, XCUIShellHostedPreviewMode::NativeOffscreen);
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewState::NativeOffscreen);
|
||
|
|
EXPECT_TRUE(state.IsNativeHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
EXPECT_FALSE(state.IsLegacyHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
|
||
|
|
const auto* layoutLabPanel = state.TryGetPanelState(XCUIShellPanelId::XCUILayoutLab);
|
||
|
|
ASSERT_NE(layoutLabPanel, nullptr);
|
||
|
|
EXPECT_EQ(layoutLabPanel->panelTitle, "XCUI Layout Lab");
|
||
|
|
EXPECT_EQ(layoutLabPanel->previewDebugName, "XCUI Layout Lab");
|
||
|
|
EXPECT_EQ(layoutLabPanel->previewDebugSource, "new_editor.panels.xcui_layout_lab");
|
||
|
|
EXPECT_TRUE(layoutLabPanel->visible);
|
||
|
|
EXPECT_TRUE(layoutLabPanel->hostedPreviewEnabled);
|
||
|
|
EXPECT_EQ(layoutLabPanel->previewMode, XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewState::LegacyImGui);
|
||
|
|
EXPECT_FALSE(state.IsNativeHostedPreviewActive(XCUIShellPanelId::XCUILayoutLab));
|
||
|
|
EXPECT_TRUE(state.IsLegacyHostedPreviewActive(XCUIShellPanelId::XCUILayoutLab));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, PanelVisibilityAndPreviewModeMutatorsTrackStateChanges) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetPanelVisible(XCUIShellPanelId::XCUIDemo, false));
|
||
|
|
EXPECT_FALSE(state.IsPanelVisible(XCUIShellPanelId::XCUIDemo));
|
||
|
|
EXPECT_FALSE(state.SetPanelVisible(XCUIShellPanelId::XCUIDemo, false));
|
||
|
|
EXPECT_TRUE(state.TogglePanelVisible(XCUIShellPanelId::XCUIDemo));
|
||
|
|
EXPECT_TRUE(state.IsPanelVisible(XCUIShellPanelId::XCUIDemo));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetHostedPreviewEnabled(XCUIShellPanelId::XCUILayoutLab, false));
|
||
|
|
EXPECT_FALSE(state.IsHostedPreviewEnabled(XCUIShellPanelId::XCUILayoutLab));
|
||
|
|
EXPECT_FALSE(state.SetHostedPreviewEnabled(XCUIShellPanelId::XCUILayoutLab, false));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.ToggleHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewMode::NativeOffscreen);
|
||
|
|
EXPECT_TRUE(state.SetHostedPreviewMode(
|
||
|
|
XCUIShellPanelId::XCUILayoutLab,
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
EXPECT_FALSE(state.SetHostedPreviewMode(
|
||
|
|
XCUIShellPanelId::XCUILayoutLab,
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, HostedPreviewStateSeparatesEnablementFromRequestedMode) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewState::NativeOffscreen);
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetHostedPreviewEnabled(XCUIShellPanelId::XCUIDemo, false));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewState::Disabled);
|
||
|
|
EXPECT_FALSE(state.IsNativeHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
EXPECT_FALSE(state.IsLegacyHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetHostedPreviewMode(
|
||
|
|
XCUIShellPanelId::XCUIDemo,
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewState::Disabled);
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetHostedPreviewEnabled(XCUIShellPanelId::XCUIDemo, true));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellHostedPreviewState::LegacyImGui);
|
||
|
|
EXPECT_FALSE(state.IsNativeHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
EXPECT_TRUE(state.IsLegacyHostedPreviewActive(XCUIShellPanelId::XCUIDemo));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, ViewToggleMutatorsOnlyFlipRequestedFlags) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.SetViewToggle(XCUIShellViewToggleId::ImGuiDemoWindow, true));
|
||
|
|
EXPECT_TRUE(state.GetViewToggle(XCUIShellViewToggleId::ImGuiDemoWindow));
|
||
|
|
EXPECT_FALSE(state.SetViewToggle(XCUIShellViewToggleId::ImGuiDemoWindow, true));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.ToggleViewToggle(XCUIShellViewToggleId::HostedPreviewHud));
|
||
|
|
EXPECT_FALSE(state.GetViewToggle(XCUIShellViewToggleId::HostedPreviewHud));
|
||
|
|
EXPECT_TRUE(state.GetViewToggle(XCUIShellViewToggleId::NativeBackdrop));
|
||
|
|
EXPECT_TRUE(state.GetViewToggle(XCUIShellViewToggleId::PulseAccent));
|
||
|
|
EXPECT_TRUE(state.GetViewToggle(XCUIShellViewToggleId::NativeXCUIOverlay));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, CommandInterfaceTogglesShellViewAndPreviewStates) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.HasCommand(XCUIShellChromeCommandIds::ToggleXCUIDemoPanel));
|
||
|
|
EXPECT_TRUE(state.HasCommand(XCUIShellChromeCommandIds::ToggleHostedPreviewHud));
|
||
|
|
EXPECT_TRUE(state.HasCommand(XCUIShellChromeCommandIds::ToggleNativeLayoutLabPreview));
|
||
|
|
EXPECT_FALSE(state.HasCommand("new_editor.view.unknown"));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.InvokeCommand(XCUIShellChromeCommandIds::ToggleXCUIDemoPanel));
|
||
|
|
EXPECT_FALSE(state.IsPanelVisible(XCUIShellPanelId::XCUIDemo));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.InvokeCommand(XCUIShellChromeCommandIds::ToggleHostedPreviewHud));
|
||
|
|
EXPECT_FALSE(state.GetViewToggle(XCUIShellViewToggleId::HostedPreviewHud));
|
||
|
|
|
||
|
|
EXPECT_TRUE(state.InvokeCommand(XCUIShellChromeCommandIds::ToggleNativeLayoutLabPreview));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewMode::NativeOffscreen);
|
||
|
|
EXPECT_TRUE(state.InvokeCommand(XCUIShellChromeCommandIds::ToggleNativeLayoutLabPreview));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
|
||
|
|
EXPECT_FALSE(state.InvokeCommand("new_editor.view.unknown"));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, PanelCommandIdHelpersMatchCurrentShellCommands) {
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetPanelVisibilityCommandId(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellChromeCommandIds::ToggleXCUIDemoPanel);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetPanelVisibilityCommandId(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellChromeCommandIds::ToggleXCUILayoutLabPanel);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetPanelPreviewModeCommandId(XCUIShellPanelId::XCUIDemo),
|
||
|
|
XCUIShellChromeCommandIds::ToggleNativeDemoPanelPreview);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetPanelPreviewModeCommandId(XCUIShellPanelId::XCUILayoutLab),
|
||
|
|
XCUIShellChromeCommandIds::ToggleNativeLayoutLabPreview);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, ViewToggleCommandIdHelpersMatchCurrentShellCommands) {
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetViewToggleCommandId(XCUIShellViewToggleId::ImGuiDemoWindow),
|
||
|
|
XCUIShellChromeCommandIds::ToggleImGuiDemoWindow);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetViewToggleCommandId(XCUIShellViewToggleId::NativeBackdrop),
|
||
|
|
XCUIShellChromeCommandIds::ToggleNativeBackdrop);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetViewToggleCommandId(XCUIShellViewToggleId::PulseAccent),
|
||
|
|
XCUIShellChromeCommandIds::TogglePulseAccent);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetViewToggleCommandId(XCUIShellViewToggleId::NativeXCUIOverlay),
|
||
|
|
XCUIShellChromeCommandIds::ToggleNativeXCUIOverlay);
|
||
|
|
EXPECT_EQ(
|
||
|
|
XCUIShellChromeState::GetViewToggleCommandId(XCUIShellViewToggleId::HostedPreviewHud),
|
||
|
|
XCUIShellChromeCommandIds::ToggleHostedPreviewHud);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(XCUIShellChromeStateTest, InvalidPanelAndToggleIdsFailGracefully) {
|
||
|
|
XCUIShellChromeState state = {};
|
||
|
|
|
||
|
|
const XCUIShellPanelId invalidPanelId = static_cast<XCUIShellPanelId>(255);
|
||
|
|
const XCUIShellViewToggleId invalidToggleId = static_cast<XCUIShellViewToggleId>(255);
|
||
|
|
|
||
|
|
EXPECT_EQ(state.TryGetPanelState(invalidPanelId), nullptr);
|
||
|
|
EXPECT_FALSE(state.IsPanelVisible(invalidPanelId));
|
||
|
|
EXPECT_FALSE(state.SetPanelVisible(invalidPanelId, true));
|
||
|
|
EXPECT_FALSE(state.TogglePanelVisible(invalidPanelId));
|
||
|
|
EXPECT_FALSE(state.IsHostedPreviewEnabled(invalidPanelId));
|
||
|
|
EXPECT_FALSE(state.SetHostedPreviewEnabled(invalidPanelId, false));
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewMode(invalidPanelId),
|
||
|
|
XCUIShellHostedPreviewMode::LegacyImGui);
|
||
|
|
EXPECT_EQ(
|
||
|
|
state.GetHostedPreviewState(invalidPanelId),
|
||
|
|
XCUIShellHostedPreviewState::Disabled);
|
||
|
|
EXPECT_FALSE(state.IsNativeHostedPreviewActive(invalidPanelId));
|
||
|
|
EXPECT_FALSE(state.IsLegacyHostedPreviewActive(invalidPanelId));
|
||
|
|
EXPECT_FALSE(state.SetHostedPreviewMode(invalidPanelId, XCUIShellHostedPreviewMode::NativeOffscreen));
|
||
|
|
EXPECT_FALSE(state.ToggleHostedPreviewMode(invalidPanelId));
|
||
|
|
|
||
|
|
EXPECT_FALSE(state.GetViewToggle(invalidToggleId));
|
||
|
|
EXPECT_FALSE(state.SetViewToggle(invalidToggleId, true));
|
||
|
|
EXPECT_FALSE(state.ToggleViewToggle(invalidToggleId));
|
||
|
|
|
||
|
|
EXPECT_TRUE(XCUIShellChromeState::GetPanelVisibilityCommandId(invalidPanelId).empty());
|
||
|
|
EXPECT_TRUE(XCUIShellChromeState::GetPanelPreviewModeCommandId(invalidPanelId).empty());
|
||
|
|
EXPECT_TRUE(XCUIShellChromeState::GetViewToggleCommandId(invalidToggleId).empty());
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace
|