refactor(editor): isolate scene backend boundary
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#include "Hierarchy/HierarchyModel.h"
|
||||
#include "Scene/EditorSceneBridge.h"
|
||||
#include "Scene/EngineEditorSceneBackend.h"
|
||||
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <chrono>
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
namespace {
|
||||
@@ -61,6 +62,10 @@ private:
|
||||
std::filesystem::path m_root = {};
|
||||
};
|
||||
|
||||
std::unique_ptr<EditorSceneBackend> CreateTestSceneBackend() {
|
||||
return CreateEngineEditorSceneBackend();
|
||||
}
|
||||
|
||||
TEST(HierarchySceneBindingTests, BuildFromSceneUsesRealGameObjectIds) {
|
||||
ScopedSceneManagerReset reset = {};
|
||||
|
||||
@@ -97,8 +102,9 @@ TEST(HierarchySceneBindingTests, DuplicateGameObjectClonesHierarchyIntoScene) {
|
||||
GameObject* child = scene->CreateGameObject("Child", root);
|
||||
ASSERT_NE(child, nullptr);
|
||||
|
||||
const std::unique_ptr<EditorSceneBackend> backend = CreateTestSceneBackend();
|
||||
const std::string duplicateId =
|
||||
DuplicateEditorGameObject(MakeEditorGameObjectItemId(root->GetID()));
|
||||
backend->DuplicateGameObject(MakeEditorGameObjectItemId(root->GetID()));
|
||||
ASSERT_FALSE(duplicateId.empty());
|
||||
|
||||
const HierarchyModel model = HierarchyModel::BuildFromScene(scene);
|
||||
@@ -124,7 +130,8 @@ TEST(HierarchySceneBindingTests, RenameGameObjectUpdatesRealSceneAndProjection)
|
||||
|
||||
const std::string itemId =
|
||||
MakeEditorGameObjectItemId(gameObject->GetID());
|
||||
ASSERT_TRUE(RenameEditorGameObject(itemId, "PlayerCamera"));
|
||||
const std::unique_ptr<EditorSceneBackend> backend = CreateTestSceneBackend();
|
||||
ASSERT_TRUE(backend->RenameGameObject(itemId, "PlayerCamera"));
|
||||
EXPECT_EQ(gameObject->GetName(), "PlayerCamera");
|
||||
|
||||
const HierarchyModel model = HierarchyModel::BuildFromScene(scene);
|
||||
@@ -147,7 +154,8 @@ TEST(HierarchySceneBindingTests, ReparentAndMoveToRootOperateOnRealScene) {
|
||||
GameObject* child = scene->CreateGameObject("Child", parentA);
|
||||
ASSERT_NE(child, nullptr);
|
||||
|
||||
ASSERT_TRUE(ReparentEditorGameObject(
|
||||
const std::unique_ptr<EditorSceneBackend> backend = CreateTestSceneBackend();
|
||||
ASSERT_TRUE(backend->ReparentGameObject(
|
||||
MakeEditorGameObjectItemId(child->GetID()),
|
||||
MakeEditorGameObjectItemId(parentB->GetID())));
|
||||
EXPECT_EQ(child->GetParent(), parentB);
|
||||
@@ -159,7 +167,7 @@ TEST(HierarchySceneBindingTests, ReparentAndMoveToRootOperateOnRealScene) {
|
||||
ASSERT_EQ(parentBNode->children.size(), 1u);
|
||||
EXPECT_EQ(parentBNode->children.front().label, "Child");
|
||||
|
||||
ASSERT_TRUE(MoveEditorGameObjectToRoot(
|
||||
ASSERT_TRUE(backend->MoveGameObjectToRoot(
|
||||
MakeEditorGameObjectItemId(child->GetID())));
|
||||
EXPECT_EQ(child->GetParent(), nullptr);
|
||||
|
||||
@@ -181,15 +189,16 @@ TEST(HierarchySceneBindingTests, EnsureStartupSceneLoadsMainSceneAndSetsActive)
|
||||
scene.Save(scenePath.string());
|
||||
}
|
||||
|
||||
const std::unique_ptr<EditorSceneBackend> backend = CreateTestSceneBackend();
|
||||
const EditorStartupSceneResult result =
|
||||
EnsureEditorStartupScene(projectRoot.Root());
|
||||
backend->EnsureStartupScene(projectRoot.Root());
|
||||
EXPECT_TRUE(result.ready);
|
||||
EXPECT_TRUE(result.loadedFromDisk);
|
||||
ASSERT_NE(GetActiveEditorScene(), nullptr);
|
||||
EXPECT_EQ(GetActiveEditorScene()->GetName(), "Main");
|
||||
ASSERT_NE(backend->GetActiveScene(), nullptr);
|
||||
EXPECT_EQ(backend->GetActiveScene()->GetName(), "Main");
|
||||
|
||||
const HierarchyModel model =
|
||||
HierarchyModel::BuildFromScene(GetActiveEditorScene());
|
||||
HierarchyModel::BuildFromScene(backend->GetActiveScene());
|
||||
EXPECT_FALSE(model.Empty());
|
||||
|
||||
SceneManager& sceneManager = SceneManager::Get();
|
||||
|
||||
Reference in New Issue
Block a user