Files
XCEngine/tests/Scene/test_scene_manager.cpp

175 lines
4.5 KiB
C++
Raw Normal View History

#include <gtest/gtest.h>
#include <XCEngine/Scene/SceneManager.h>
#include <XCEngine/Components/GameObject.h>
using namespace XCEngine::Components;
namespace {
class SceneManagerTest : public ::testing::Test {
protected:
void TearDown() override {
auto scenes = SceneManager::Get().GetAllScenes();
for (auto* scene : scenes) {
SceneManager::Get().UnloadScene(scene);
}
}
};
TEST(SceneManager_Test, Get_ReturnsSingleton) {
SceneManager& sm1 = SceneManager::Get();
SceneManager& sm2 = SceneManager::Get();
EXPECT_EQ(&sm1, &sm2);
}
TEST(SceneManager_Test, CreateScene_Simple) {
SceneManager& sm = SceneManager::Get();
Scene* scene = sm.CreateScene("TestScene");
EXPECT_NE(scene, nullptr);
EXPECT_EQ(scene->GetName(), "TestScene");
}
TEST(SceneManager_Test, CreateScene_AssignsName) {
SceneManager& sm = SceneManager::Get();
Scene* scene = sm.CreateScene("MyScene");
EXPECT_EQ(scene->GetName(), "MyScene");
}
TEST(SceneManager_Test, GetScene_Exists) {
SceneManager& sm = SceneManager::Get();
sm.CreateScene("TestScene");
Scene* found = sm.GetScene("TestScene");
EXPECT_NE(found, nullptr);
EXPECT_EQ(found->GetName(), "TestScene");
}
TEST(SceneManager_Test, GetScene_NotExists) {
SceneManager& sm = SceneManager::Get();
Scene* found = sm.GetScene("NonExistent");
EXPECT_EQ(found, nullptr);
}
TEST_F(SceneManagerTest, GetAllScenes_ReturnsAll) {
SceneManager& sm = SceneManager::Get();
size_t beforeCount = sm.GetAllScenes().size();
sm.CreateScene("GetAllScenes_TestScene1");
sm.CreateScene("GetAllScenes_TestScene2");
sm.CreateScene("GetAllScenes_TestScene3");
auto scenes = sm.GetAllScenes();
EXPECT_EQ(scenes.size(), beforeCount + 3);
}
TEST(SceneManager_Test, SetActiveScene) {
SceneManager& sm = SceneManager::Get();
Scene* scene1 = sm.CreateScene("Scene1");
Scene* scene2 = sm.CreateScene("Scene2");
sm.SetActiveScene(scene2);
EXPECT_EQ(sm.GetActiveScene(), scene2);
}
TEST(SceneManager_Test, SetActiveScene_ByName) {
SceneManager& sm = SceneManager::Get();
sm.CreateScene("Scene1");
sm.CreateScene("Scene2");
sm.SetActiveScene("Scene2");
EXPECT_EQ(sm.GetActiveScene()->GetName(), "Scene2");
}
TEST(SceneManager_Test, GetActiveScene_InitiallyFirst) {
SceneManager& sm = SceneManager::Get();
auto scenes = sm.GetAllScenes();
for (auto* scene : scenes) {
sm.UnloadScene(scene);
}
Scene* scene1 = sm.CreateScene("First");
EXPECT_EQ(sm.GetActiveScene(), scene1);
}
TEST(SceneManager_Test, UnloadScene) {
SceneManager& sm = SceneManager::Get();
Scene* scene = sm.CreateScene("ToUnload");
sm.UnloadScene(scene);
EXPECT_EQ(sm.GetScene("ToUnload"), nullptr);
}
TEST(SceneManager_Test, UnloadScene_ByName) {
SceneManager& sm = SceneManager::Get();
sm.CreateScene("ToUnload");
sm.UnloadScene("ToUnload");
EXPECT_EQ(sm.GetScene("ToUnload"), nullptr);
}
TEST(SceneManager_Test, OnSceneLoaded_Event) {
SceneManager& sm = SceneManager::Get();
bool eventFired = false;
uint64_t subId = sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
eventFired = true;
});
sm.CreateScene("TestScene");
EXPECT_TRUE(eventFired);
sm.OnSceneLoaded().Unsubscribe(subId);
}
TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
SceneManager& sm = SceneManager::Get();
Scene* scene1 = sm.CreateScene("Scene1");
Scene* scene2 = sm.CreateScene("Scene2");
bool eventFired = false;
uint64_t subId = sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
eventFired = true;
});
sm.SetActiveScene(scene2);
EXPECT_TRUE(eventFired);
sm.OnActiveSceneChanged().Unsubscribe(subId);
}
TEST(SceneManager_Test, CreateScene_MultipleScenes) {
SceneManager& sm = SceneManager::Get();
Scene* scene1 = sm.CreateScene("Scene1");
Scene* scene2 = sm.CreateScene("Scene2");
Scene* scene3 = sm.CreateScene("Scene3");
EXPECT_NE(scene1, scene2);
EXPECT_NE(scene2, scene3);
EXPECT_NE(scene1, scene3);
}
TEST(SceneManager_Test, SetActiveScene_ToNullptr) {
SceneManager& sm = SceneManager::Get();
Scene* scene1 = sm.CreateScene("Scene1");
Scene* scene2 = sm.CreateScene("Scene2");
sm.SetActiveScene(scene2);
sm.SetActiveScene(nullptr);
EXPECT_EQ(sm.GetActiveScene(), nullptr);
}
} // namespace