3
0

NameJsonSerializerTests.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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 <AzCore/Casting/lossy_cast.h>
  9. #include <AzCore/Name/NameJsonSerializer.h>
  10. #include <AzCore/Name/NameDictionary.h>
  11. #include <Tests/Serialization/Json/BaseJsonSerializerFixture.h>
  12. #include <Tests/Serialization/Json/JsonSerializerConformityTests.h>
  13. namespace JsonSerializationTests
  14. {
  15. class NameJsonSerializerTestDescription :
  16. public JsonSerializerConformityTestDescriptor<AZ::Name>
  17. {
  18. public:
  19. void SetUp() override
  20. {
  21. AZ::NameDictionary::Create();
  22. }
  23. void TearDown() override
  24. {
  25. AZ::NameDictionary::Destroy();
  26. }
  27. void Reflect(AZStd::unique_ptr<AZ::SerializeContext>& context) override
  28. {
  29. AZ::Name::Reflect(context.get());
  30. }
  31. void Reflect(AZStd::unique_ptr<AZ::JsonRegistrationContext>& context) override
  32. {
  33. AZ::Name::Reflect(context.get());
  34. }
  35. AZStd::shared_ptr<AZ::BaseJsonSerializer> CreateSerializer() override
  36. {
  37. return AZStd::make_shared<AZ::NameJsonSerializer>();
  38. }
  39. AZStd::shared_ptr<AZ::Name> CreateDefaultInstance() override
  40. {
  41. return AZStd::make_shared<AZ::Name>();
  42. }
  43. AZStd::shared_ptr<AZ::Name> CreateFullySetInstance() override
  44. {
  45. return AZStd::make_shared<AZ::Name>("hello");
  46. }
  47. AZStd::string_view GetJsonForFullySetInstance() override
  48. {
  49. return R"("hello")";
  50. }
  51. void ConfigureFeatures(JsonSerializerConformityTestDescriptorFeatures& features) override
  52. {
  53. features.EnableJsonType(rapidjson::kStringType);
  54. features.EnableJsonType(rapidjson::kFalseType);
  55. features.EnableJsonType(rapidjson::kTrueType);
  56. features.EnableJsonType(rapidjson::kNumberType);
  57. features.m_supportsPartialInitialization = false;
  58. features.m_supportsInjection = false;
  59. }
  60. bool AreEqual(const AZ::Name& lhs, const AZ::Name& rhs) override
  61. {
  62. return lhs == rhs;
  63. }
  64. };
  65. using NameJsonSerializerTestTypes = ::testing::Types<NameJsonSerializerTestDescription>;
  66. IF_JSON_CONFORMITY_ENABLED(INSTANTIATE_TYPED_TEST_CASE_P(NameJsonSerializer, JsonSerializerConformityTests, NameJsonSerializerTestTypes));
  67. class NameJsonSerializerTests
  68. : public BaseJsonSerializerFixture
  69. {
  70. public:
  71. AZStd::unique_ptr<AZ::NameJsonSerializer> m_serializer;
  72. void SetUp() override
  73. {
  74. BaseJsonSerializerFixture::SetUp();
  75. AZ::NameDictionary::Create();
  76. m_serializer = AZStd::make_unique<AZ::NameJsonSerializer>();
  77. }
  78. void TearDown() override
  79. {
  80. m_serializer.reset();
  81. AZ::NameDictionary::Destroy();
  82. BaseJsonSerializerFixture::TearDown();
  83. }
  84. const char* m_testString = "Hello world";
  85. const char* m_testStringAlternative = "Goodbye cruel world";
  86. };
  87. TEST_F(NameJsonSerializerTests, Load_FalseBoolean_FalseAsString)
  88. {
  89. using namespace AZ::JsonSerializationResult;
  90. rapidjson::Value testValue;
  91. testValue.SetBool(false);
  92. AZ::Name convertedValue{};
  93. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  94. testValue, *m_jsonDeserializationContext);
  95. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  96. EXPECT_STRCASEEQ("False", convertedValue.GetStringView().data());
  97. }
  98. TEST_F(NameJsonSerializerTests, Load_TrueBoolean_TrueAsString)
  99. {
  100. using namespace AZ::JsonSerializationResult;
  101. rapidjson::Value testValue;
  102. testValue.SetBool(true);
  103. AZ::Name convertedValue{};
  104. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  105. testValue, *m_jsonDeserializationContext);
  106. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  107. EXPECT_STRCASEEQ("True", convertedValue.GetStringView().data());
  108. }
  109. TEST_F(NameJsonSerializerTests, Load_ParseUnsignedIntegerValue_NumberReturnedAsString)
  110. {
  111. using namespace AZ::JsonSerializationResult;
  112. rapidjson::Value testValue;
  113. testValue.SetUint(42);
  114. AZ::Name convertedValue{};
  115. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  116. testValue, *m_jsonDeserializationContext);
  117. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  118. EXPECT_STREQ("42", convertedValue.GetStringView().data());
  119. }
  120. TEST_F(NameJsonSerializerTests, Load_ParseUnsigned64BitIntegerValue_NumberReturnedAsString)
  121. {
  122. using namespace AZ::JsonSerializationResult;
  123. rapidjson::Value testValue;
  124. testValue.SetUint64(42);
  125. AZ::Name convertedValue{};
  126. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  127. testValue, *m_jsonDeserializationContext);
  128. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  129. EXPECT_STREQ("42", convertedValue.GetStringView().data());
  130. }
  131. TEST_F(NameJsonSerializerTests, Load_ParseSignedIntegerValue_NumberReturnedAsString)
  132. {
  133. using namespace AZ::JsonSerializationResult;
  134. rapidjson::Value testValue;
  135. testValue.SetInt(-42);
  136. AZ::Name convertedValue{};
  137. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  138. testValue, *m_jsonDeserializationContext);
  139. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  140. EXPECT_STREQ("-42", convertedValue.GetStringView().data());
  141. }
  142. TEST_F(NameJsonSerializerTests, Load_ParseSigned64BitIntegerValue_NumberReturnedAsString)
  143. {
  144. using namespace AZ::JsonSerializationResult;
  145. rapidjson::Value testValue;
  146. testValue.SetInt64(-42);
  147. AZ::Name convertedValue{};
  148. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  149. testValue, *m_jsonDeserializationContext);
  150. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  151. EXPECT_STREQ("-42", convertedValue.GetStringView().data());
  152. }
  153. TEST_F(NameJsonSerializerTests, Load_ParseFloatingPointValue_NumberReturnedAsString)
  154. {
  155. using namespace AZ::JsonSerializationResult;
  156. rapidjson::Value testValue;
  157. testValue.SetDouble(3.1415);
  158. AZ::Name convertedValue{};
  159. ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid<AZ::Name>(),
  160. testValue, *m_jsonDeserializationContext);
  161. EXPECT_EQ(Outcomes::Success, result.GetOutcome());
  162. EXPECT_STREQ("3.141500", convertedValue.GetStringView().data());
  163. }
  164. } // namespace JsonSerializationTests