diff --git a/tests/dGameTests/dComponentsTests/CMakeLists.txt b/tests/dGameTests/dComponentsTests/CMakeLists.txt index 060658f5..1d3cdb5e 100644 --- a/tests/dGameTests/dComponentsTests/CMakeLists.txt +++ b/tests/dGameTests/dComponentsTests/CMakeLists.txt @@ -2,8 +2,10 @@ set(DCOMPONENTS_TESTS "ActivityComponentTests.cpp" "BaseCombatAIComponentTests.cpp" "BouncerComponentTests.cpp" + "CollectibleComponentTests.cpp" "DestroyableComponentTests.cpp" "HavokVehiclePhysicsComponentTests.cpp" + "LUPExhibitComponentTests.cpp" "ModelComponentTests.cpp" "MovingPlatformComponentTests.cpp" "PetComponentTests.cpp" diff --git a/tests/dGameTests/dComponentsTests/CollectibleComponentTests.cpp b/tests/dGameTests/dComponentsTests/CollectibleComponentTests.cpp new file mode 100644 index 00000000..590ce0c4 --- /dev/null +++ b/tests/dGameTests/dComponentsTests/CollectibleComponentTests.cpp @@ -0,0 +1,106 @@ +#include "GameDependencies.h" +#include + +#include "BitStream.h" +#include "CollectibleComponent.h" +#include "Entity.h" +#include "eReplicaComponentType.h" + +class CollectibleTest : public GameDependenciesTest { +protected: + Entity* baseEntity; + CollectibleComponent* collectibleComponent; + CBITSTREAM + uint32_t flags = 0; + void SetUp() override { + SetUpDependencies(); + baseEntity = new Entity(15, GameDependenciesTest::info); + collectibleComponent = baseEntity->AddComponent(123); // Test with collectibleId = 123 + } + + void TearDown() override { + delete baseEntity; + TearDownDependencies(); + } +}; + +/** + * Test basic CollectibleComponent serialization + */ +TEST_F(CollectibleTest, CollectibleComponentSerializeBasicTest) { + bitStream.Reset(); + + // Serialize the collectible component + collectibleComponent->Serialize(bitStream, true); + + // Read back the serialized data + int16_t collectibleId; + bitStream.Read(collectibleId); + EXPECT_EQ(collectibleId, 123); // Should match the ID we set + + // Verify getter + EXPECT_EQ(collectibleComponent->GetCollectibleId(), 123); +} + +/** + * Test CollectibleComponent serialization with construction flag true + */ +TEST_F(CollectibleTest, CollectibleComponentSerializeConstructionTest) { + bitStream.Reset(); + + // Serialize with construction = true + collectibleComponent->Serialize(bitStream, true); + + // Read back the serialized data + int16_t collectibleId; + bitStream.Read(collectibleId); + EXPECT_EQ(collectibleId, 123); +} + +/** + * Test CollectibleComponent serialization with construction flag false + */ +TEST_F(CollectibleTest, CollectibleComponentSerializeRegularUpdateTest) { + bitStream.Reset(); + + // Serialize with construction = false + collectibleComponent->Serialize(bitStream, false); + + // Read back the serialized data + int16_t collectibleId; + bitStream.Read(collectibleId); + EXPECT_EQ(collectibleId, 123); // Should still serialize the same way +} + +/** + * Test CollectibleComponent with different collectible IDs + */ +TEST_F(CollectibleTest, CollectibleComponentDifferentIDsTest) { + // Create another entity with a different collectible ID + Entity* anotherEntity = new Entity(16, GameDependenciesTest::info); + CollectibleComponent* anotherCollectible = anotherEntity->AddComponent(456); + + bitStream.Reset(); + + // Serialize the first collectible + collectibleComponent->Serialize(bitStream, true); + + int16_t firstId; + bitStream.Read(firstId); + EXPECT_EQ(firstId, 123); + + bitStream.Reset(); + + // Serialize the second collectible + anotherCollectible->Serialize(bitStream, true); + + int16_t secondId; + bitStream.Read(secondId); + EXPECT_EQ(secondId, 456); + + // Verify getters + EXPECT_EQ(collectibleComponent->GetCollectibleId(), 123); + EXPECT_EQ(anotherCollectible->GetCollectibleId(), 456); + + delete anotherEntity; +} \ No newline at end of file diff --git a/tests/dGameTests/dComponentsTests/LUPExhibitComponentTests.cpp b/tests/dGameTests/dComponentsTests/LUPExhibitComponentTests.cpp new file mode 100644 index 00000000..fd78689f --- /dev/null +++ b/tests/dGameTests/dComponentsTests/LUPExhibitComponentTests.cpp @@ -0,0 +1,120 @@ +#include "GameDependencies.h" +#include + +#include "BitStream.h" +#include "LUPExhibitComponent.h" +#include "Entity.h" +#include "eReplicaComponentType.h" + +class LUPExhibitTest : public GameDependenciesTest { +protected: + Entity* baseEntity; + LUPExhibitComponent* lupExhibitComponent; + CBITSTREAM + uint32_t flags = 0; + void SetUp() override { + SetUpDependencies(); + baseEntity = new Entity(15, GameDependenciesTest::info); + lupExhibitComponent = baseEntity->AddComponent(); + } + + void TearDown() override { + delete baseEntity; + TearDownDependencies(); + } +}; + +/** + * Test LUPExhibitComponent initial serialization + */ +TEST_F(LUPExhibitTest, LUPExhibitComponentSerializeInitialUpdateTest) { + bitStream.Reset(); + + // Component should be dirty by default + lupExhibitComponent->Serialize(bitStream, true); + + // Read back the serialized data + bool isDirty; + bitStream.Read(isDirty); + EXPECT_EQ(isDirty, true); // Should be dirty by default + + LOT exhibitLOT; + bitStream.Read(exhibitLOT); + EXPECT_EQ(exhibitLOT, 11121); // First exhibit in the array +} + +/** + * Test LUPExhibitComponent regular update when not dirty + */ +TEST_F(LUPExhibitTest, LUPExhibitComponentSerializeNotDirtyTest) { + bitStream.Reset(); + + // First serialize to clear dirty flag + lupExhibitComponent->Serialize(bitStream, false); // This clears the dirty flag + bitStream.Reset(); + + // Now serialize again - should not be dirty + lupExhibitComponent->Serialize(bitStream, false); + + bool isDirty; + bitStream.Read(isDirty); + EXPECT_EQ(isDirty, false); // Should not be dirty after previous serialization +} + +/** + * Test LUPExhibitComponent cycling through exhibits + */ +TEST_F(LUPExhibitTest, LUPExhibitComponentNextExhibitTest) { + bitStream.Reset(); + + // Get first exhibit + lupExhibitComponent->Serialize(bitStream, true); + + bool isDirty; + bitStream.Read(isDirty); + EXPECT_EQ(isDirty, true); + + LOT firstExhibit; + bitStream.Read(firstExhibit); + EXPECT_EQ(firstExhibit, 11121); // First exhibit + + bitStream.Reset(); + + // Move to next exhibit + lupExhibitComponent->NextLUPExhibit(); + lupExhibitComponent->Serialize(bitStream, false); + + bitStream.Read(isDirty); + EXPECT_EQ(isDirty, true); // Should be dirty after NextLUPExhibit + + LOT secondExhibit; + bitStream.Read(secondExhibit); + EXPECT_EQ(secondExhibit, 11295); // Second exhibit +} + +/** + * Test LUPExhibitComponent cycling through all exhibits and wrapping around + */ +TEST_F(LUPExhibitTest, LUPExhibitComponentCycleAllExhibitsTest) { + bitStream.Reset(); + + // Expected exhibit sequence: 11121, 11295, 11423, 11979, then back to 11121 + std::array expectedLOTs = { 11121, 11295, 11423, 11979, 11121 }; + + for (size_t i = 0; i < expectedLOTs.size(); ++i) { + if (i > 0) { + lupExhibitComponent->NextLUPExhibit(); + } + + bitStream.Reset(); + lupExhibitComponent->Serialize(bitStream, false); + + bool isDirty; + bitStream.Read(isDirty); + EXPECT_EQ(isDirty, true); + + LOT exhibitLOT; + bitStream.Read(exhibitLOT); + EXPECT_EQ(exhibitLOT, expectedLOTs[i]) << "Exhibit " << i << " should be " << expectedLOTs[i]; + } +} \ No newline at end of file