Formalize scene viewport chrome and presentation helpers
This commit is contained in:
113
tests/editor/test_scene_viewport_chrome.cpp
Normal file
113
tests/editor/test_scene_viewport_chrome.cpp
Normal file
@@ -0,0 +1,113 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "Core/IUndoManager.h"
|
||||
#include "Viewport/SceneViewportChrome.h"
|
||||
#include "Viewport/SceneViewportMoveGizmo.h"
|
||||
#include "Viewport/SceneViewportRotateGizmo.h"
|
||||
#include "Viewport/SceneViewportScaleGizmo.h"
|
||||
|
||||
namespace {
|
||||
|
||||
using XCEngine::Editor::BuildSceneViewportToolCommand;
|
||||
using XCEngine::Editor::ExecuteSceneViewportToolCommand;
|
||||
using XCEngine::Editor::SceneViewportToolCommand;
|
||||
using XCEngine::Editor::SceneViewportToolMode;
|
||||
using XCEngine::Editor::SceneViewportToolOverlayResult;
|
||||
using XCEngine::Editor::SceneViewportToolShortcutAction;
|
||||
|
||||
class StubUndoManager : public XCEngine::Editor::IUndoManager {
|
||||
public:
|
||||
void ClearHistory() override {}
|
||||
bool CanUndo() const override { return false; }
|
||||
bool CanRedo() const override { return false; }
|
||||
const std::string& GetUndoLabel() const override { return empty; }
|
||||
const std::string& GetRedoLabel() const override { return empty; }
|
||||
void Undo() override {}
|
||||
void Redo() override {}
|
||||
XCEngine::Editor::UndoStateSnapshot CaptureCurrentState() const override { return {}; }
|
||||
void PushCommand(const std::string&, XCEngine::Editor::UndoStateSnapshot, XCEngine::Editor::UndoStateSnapshot) override {}
|
||||
void BeginInteractiveChange(const std::string&) override {}
|
||||
bool HasPendingInteractiveChange() const override { return false; }
|
||||
void FinalizeInteractiveChange() override {}
|
||||
void CancelInteractiveChange() override {}
|
||||
|
||||
private:
|
||||
std::string empty;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(SceneViewportChromeTest, ToolCommandUsesOverlayClickAsFullToolSwitch) {
|
||||
SceneViewportToolOverlayResult overlay = {};
|
||||
overlay.clicked = true;
|
||||
overlay.clickedTool = SceneViewportToolMode::Transform;
|
||||
|
||||
const SceneViewportToolShortcutAction shortcut = {};
|
||||
const SceneViewportToolCommand command = BuildSceneViewportToolCommand(overlay, shortcut);
|
||||
|
||||
EXPECT_TRUE(command.HasAction());
|
||||
EXPECT_EQ(command.targetTool, SceneViewportToolMode::Transform);
|
||||
EXPECT_TRUE(command.cancelMoveGizmo);
|
||||
EXPECT_TRUE(command.cancelRotateGizmo);
|
||||
EXPECT_TRUE(command.cancelScaleGizmo);
|
||||
}
|
||||
|
||||
TEST(SceneViewportChromeTest, ToolCommandUsesShortcutWhenOverlayDidNotTrigger) {
|
||||
const SceneViewportToolOverlayResult overlay = {};
|
||||
|
||||
SceneViewportToolShortcutAction shortcut = {};
|
||||
shortcut.triggered = true;
|
||||
shortcut.targetTool = SceneViewportToolMode::Rotate;
|
||||
shortcut.cancelMoveGizmo = true;
|
||||
shortcut.cancelScaleGizmo = true;
|
||||
|
||||
const SceneViewportToolCommand command = BuildSceneViewportToolCommand(overlay, shortcut);
|
||||
|
||||
EXPECT_TRUE(command.HasAction());
|
||||
EXPECT_EQ(command.targetTool, SceneViewportToolMode::Rotate);
|
||||
EXPECT_TRUE(command.cancelMoveGizmo);
|
||||
EXPECT_FALSE(command.cancelRotateGizmo);
|
||||
EXPECT_TRUE(command.cancelScaleGizmo);
|
||||
}
|
||||
|
||||
TEST(SceneViewportChromeTest, ShortcutOverridesOverlayTargetWhilePreservingCancelUnion) {
|
||||
SceneViewportToolOverlayResult overlay = {};
|
||||
overlay.clicked = true;
|
||||
overlay.clickedTool = SceneViewportToolMode::Move;
|
||||
|
||||
SceneViewportToolShortcutAction shortcut = {};
|
||||
shortcut.triggered = true;
|
||||
shortcut.targetTool = SceneViewportToolMode::Scale;
|
||||
shortcut.cancelMoveGizmo = true;
|
||||
shortcut.cancelRotateGizmo = true;
|
||||
|
||||
const SceneViewportToolCommand command = BuildSceneViewportToolCommand(overlay, shortcut);
|
||||
|
||||
EXPECT_TRUE(command.HasAction());
|
||||
EXPECT_EQ(command.targetTool, SceneViewportToolMode::Scale);
|
||||
EXPECT_TRUE(command.cancelMoveGizmo);
|
||||
EXPECT_TRUE(command.cancelRotateGizmo);
|
||||
EXPECT_TRUE(command.cancelScaleGizmo);
|
||||
}
|
||||
|
||||
TEST(SceneViewportChromeTest, ExecuteToolCommandUpdatesToolModeWhenTriggered) {
|
||||
StubUndoManager undoManager = {};
|
||||
XCEngine::Editor::SceneViewportMoveGizmo moveGizmo = {};
|
||||
XCEngine::Editor::SceneViewportRotateGizmo rotateGizmo = {};
|
||||
XCEngine::Editor::SceneViewportScaleGizmo scaleGizmo = {};
|
||||
SceneViewportToolMode toolMode = SceneViewportToolMode::Move;
|
||||
|
||||
SceneViewportToolCommand command = {};
|
||||
command.triggered = true;
|
||||
command.targetTool = SceneViewportToolMode::ViewMove;
|
||||
|
||||
ExecuteSceneViewportToolCommand(
|
||||
command,
|
||||
undoManager,
|
||||
moveGizmo,
|
||||
rotateGizmo,
|
||||
scaleGizmo,
|
||||
toolMode);
|
||||
|
||||
EXPECT_EQ(toolMode, SceneViewportToolMode::ViewMove);
|
||||
}
|
||||
Reference in New Issue
Block a user