#include #include #include 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