TrackChangedSerializerTests.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzNetworking/Serialization/NetworkInputSerializer.h>
  9. #include <AzNetworking/Serialization/NetworkOutputSerializer.h>
  10. #include <AzNetworking/Serialization/TrackChangedSerializer.h>
  11. #include <AzCore/UnitTest/TestTypes.h>
  12. namespace UnitTest
  13. {
  14. struct TrackChangedSerializerInElement
  15. {
  16. bool testBool = false;
  17. char testChar = 'a';
  18. int8_t testInt8 = 0;
  19. int16_t testInt16 = 0;
  20. int32_t testInt32 = 0;
  21. int64_t testInt64 = 0;
  22. uint8_t testUint8 = 0;
  23. uint16_t testUint16 = 0;
  24. uint32_t testUint32 = 0;
  25. uint64_t testUint64 = 0;
  26. double testDouble = 0.0;
  27. float testFloat = 0.f;
  28. AZStd::fixed_string<32> testFixedString = "";
  29. bool Serialize(AzNetworking::ISerializer& serializer)
  30. {
  31. if (!serializer.Serialize(testBool, "TestBool") || !serializer.Serialize(testChar, "TestChar") ||
  32. !serializer.Serialize(testInt8, "TestInt8") || !serializer.Serialize(testInt16, "TestInt16") ||
  33. !serializer.Serialize(testInt32, "TestInt32") || !serializer.Serialize(testInt64, "TestInt64") ||
  34. !serializer.Serialize(testUint8, "TestUint8") || !serializer.Serialize(testUint16, "TestUint16") ||
  35. !serializer.Serialize(testUint32, "TestUint32") || !serializer.Serialize(testUint64, "TestUint64") ||
  36. !serializer.Serialize(testDouble, "TestDouble") || !serializer.Serialize(testFloat, "TestFloat") ||
  37. !serializer.Serialize(testFixedString, "TestFixedString"))
  38. {
  39. return false;
  40. }
  41. return true;
  42. }
  43. };
  44. struct TrackChangedSerializerOutElement
  45. {
  46. bool testBool = true;
  47. char testChar = 'b';
  48. int8_t testInt8 = 1;
  49. int16_t testInt16 = 1;
  50. int32_t testInt32 = 1;
  51. int64_t testInt64 = 1;
  52. uint8_t testUint8 = 1;
  53. uint16_t testUint16 = 1;
  54. uint32_t testUint32 = 1;
  55. uint64_t testUint64 = 1;
  56. double testDouble = 1.0;
  57. float testFloat = 1.f;
  58. AZStd::fixed_string<32> testFixedString = "TestFixedString";
  59. bool SerializeFixedString(AzNetworking::ISerializer& serializer)
  60. {
  61. return serializer.Serialize(testFixedString, "TestFixedString");
  62. }
  63. };
  64. class TrackChangedSerializerTests : public LeakDetectionFixture
  65. {
  66. };
  67. TEST_F(TrackChangedSerializerTests, TestTrackChangedSerializer)
  68. {
  69. const size_t Capacity = 2048;
  70. const int8_t ExpectedSerializedBytes = 46;
  71. AZStd::array<uint8_t, Capacity> buffer;
  72. TrackChangedSerializerInElement inElement;
  73. AzNetworking::NetworkInputSerializer inSerializer(buffer.data(), static_cast<uint32_t>(buffer.size()));
  74. EXPECT_TRUE(inElement.Serialize(inSerializer));
  75. TrackChangedSerializerOutElement outElement;
  76. AzNetworking::TrackChangedSerializer<AzNetworking::NetworkOutputSerializer> trackChangedSerializer(buffer.data(), static_cast<uint32_t>(buffer.size()));
  77. EXPECT_EQ(trackChangedSerializer.GetSerializerMode(), AzNetworking::SerializerMode::WriteToObject);
  78. trackChangedSerializer.ClearTrackedChangesFlag();
  79. trackChangedSerializer.Serialize(outElement.testBool, "TestBool");
  80. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  81. trackChangedSerializer.ClearTrackedChangesFlag();
  82. trackChangedSerializer.Serialize(outElement.testChar, "TestChar");
  83. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  84. trackChangedSerializer.ClearTrackedChangesFlag();
  85. trackChangedSerializer.Serialize(outElement.testInt8, "TestInt8", AZStd::numeric_limits<int8_t>::min(), AZStd::numeric_limits<int8_t>::max());
  86. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  87. trackChangedSerializer.ClearTrackedChangesFlag();
  88. trackChangedSerializer.Serialize(outElement.testInt16, "TestInt16", AZStd::numeric_limits<int16_t>::min(), AZStd::numeric_limits<int16_t>::max());
  89. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  90. trackChangedSerializer.ClearTrackedChangesFlag();
  91. trackChangedSerializer.Serialize(outElement.testInt32, "TestInt32", AZStd::numeric_limits<int32_t>::min(), AZStd::numeric_limits<int32_t>::max());
  92. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  93. trackChangedSerializer.ClearTrackedChangesFlag();
  94. trackChangedSerializer.Serialize(outElement.testInt64, "TestInt64", AZStd::numeric_limits<int64_t>::min(), AZStd::numeric_limits<int64_t>::max());
  95. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  96. trackChangedSerializer.ClearTrackedChangesFlag();
  97. trackChangedSerializer.Serialize(outElement.testUint8, "TestUint8", AZStd::numeric_limits<uint8_t>::min(), AZStd::numeric_limits<uint8_t>::max());
  98. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  99. trackChangedSerializer.ClearTrackedChangesFlag();
  100. trackChangedSerializer.Serialize(outElement.testUint16, "TestUint16", AZStd::numeric_limits<uint16_t>::min(), AZStd::numeric_limits<uint16_t>::max());
  101. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  102. trackChangedSerializer.ClearTrackedChangesFlag();
  103. trackChangedSerializer.Serialize(outElement.testUint32, "TestUint32", AZStd::numeric_limits<uint32_t>::min(), AZStd::numeric_limits<uint32_t>::max());
  104. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  105. trackChangedSerializer.ClearTrackedChangesFlag();
  106. trackChangedSerializer.Serialize(outElement.testUint64, "TestUint64", AZStd::numeric_limits<uint64_t>::min(), AZStd::numeric_limits<uint64_t>::max());
  107. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  108. trackChangedSerializer.ClearTrackedChangesFlag();
  109. trackChangedSerializer.Serialize(outElement.testDouble, "TestDouble", AZStd::numeric_limits<double>::min(), AZStd::numeric_limits<double>::max());
  110. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  111. trackChangedSerializer.ClearTrackedChangesFlag();
  112. trackChangedSerializer.Serialize(outElement.testFloat, "TestFloat", AZStd::numeric_limits<float>::min(), AZStd::numeric_limits<float>::max());
  113. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  114. trackChangedSerializer.ClearTrackedChangesFlag();
  115. outElement.SerializeFixedString(trackChangedSerializer);
  116. EXPECT_TRUE(trackChangedSerializer.GetTrackedChangesFlag());
  117. EXPECT_NE(trackChangedSerializer.GetBuffer(), nullptr);
  118. EXPECT_EQ(trackChangedSerializer.GetCapacity(), Capacity);
  119. EXPECT_EQ(trackChangedSerializer.GetSize(), ExpectedSerializedBytes);
  120. }
  121. }