Files
XCEngine/tests/Components/test_camera_light_component.cpp

96 lines
3.2 KiB
C++
Raw Normal View History

#include <gtest/gtest.h>
#include <XCEngine/Components/CameraComponent.h>
#include <XCEngine/Components/LightComponent.h>
2026-04-01 01:33:46 +08:00
#include <sstream>
using namespace XCEngine::Components;
namespace {
TEST(CameraComponent_Test, DefaultValues) {
CameraComponent camera;
EXPECT_EQ(camera.GetProjectionType(), CameraProjectionType::Perspective);
EXPECT_FLOAT_EQ(camera.GetFieldOfView(), 60.0f);
EXPECT_FLOAT_EQ(camera.GetOrthographicSize(), 5.0f);
EXPECT_FLOAT_EQ(camera.GetNearClipPlane(), 0.1f);
EXPECT_FLOAT_EQ(camera.GetFarClipPlane(), 1000.0f);
EXPECT_TRUE(camera.IsPrimary());
2026-04-01 01:33:46 +08:00
EXPECT_EQ(camera.GetClearMode(), CameraClearMode::Auto);
2026-04-01 01:42:06 +08:00
EXPECT_EQ(camera.GetCullingMask(), 0xFFFFFFFFu);
EXPECT_FLOAT_EQ(camera.GetViewportRect().x, 0.0f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().y, 0.0f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().width, 1.0f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().height, 1.0f);
}
TEST(CameraComponent_Test, SetterClamping) {
CameraComponent camera;
camera.SetFieldOfView(500.0f);
camera.SetOrthographicSize(-1.0f);
camera.SetNearClipPlane(-10.0f);
camera.SetFarClipPlane(0.0f);
EXPECT_FLOAT_EQ(camera.GetFieldOfView(), 179.0f);
EXPECT_FLOAT_EQ(camera.GetOrthographicSize(), 0.001f);
EXPECT_FLOAT_EQ(camera.GetNearClipPlane(), 0.001f);
EXPECT_GT(camera.GetFarClipPlane(), camera.GetNearClipPlane());
}
TEST(CameraComponent_Test, ViewportRectIsClampedToNormalizedSurfaceRange) {
CameraComponent camera;
camera.SetViewportRect(XCEngine::Math::Rect(-0.25f, 0.2f, 1.5f, 1.1f));
EXPECT_FLOAT_EQ(camera.GetViewportRect().x, 0.0f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().y, 0.2f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().width, 1.0f);
EXPECT_FLOAT_EQ(camera.GetViewportRect().height, 0.8f);
}
TEST(CameraComponent_Test, SerializeRoundTripPreservesViewportAndClearState) {
2026-04-01 01:33:46 +08:00
CameraComponent source;
source.SetClearMode(CameraClearMode::DepthOnly);
2026-04-01 01:42:06 +08:00
source.SetCullingMask(0x0000000Fu);
source.SetViewportRect(XCEngine::Math::Rect(0.25f, 0.125f, 0.5f, 0.625f));
2026-04-01 01:33:46 +08:00
std::stringstream stream;
source.Serialize(stream);
CameraComponent target;
target.Deserialize(stream);
EXPECT_EQ(target.GetClearMode(), CameraClearMode::DepthOnly);
2026-04-01 01:42:06 +08:00
EXPECT_EQ(target.GetCullingMask(), 0x0000000Fu);
EXPECT_FLOAT_EQ(target.GetViewportRect().x, 0.25f);
EXPECT_FLOAT_EQ(target.GetViewportRect().y, 0.125f);
EXPECT_FLOAT_EQ(target.GetViewportRect().width, 0.5f);
EXPECT_FLOAT_EQ(target.GetViewportRect().height, 0.625f);
2026-04-01 01:33:46 +08:00
}
TEST(LightComponent_Test, DefaultValues) {
LightComponent light;
EXPECT_EQ(light.GetLightType(), LightType::Directional);
EXPECT_FLOAT_EQ(light.GetIntensity(), 1.0f);
EXPECT_FLOAT_EQ(light.GetRange(), 10.0f);
EXPECT_FLOAT_EQ(light.GetSpotAngle(), 30.0f);
EXPECT_FALSE(light.GetCastsShadows());
}
TEST(LightComponent_Test, SetterClamping) {
LightComponent light;
light.SetIntensity(-3.0f);
light.SetRange(-1.0f);
light.SetSpotAngle(500.0f);
EXPECT_FLOAT_EQ(light.GetIntensity(), 0.0f);
EXPECT_FLOAT_EQ(light.GetRange(), 0.001f);
EXPECT_FLOAT_EQ(light.GetSpotAngle(), 179.0f);
}
} // namespace