mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-09-07 07:41:26 +00:00
Continue adding component tests: AchievementVendor, Character, QuickBuild, Script, Skill, Vendor tests (compilation fixes needed)
Co-authored-by: aronwk-aaron <26027722+aronwk-aaron@users.noreply.github.com>
This commit is contained in:
148
tests/dGameTests/dComponentsTests/ScriptComponentTests.cpp
Normal file
148
tests/dGameTests/dComponentsTests/ScriptComponentTests.cpp
Normal file
@@ -0,0 +1,148 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "ScriptComponent.h"
|
||||
#include "Entity.h"
|
||||
#include "BitStream.h"
|
||||
#include "GameDependencies.h"
|
||||
|
||||
class ScriptComponentTest : public GameDependenciesTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SetUpDependencies();
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
TearDownDependencies();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeInitialUpdateNoNetworkSettings) {
|
||||
Entity testEntity(15, info);
|
||||
ScriptComponent scriptComponent(&testEntity, "", false);
|
||||
|
||||
RakNet::BitStream bitStream;
|
||||
scriptComponent.Serialize(bitStream, true);
|
||||
|
||||
// Read the data manually to validate serialization format
|
||||
bitStream.ResetReadPointer();
|
||||
|
||||
bool hasNetworkSettings;
|
||||
ASSERT_TRUE(bitStream.Read(hasNetworkSettings));
|
||||
EXPECT_FALSE(hasNetworkSettings); // No network settings by default
|
||||
}
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeRegularUpdate) {
|
||||
Entity testEntity(15, info);
|
||||
ScriptComponent scriptComponent(&testEntity, "", false);
|
||||
|
||||
RakNet::BitStream bitStream;
|
||||
scriptComponent.Serialize(bitStream, false);
|
||||
|
||||
// Regular updates should not write anything for ScriptComponent
|
||||
bitStream.ResetReadPointer();
|
||||
EXPECT_EQ(bitStream.GetNumberOfUnreadBits(), 0);
|
||||
}
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeWithNetworkSettings) {
|
||||
Entity testEntity(15, info);
|
||||
|
||||
// Add some network settings to the entity
|
||||
testEntity.SetNetworkVar<float>(u"test_float", 123.45f);
|
||||
testEntity.SetNetworkVar<int32_t>(u"test_int", 42);
|
||||
|
||||
ScriptComponent scriptComponent(&testEntity, "", false);
|
||||
|
||||
RakNet::BitStream bitStream;
|
||||
scriptComponent.Serialize(bitStream, true);
|
||||
|
||||
bitStream.ResetReadPointer();
|
||||
|
||||
bool hasNetworkSettings;
|
||||
ASSERT_TRUE(bitStream.Read(hasNetworkSettings));
|
||||
EXPECT_TRUE(hasNetworkSettings); // Should have network settings
|
||||
|
||||
uint32_t ldfDataSize;
|
||||
ASSERT_TRUE(bitStream.Read(ldfDataSize));
|
||||
EXPECT_GT(ldfDataSize, 0); // Should have some data
|
||||
|
||||
// Verify the LDF data is present
|
||||
RakNet::BitStream ldfStream;
|
||||
ASSERT_TRUE(bitStream.Read(ldfStream, ldfDataSize));
|
||||
|
||||
ldfStream.ResetReadPointer();
|
||||
|
||||
uint8_t ldfType;
|
||||
ASSERT_TRUE(ldfStream.Read(ldfType));
|
||||
EXPECT_EQ(ldfType, 0); // Always writes 0 first
|
||||
|
||||
uint32_t settingsCount;
|
||||
ASSERT_TRUE(ldfStream.Read(settingsCount));
|
||||
EXPECT_EQ(settingsCount, 2); // We added 2 settings
|
||||
}
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeConsistentBehavior) {
|
||||
Entity testEntity(15, info);
|
||||
ScriptComponent scriptComponent(&testEntity, "", false);
|
||||
|
||||
// Test that multiple serializations are consistent
|
||||
RakNet::BitStream firstStream, secondStream;
|
||||
|
||||
scriptComponent.Serialize(firstStream, true);
|
||||
scriptComponent.Serialize(secondStream, true);
|
||||
|
||||
EXPECT_EQ(firstStream.GetNumberOfBitsUsed(), secondStream.GetNumberOfBitsUsed());
|
||||
|
||||
firstStream.ResetReadPointer();
|
||||
secondStream.ResetReadPointer();
|
||||
|
||||
bool firstHasSettings, secondHasSettings;
|
||||
ASSERT_TRUE(firstStream.Read(firstHasSettings));
|
||||
ASSERT_TRUE(secondStream.Read(secondHasSettings));
|
||||
EXPECT_EQ(firstHasSettings, secondHasSettings);
|
||||
}
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeScriptNameHandling) {
|
||||
Entity testEntity(15, info);
|
||||
|
||||
// Test with different script names - serialization shouldn't change based on script name
|
||||
ScriptComponent scriptComponent1(&testEntity, "TestScript", false);
|
||||
ScriptComponent scriptComponent2(&testEntity, "AnotherScript", false);
|
||||
|
||||
RakNet::BitStream stream1, stream2;
|
||||
|
||||
scriptComponent1.Serialize(stream1, true);
|
||||
scriptComponent2.Serialize(stream2, true);
|
||||
|
||||
// Serialization should be the same regardless of script name since
|
||||
// script names are not serialized, only network settings
|
||||
stream1.ResetReadPointer();
|
||||
stream2.ResetReadPointer();
|
||||
|
||||
bool hasSettings1, hasSettings2;
|
||||
ASSERT_TRUE(stream1.Read(hasSettings1));
|
||||
ASSERT_TRUE(stream2.Read(hasSettings2));
|
||||
EXPECT_EQ(hasSettings1, hasSettings2);
|
||||
EXPECT_FALSE(hasSettings1); // Both should be false without network settings
|
||||
}
|
||||
|
||||
TEST_F(ScriptComponentTest, SerializeSerializedFlag) {
|
||||
Entity testEntity(15, info);
|
||||
ScriptComponent scriptComponent(&testEntity, "", false);
|
||||
|
||||
// Test the serialized flag functionality
|
||||
EXPECT_FALSE(scriptComponent.GetSerialized()); // Default state
|
||||
|
||||
scriptComponent.SetSerialized(true);
|
||||
EXPECT_TRUE(scriptComponent.GetSerialized());
|
||||
|
||||
// The serialized flag itself doesn't affect the Serialize method output,
|
||||
// but it's tracked by the component
|
||||
RakNet::BitStream bitStream;
|
||||
scriptComponent.Serialize(bitStream, true);
|
||||
|
||||
bitStream.ResetReadPointer();
|
||||
|
||||
bool hasNetworkSettings;
|
||||
ASSERT_TRUE(bitStream.Read(hasNetworkSettings));
|
||||
EXPECT_FALSE(hasNetworkSettings); // Still no network settings
|
||||
}
|
Reference in New Issue
Block a user