#include "catch2/catch_amalgamated.hpp" #include "Nuake/Scene/Components/Component.h" #include "Nuake/Resource/Serializer/ComponentSerializer.h" #include "entt/entt.hpp" namespace Serialization { using namespace Nuake; class TestData : public Component { NUAKECOMPONENT(TestData, "TestData"); public: int myInt; bool myBool; std::string myString; Vector2 myVec2; Vector3 myVec3; Vector4 myVec4; static void InitializeComponentClass() { BindComponentField<&TestData::myInt>("myInt", "myInt"); BindComponentField<&TestData::myBool>("myBool", "myBool"); BindComponentField<&TestData::myString>("myString", "myString"); BindComponentField<&TestData::myVec2>("myVec2", "myVec2"); BindComponentField<&TestData::myVec3>("myVec3", "myVec3"); BindComponentField<&TestData::myVec4>("myVec4", "myVec4"); } }; TEST_CASE("Serialize Struct", "[Serialization]") { // Initialize component TestData::InternalInitializeClass(); TestData testData = { .myInt = 1337, .myBool = true, .myString = "Hello World", .myVec2 = Vector2(1, 2), .myVec3 = Vector3(3, 4, 5), .myVec4 = Vector4(6, 7, 8, 9) }; // Serialize into json ComponentSerializer serializer; json result = serializer.Serialize(testData); // Test JSON result REQUIRE(result.contains("TestData")); REQUIRE(result["TestData"].contains("myInt")); REQUIRE(result["TestData"]["myInt"] == testData.myInt); REQUIRE(result["TestData"].contains("myBool")); REQUIRE(result["TestData"]["myBool"] == testData.myBool); REQUIRE(result["TestData"].contains("myString")); REQUIRE(result["TestData"]["myString"] == testData.myString); REQUIRE(result["TestData"].contains("myVec2")); REQUIRE(result["TestData"]["myVec2"]["x"] == testData.myVec2.x); REQUIRE(result["TestData"]["myVec2"]["y"] == testData.myVec2.y); REQUIRE(result["TestData"].contains("myVec3")); REQUIRE(result["TestData"]["myVec3"]["x"] == testData.myVec3.x); REQUIRE(result["TestData"]["myVec3"]["y"] == testData.myVec3.y); REQUIRE(result["TestData"]["myVec3"]["z"] == testData.myVec3.z); REQUIRE(result["TestData"].contains("myVec4")); REQUIRE(result["TestData"]["myVec4"]["x"] == testData.myVec4.x); REQUIRE(result["TestData"]["myVec4"]["y"] == testData.myVec4.y); REQUIRE(result["TestData"]["myVec4"]["z"] == testData.myVec4.z); REQUIRE(result["TestData"]["myVec4"]["w"] == testData.myVec4.w); } }