/* * Copyright (c) Contributors to the Open 3D Engine Project * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include namespace JsonSerializationTests { class MaterialFunctorSourceDataSerializerTestDescription : public JsonSerializerConformityTestDescriptor { public: class TestFunctorSourceData : public AZ::RPI::MaterialFunctorSourceData { public: AZ_RTTI(TestFunctorSourceData, "{D9B569EA-F45B-4852-9F42-0C104C51166A}", AZ::RPI::MaterialFunctorSourceData); static void Reflect(AZ::ReflectContext* context) { if (auto* serializeContext = azrtti_cast(context)) { serializeContext->Class() ->Version(1) ->Field("value", &TestFunctorSourceData::m_value) ; } } int32_t m_value = 0; }; AZ::RPI::MaterialFunctorSourceDataRegistration m_functorRegistration; void SetUp() override { m_functorRegistration.Init(); AZ::RPI::MaterialFunctorSourceDataRegistration::Get()->RegisterMaterialFunctor("Test", azrtti_typeid()); } virtual void TearDown() override { m_functorRegistration.Shutdown(); } void Reflect(AZStd::unique_ptr& context) override { TestFunctorSourceData::Reflect(context.get()); AZ::RPI::MaterialFunctorSourceDataHolder::Reflect(context.get()); } void Reflect(AZStd::unique_ptr& context) override { context->Serializer()->HandlesType(); } AZStd::shared_ptr CreateSerializer() override { return AZStd::make_shared(); } AZStd::shared_ptr CreateDefaultInstance() override { // As normal we would expect default constructed MaterialFunctorSourceDataHolder. // But from its design, the actual default is TestFunctorSourceData. TestFunctorSourceData* actualSourceData = aznew TestFunctorSourceData(); return AZStd::make_shared(actualSourceData); } AZStd::shared_ptr CreateFullySetInstance() override { TestFunctorSourceData* actualSourceData = aznew TestFunctorSourceData(); actualSourceData->m_value = 42; return AZStd::make_shared(actualSourceData); } AZStd::string_view GetJsonForFullySetInstance() override { return R"( { "type": "Test", "args": { "value": 42 } } )"; } void ConfigureFeatures(JsonSerializerConformityTestDescriptorFeatures& features) override { features.EnableJsonType(rapidjson::kObjectType); features.m_mandatoryFields.push_back("type"); features.m_supportsPartialInitialization = false; features.m_supportsInjection = false; } bool AreEqual( const AZ::RPI::MaterialFunctorSourceDataHolder& lhs, const AZ::RPI::MaterialFunctorSourceDataHolder& rhs) override { TestFunctorSourceData* leftSource = azrtti_cast(lhs.GetActualSourceData().get()); TestFunctorSourceData* rightSource = azrtti_cast(rhs.GetActualSourceData().get()); return (!leftSource && !rightSource || (leftSource && rightSource && (leftSource->m_value == rightSource->m_value))); } }; using MaterialFunctorSourceDataSerializerTestTypes = ::testing::Types; INSTANTIATE_TYPED_TEST_CASE_P(MaterialFunctorSourceDataTests, JsonSerializerConformityTests, MaterialFunctorSourceDataSerializerTestTypes); } // namespace JsonSerializationTests