mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-09-06 07:18:42 +00:00
103 lines
2.9 KiB
C++
103 lines
2.9 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "SkillComponent.h"
|
|
#include "Entity.h"
|
|
#include "BitStream.h"
|
|
#include "GameDependencies.h"
|
|
|
|
class SkillComponentTest : public GameDependenciesTest {
|
|
protected:
|
|
void SetUp() override {
|
|
SetUpDependencies();
|
|
}
|
|
|
|
void TearDown() override {
|
|
TearDownDependencies();
|
|
}
|
|
};
|
|
|
|
TEST_F(SkillComponentTest, SerializeInitialUpdate) {
|
|
Entity testEntity(15, info);
|
|
SkillComponent skillComponent(&testEntity);
|
|
|
|
RakNet::BitStream bitStream;
|
|
skillComponent.Serialize(bitStream, true);
|
|
|
|
// Read the data manually to validate serialization format
|
|
bitStream.ResetReadPointer();
|
|
|
|
bool skillFlag;
|
|
ASSERT_TRUE(bitStream.Read(skillFlag));
|
|
EXPECT_FALSE(skillFlag); // Always writes 0 for initial update
|
|
}
|
|
|
|
TEST_F(SkillComponentTest, SerializeRegularUpdate) {
|
|
Entity testEntity(15, info);
|
|
SkillComponent skillComponent(&testEntity);
|
|
|
|
RakNet::BitStream bitStream;
|
|
skillComponent.Serialize(bitStream, false);
|
|
|
|
// Regular updates should not write anything for SkillComponent
|
|
bitStream.ResetReadPointer();
|
|
EXPECT_EQ(bitStream.GetNumberOfUnreadBits(), 0);
|
|
}
|
|
|
|
TEST_F(SkillComponentTest, SerializeConsistentBehavior) {
|
|
Entity testEntity(15, info);
|
|
SkillComponent skillComponent(&testEntity);
|
|
|
|
// Test that multiple initial serializations are consistent
|
|
RakNet::BitStream firstStream, secondStream;
|
|
|
|
skillComponent.Serialize(firstStream, true);
|
|
skillComponent.Serialize(secondStream, true);
|
|
|
|
EXPECT_EQ(firstStream.GetNumberOfBitsUsed(), secondStream.GetNumberOfBitsUsed());
|
|
EXPECT_EQ(firstStream.GetNumberOfBitsUsed(), 1); // Should always be 1 bit (false)
|
|
|
|
firstStream.ResetReadPointer();
|
|
secondStream.ResetReadPointer();
|
|
|
|
bool firstFlag, secondFlag;
|
|
ASSERT_TRUE(firstStream.Read(firstFlag));
|
|
ASSERT_TRUE(secondStream.Read(secondFlag));
|
|
EXPECT_FALSE(firstFlag);
|
|
EXPECT_FALSE(secondFlag);
|
|
EXPECT_EQ(firstFlag, secondFlag);
|
|
}
|
|
|
|
TEST_F(SkillComponentTest, GetUniqueSkillId) {
|
|
Entity testEntity(15, info);
|
|
SkillComponent skillComponent(&testEntity);
|
|
|
|
// Test that unique skill IDs increment
|
|
uint32_t firstId = skillComponent.GetUniqueSkillId();
|
|
uint32_t secondId = skillComponent.GetUniqueSkillId();
|
|
uint32_t thirdId = skillComponent.GetUniqueSkillId();
|
|
|
|
EXPECT_EQ(secondId, firstId + 1);
|
|
EXPECT_EQ(thirdId, firstId + 2);
|
|
EXPECT_GT(firstId, 0); // Should start from at least 1
|
|
}
|
|
|
|
TEST_F(SkillComponentTest, SerializeAfterSkillUse) {
|
|
Entity testEntity(15, info);
|
|
SkillComponent skillComponent(&testEntity);
|
|
|
|
// Generate some skill IDs to simulate skill usage
|
|
skillComponent.GetUniqueSkillId();
|
|
skillComponent.GetUniqueSkillId();
|
|
skillComponent.GetUniqueSkillId();
|
|
|
|
// Serialization behavior should still be the same
|
|
RakNet::BitStream bitStream;
|
|
skillComponent.Serialize(bitStream, true);
|
|
|
|
bitStream.ResetReadPointer();
|
|
|
|
bool skillFlag;
|
|
ASSERT_TRUE(bitStream.Read(skillFlag));
|
|
EXPECT_FALSE(skillFlag); // Still writes 0 regardless of internal state
|
|
}
|