docs: 更新 containers 和 threading 模块文档
- containers: 更新 string 类的多个方法文档 - threading: 更新 mutex 和 task-group 方法文档
This commit is contained in:
@@ -330,6 +330,65 @@ TEST_F(SceneTest, Save_And_Load_PreservesHierarchyAndComponents) {
|
||||
std::filesystem::remove(scenePath);
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, SerializeToString_And_DeserializeFromString_PreservesHierarchyAndComponents) {
|
||||
testScene->SetName("Round Trip Scene");
|
||||
testScene->SetActive(false);
|
||||
|
||||
GameObject* parent = testScene->CreateGameObject("Parent");
|
||||
parent->GetTransform()->SetLocalPosition(Vector3(2.0f, 4.0f, 6.0f));
|
||||
parent->GetTransform()->SetLocalScale(Vector3(1.5f, 1.5f, 1.5f));
|
||||
|
||||
auto* light = parent->AddComponent<LightComponent>();
|
||||
light->SetLightType(LightType::Point);
|
||||
light->SetIntensity(4.0f);
|
||||
light->SetRange(20.0f);
|
||||
light->SetCastsShadows(true);
|
||||
|
||||
GameObject* child = testScene->CreateGameObject("Child Camera", parent);
|
||||
child->GetTransform()->SetLocalPosition(Vector3(1.0f, 0.0f, -3.0f));
|
||||
|
||||
auto* camera = child->AddComponent<CameraComponent>();
|
||||
camera->SetProjectionType(CameraProjectionType::Perspective);
|
||||
camera->SetFieldOfView(72.0f);
|
||||
camera->SetNearClipPlane(0.2f);
|
||||
camera->SetFarClipPlane(512.0f);
|
||||
camera->SetPrimary(true);
|
||||
|
||||
const std::string serialized = testScene->SerializeToString();
|
||||
|
||||
Scene loadedScene;
|
||||
loadedScene.DeserializeFromString(serialized);
|
||||
|
||||
EXPECT_EQ(loadedScene.GetName(), "Round Trip Scene");
|
||||
EXPECT_FALSE(loadedScene.IsActive());
|
||||
EXPECT_EQ(loadedScene.GetRootGameObjects().size(), 1u);
|
||||
|
||||
GameObject* loadedParent = loadedScene.Find("Parent");
|
||||
GameObject* loadedChild = loadedScene.Find("Child Camera");
|
||||
ASSERT_NE(loadedParent, nullptr);
|
||||
ASSERT_NE(loadedChild, nullptr);
|
||||
|
||||
EXPECT_EQ(loadedChild->GetParent(), loadedParent);
|
||||
EXPECT_EQ(loadedParent->GetTransform()->GetLocalPosition(), Vector3(2.0f, 4.0f, 6.0f));
|
||||
EXPECT_EQ(loadedParent->GetTransform()->GetLocalScale(), Vector3(1.5f, 1.5f, 1.5f));
|
||||
EXPECT_EQ(loadedChild->GetTransform()->GetPosition(), Vector3(3.5f, 4.0f, 1.5f));
|
||||
|
||||
auto* loadedLight = loadedParent->GetComponent<LightComponent>();
|
||||
ASSERT_NE(loadedLight, nullptr);
|
||||
EXPECT_EQ(loadedLight->GetLightType(), LightType::Point);
|
||||
EXPECT_FLOAT_EQ(loadedLight->GetIntensity(), 4.0f);
|
||||
EXPECT_FLOAT_EQ(loadedLight->GetRange(), 20.0f);
|
||||
EXPECT_TRUE(loadedLight->GetCastsShadows());
|
||||
|
||||
auto* loadedCamera = loadedChild->GetComponent<CameraComponent>();
|
||||
ASSERT_NE(loadedCamera, nullptr);
|
||||
EXPECT_EQ(loadedCamera->GetProjectionType(), CameraProjectionType::Perspective);
|
||||
EXPECT_FLOAT_EQ(loadedCamera->GetFieldOfView(), 72.0f);
|
||||
EXPECT_FLOAT_EQ(loadedCamera->GetNearClipPlane(), 0.2f);
|
||||
EXPECT_FLOAT_EQ(loadedCamera->GetFarClipPlane(), 512.0f);
|
||||
EXPECT_TRUE(loadedCamera->IsPrimary());
|
||||
}
|
||||
|
||||
TEST_F(SceneTest, Save_ContainsHierarchyAndComponentEntries) {
|
||||
GameObject* parent = testScene->CreateGameObject("Parent");
|
||||
GameObject* child = testScene->CreateGameObject("Child", parent);
|
||||
|
||||
Reference in New Issue
Block a user