NameJsonSerializerTests.cpp 7.0 KB

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