172 lines
4.2 KiB
C++
172 lines
4.2 KiB
C++
|
|
#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(SceneManager_Test, GetAllScenes_ReturnsAll) {
|
||
|
|
SceneManager& sm = SceneManager::Get();
|
||
|
|
sm.CreateScene("Scene1");
|
||
|
|
sm.CreateScene("Scene2");
|
||
|
|
sm.CreateScene("Scene3");
|
||
|
|
|
||
|
|
auto scenes = sm.GetAllScenes();
|
||
|
|
|
||
|
|
EXPECT_EQ(scenes.size(), 3u);
|
||
|
|
}
|
||
|
|
|
||
|
|
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;
|
||
|
|
sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
|
||
|
|
eventFired = true;
|
||
|
|
});
|
||
|
|
|
||
|
|
sm.CreateScene("TestScene");
|
||
|
|
|
||
|
|
EXPECT_TRUE(eventFired);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
|
||
|
|
SceneManager& sm = SceneManager::Get();
|
||
|
|
Scene* scene1 = sm.CreateScene("Scene1");
|
||
|
|
Scene* scene2 = sm.CreateScene("Scene2");
|
||
|
|
|
||
|
|
bool eventFired = false;
|
||
|
|
sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
|
||
|
|
eventFired = true;
|
||
|
|
});
|
||
|
|
|
||
|
|
sm.SetActiveScene(scene2);
|
||
|
|
|
||
|
|
EXPECT_TRUE(eventFired);
|
||
|
|
}
|
||
|
|
|
||
|
|
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
|