93 lines
3.5 KiB
C++
93 lines
3.5 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <XCEngine/Scripting/ScriptFieldStorage.h>
|
|
|
|
using namespace XCEngine::Math;
|
|
using namespace XCEngine::Scripting;
|
|
|
|
namespace {
|
|
|
|
TEST(ScriptFieldStorage_Test, StoresRetrievesAndRemovesSupportedValues) {
|
|
ScriptFieldStorage storage;
|
|
|
|
EXPECT_TRUE(storage.SetFieldValue("Speed", 3.5f));
|
|
EXPECT_TRUE(storage.SetFieldValue("Accuracy", 0.875));
|
|
EXPECT_TRUE(storage.SetFieldValue("IsAlive", true));
|
|
EXPECT_TRUE(storage.SetFieldValue("Health", int32_t(125)));
|
|
EXPECT_TRUE(storage.SetFieldValue("Score", uint64_t(9001)));
|
|
EXPECT_TRUE(storage.SetFieldValue("DisplayName", std::string("Player One")));
|
|
EXPECT_TRUE(storage.SetFieldValue("Offset2D", Vector2(1.0f, 2.0f)));
|
|
EXPECT_TRUE(storage.SetFieldValue("Velocity", Vector3(3.0f, 4.0f, 5.0f)));
|
|
EXPECT_TRUE(storage.SetFieldValue("Tint", Vector4(0.1f, 0.2f, 0.3f, 1.0f)));
|
|
EXPECT_TRUE(storage.SetFieldValue("Target", GameObjectReference{42}));
|
|
|
|
float speed = 0.0f;
|
|
double accuracy = 0.0;
|
|
bool isAlive = false;
|
|
int32_t health = 0;
|
|
uint64_t score = 0;
|
|
std::string displayName;
|
|
Vector2 offset2D;
|
|
Vector3 velocity;
|
|
Vector4 tint;
|
|
GameObjectReference target;
|
|
|
|
EXPECT_EQ(storage.GetFieldCount(), 10u);
|
|
EXPECT_TRUE(storage.Contains("Velocity"));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Speed", speed));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Accuracy", accuracy));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("IsAlive", isAlive));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Health", health));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Score", score));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("DisplayName", displayName));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Offset2D", offset2D));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Velocity", velocity));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Tint", tint));
|
|
EXPECT_TRUE(storage.TryGetFieldValue("Target", target));
|
|
|
|
EXPECT_FLOAT_EQ(speed, 3.5f);
|
|
EXPECT_DOUBLE_EQ(accuracy, 0.875);
|
|
EXPECT_TRUE(isAlive);
|
|
EXPECT_EQ(health, 125);
|
|
EXPECT_EQ(score, 9001u);
|
|
EXPECT_EQ(displayName, "Player One");
|
|
EXPECT_EQ(offset2D, Vector2(1.0f, 2.0f));
|
|
EXPECT_EQ(velocity, Vector3(3.0f, 4.0f, 5.0f));
|
|
EXPECT_EQ(tint, Vector4(0.1f, 0.2f, 0.3f, 1.0f));
|
|
EXPECT_EQ(target, GameObjectReference{42});
|
|
|
|
EXPECT_TRUE(storage.Remove("IsAlive"));
|
|
EXPECT_FALSE(storage.Contains("IsAlive"));
|
|
EXPECT_EQ(storage.GetFieldCount(), 9u);
|
|
}
|
|
|
|
TEST(ScriptFieldStorage_Test, SerializeRoundTripPreservesFieldValues) {
|
|
ScriptFieldStorage original;
|
|
ASSERT_TRUE(original.SetFieldValue("Message", std::string("Ready;Set=Go|100%\nLine2")));
|
|
ASSERT_TRUE(original.SetFieldValue("Scale", Vector3(2.0f, 3.0f, 4.0f)));
|
|
ASSERT_TRUE(original.SetFieldValue("Owner", GameObjectReference{778899}));
|
|
ASSERT_TRUE(original.SetFieldValue("Counter", int32_t(-17)));
|
|
|
|
const std::string serialized = original.SerializeToString();
|
|
|
|
ScriptFieldStorage restored;
|
|
restored.DeserializeFromString(serialized);
|
|
|
|
std::string message;
|
|
Vector3 scale;
|
|
GameObjectReference owner;
|
|
int32_t counter = 0;
|
|
|
|
EXPECT_TRUE(restored.TryGetFieldValue("Message", message));
|
|
EXPECT_TRUE(restored.TryGetFieldValue("Scale", scale));
|
|
EXPECT_TRUE(restored.TryGetFieldValue("Owner", owner));
|
|
EXPECT_TRUE(restored.TryGetFieldValue("Counter", counter));
|
|
|
|
EXPECT_EQ(message, "Ready;Set=Go|100%\nLine2");
|
|
EXPECT_EQ(scale, Vector3(2.0f, 3.0f, 4.0f));
|
|
EXPECT_EQ(owner, GameObjectReference{778899});
|
|
EXPECT_EQ(counter, -17);
|
|
}
|
|
|
|
} // namespace
|