Prepare script lifecycle and data layer
This commit is contained in:
@@ -27,9 +27,22 @@ public:
|
||||
|
||||
bool m_awakeCalled = false;
|
||||
bool m_updateCalled = false;
|
||||
bool m_onDestroyCalled = false;
|
||||
int m_startCount = 0;
|
||||
int m_updateCount = 0;
|
||||
int m_onDestroyCount = 0;
|
||||
int* m_externalOnDestroyCount = nullptr;
|
||||
|
||||
void Awake() override { m_awakeCalled = true; }
|
||||
void Update(float deltaTime) override { m_updateCalled = true; }
|
||||
void Start() override { ++m_startCount; }
|
||||
void Update(float deltaTime) override { m_updateCalled = true; ++m_updateCount; }
|
||||
void OnDestroy() override {
|
||||
m_onDestroyCalled = true;
|
||||
++m_onDestroyCount;
|
||||
if (m_externalOnDestroyCount) {
|
||||
++(*m_externalOnDestroyCount);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_customName;
|
||||
@@ -111,6 +124,17 @@ TEST_F(SceneTest, DestroyGameObject_WithChildren) {
|
||||
EXPECT_EQ(testScene->Find("Child"), nullptr);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, DestroyGameObject_CallsOnDestroyOnce) {
|
||||
GameObject* go = testScene->CreateGameObject("DestroyMe");
|
||||
TestComponent* comp = go->AddComponent<TestComponent>();
|
||||
int destroyCount = 0;
|
||||
comp->m_externalOnDestroyCount = &destroyCount;
|
||||
|
||||
testScene->DestroyGameObject(go);
|
||||
|
||||
EXPECT_EQ(destroyCount, 1);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, Find_Exists) {
|
||||
testScene->CreateGameObject("FindMe");
|
||||
|
||||
@@ -163,6 +187,28 @@ TEST_F(SceneTest, Update_SkipsInactiveObjects) {
|
||||
EXPECT_FALSE(comp->m_updateCalled);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, Update_RecursivelyUpdatesChildObjects) {
|
||||
GameObject* parent = testScene->CreateGameObject("Parent");
|
||||
GameObject* child = testScene->CreateGameObject("Child", parent);
|
||||
TestComponent* comp = child->AddComponent<TestComponent>();
|
||||
|
||||
testScene->Update(0.016f);
|
||||
|
||||
EXPECT_TRUE(comp->m_updateCalled);
|
||||
EXPECT_EQ(comp->m_updateCount, 1);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, Update_CallsStartOnlyOnceBeforeUpdate) {
|
||||
GameObject* go = testScene->CreateGameObject("TestObject");
|
||||
TestComponent* comp = go->AddComponent<TestComponent>();
|
||||
|
||||
testScene->Update(0.016f);
|
||||
testScene->Update(0.016f);
|
||||
|
||||
EXPECT_EQ(comp->m_startCount, 1);
|
||||
EXPECT_EQ(comp->m_updateCount, 2);
|
||||
}
|
||||
|
||||
TEST(Scene_Test, IsActive_DefaultTrue) {
|
||||
Scene s;
|
||||
|
||||
@@ -415,6 +461,27 @@ TEST_F(SceneTest, SerializeToString_And_DeserializeFromString_PreservesHierarchy
|
||||
EXPECT_TRUE(loadedCamera->IsPrimary());
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, SerializeToString_And_DeserializeFromString_PreservesUUIDs) {
|
||||
GameObject* parent = testScene->CreateGameObject("Parent");
|
||||
GameObject* child = testScene->CreateGameObject("Child", parent);
|
||||
|
||||
const uint64_t parentUUID = parent->GetUUID();
|
||||
const uint64_t childUUID = child->GetUUID();
|
||||
|
||||
const std::string serialized = testScene->SerializeToString();
|
||||
|
||||
Scene loadedScene;
|
||||
loadedScene.DeserializeFromString(serialized);
|
||||
|
||||
GameObject* loadedParent = loadedScene.Find("Parent");
|
||||
GameObject* loadedChild = loadedScene.Find("Child");
|
||||
ASSERT_NE(loadedParent, nullptr);
|
||||
ASSERT_NE(loadedChild, nullptr);
|
||||
|
||||
EXPECT_EQ(loadedParent->GetUUID(), parentUUID);
|
||||
EXPECT_EQ(loadedChild->GetUUID(), childUUID);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, Save_ContainsHierarchyAndComponentEntries) {
|
||||
GameObject* parent = testScene->CreateGameObject("Parent");
|
||||
GameObject* child = testScene->CreateGameObject("Child", parent);
|
||||
|
||||
Reference in New Issue
Block a user