/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include #include #include #include #include namespace JsonSerializationTests { class NameJsonSerializerTestDescription : public JsonSerializerConformityTestDescriptor { public: void SetUp() override { AZ::NameDictionary::Create(); } void TearDown() override { AZ::NameDictionary::Destroy(); } void Reflect(AZStd::unique_ptr& context) { AZ::Name::Reflect(context.get()); } AZStd::shared_ptr CreateSerializer() override { return AZStd::make_shared(); } AZStd::shared_ptr CreateDefaultInstance() override { return AZStd::make_shared(); } AZStd::shared_ptr CreateFullySetInstance() override { return AZStd::make_shared("hello"); } AZStd::string_view GetJsonForFullySetInstance() override { return R"("hello")"; } void ConfigureFeatures(JsonSerializerConformityTestDescriptorFeatures& features) override { features.EnableJsonType(rapidjson::kStringType); features.EnableJsonType(rapidjson::kFalseType); features.EnableJsonType(rapidjson::kTrueType); features.EnableJsonType(rapidjson::kNumberType); features.m_supportsPartialInitialization = false; features.m_supportsInjection = false; } bool AreEqual(const AZ::Name& lhs, const AZ::Name& rhs) override { return lhs == rhs; } }; using NameJsonSerializerTestTypes = ::testing::Types; INSTANTIATE_TYPED_TEST_CASE_P(NameJsonSerializer, JsonSerializerConformityTests, NameJsonSerializerTestTypes); class NameJsonSerializerTests : public BaseJsonSerializerFixture { public: AZStd::unique_ptr m_serializer; void SetUp() override { BaseJsonSerializerFixture::SetUp(); AZ::NameDictionary::Create(); m_serializer = AZStd::make_unique(); } void TearDown() override { m_serializer.reset(); AZ::NameDictionary::Destroy(); BaseJsonSerializerFixture::TearDown(); } const char* m_testString = "Hello world"; const char* m_testStringAlternative = "Goodbye cruel world"; }; TEST_F(NameJsonSerializerTests, Load_FalseBoolean_FalseAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetBool(false); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STRCASEEQ("False", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_TrueBoolean_TrueAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetBool(true); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STRCASEEQ("True", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_ParseUnsignedIntegerValue_NumberReturnedAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetUint(42); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STREQ("42", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_ParseUnsigned64BitIntegerValue_NumberReturnedAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetUint64(42); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STREQ("42", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_ParseSignedIntegerValue_NumberReturnedAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetInt(-42); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STREQ("-42", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_ParseSigned64BitIntegerValue_NumberReturnedAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetInt64(-42); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STREQ("-42", convertedValue.GetStringView().data()); } TEST_F(NameJsonSerializerTests, Load_ParseFloatingPointValue_NumberReturnedAsString) { using namespace AZ::JsonSerializationResult; rapidjson::Value testValue; testValue.SetDouble(3.1415); AZ::Name convertedValue{}; ResultCode result = this->m_serializer->Load(&convertedValue, azrtti_typeid(), testValue, *m_jsonDeserializationContext); EXPECT_EQ(Outcomes::Success, result.GetOutcome()); EXPECT_STREQ("3.141500", convertedValue.GetStringView().data()); } } // namespace JsonSerializationTests