3
0

FeatureProcessorFactoryTests.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 <Common/RPITestFixture.h>
  9. #include <Common/TestFeatureProcessors.h>
  10. namespace UnitTest
  11. {
  12. using namespace AZ;
  13. using namespace AZ::RPI;
  14. class FeatureProcessorFactoryTests
  15. : public RPITestFixture
  16. {
  17. protected:
  18. void SetUp() override
  19. {
  20. RPITestFixture::SetUp();
  21. TestFeatureProcessor1::Reflect(GetSerializeContext());
  22. TestFeatureProcessor2::Reflect(GetSerializeContext());
  23. TestFeatureProcessorImplementation::Reflect(GetSerializeContext());
  24. TestFeatureProcessorImplementation2::Reflect(GetSerializeContext());
  25. FeatureProcessorFactory::Get()->RegisterFeatureProcessor<TestFeatureProcessor1>();
  26. FeatureProcessorFactory::Get()->RegisterFeatureProcessor<TestFeatureProcessor2>();
  27. FeatureProcessorFactory::Get()->RegisterFeatureProcessorWithInterface<TestFeatureProcessorImplementation, TestFeatureProcessorInterface>();
  28. FeatureProcessorFactory::Get()->RegisterFeatureProcessorWithInterface<TestFeatureProcessorImplementation2, TestFeatureProcessorInterface>();
  29. }
  30. void TearDown() override
  31. {
  32. FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<TestFeatureProcessor1>();
  33. FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<TestFeatureProcessor2>();
  34. FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<TestFeatureProcessorImplementation>();
  35. FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<TestFeatureProcessorImplementation2>();
  36. RPITestFixture::TearDown();
  37. }
  38. };
  39. TEST_F(FeatureProcessorFactoryTests, GetFeatureProcessorTypeId_MultipleFeatureProcessorsRegistered_ReturnsCorrectTypeId)
  40. {
  41. AZ::TypeId testFeatureProcessor1Id = FeatureProcessorFactory::Get()->GetFeatureProcessorTypeId(FeatureProcessorId{ "TestFeatureProcessor1" });
  42. EXPECT_EQ(testFeatureProcessor1Id, TestFeatureProcessor1::RTTI_Type());
  43. AZ::TypeId testFeatureProcessor2Id = FeatureProcessorFactory::Get()->GetFeatureProcessorTypeId(FeatureProcessorId{ "TestFeatureProcessor2" });
  44. EXPECT_EQ(testFeatureProcessor2Id, TestFeatureProcessor2::RTTI_Type());
  45. AZ::TypeId testFeatureProcessorImplementationId = FeatureProcessorFactory::Get()->GetFeatureProcessorTypeId(FeatureProcessorId{ "TestFeatureProcessorImplementation" });
  46. EXPECT_EQ(testFeatureProcessorImplementationId, TestFeatureProcessorImplementation::RTTI_Type());
  47. AZ::TypeId testFeatureProcessorImplementation2Id = FeatureProcessorFactory::Get()->GetFeatureProcessorTypeId(FeatureProcessorId{ "TestFeatureProcessorImplementation2" });
  48. EXPECT_EQ(testFeatureProcessorImplementation2Id, TestFeatureProcessorImplementation2::RTTI_Type());
  49. }
  50. TEST_F(FeatureProcessorFactoryTests, GetFeatureProcessorInterfaceTypeId_FeatureProcessorHasInterface_ReturnsCorrectTypeId)
  51. {
  52. AZ::TypeId testFeatureProcessorInterfaceId = FeatureProcessorFactory::Get()->GetFeatureProcessorInterfaceTypeId(FeatureProcessorId{ "TestFeatureProcessorImplementation" });
  53. EXPECT_EQ(testFeatureProcessorInterfaceId, TestFeatureProcessorInterface::RTTI_Type());
  54. AZ::TypeId testFeatureProcessorInterfaceId2 = FeatureProcessorFactory::Get()->GetFeatureProcessorInterfaceTypeId(FeatureProcessorId{ "TestFeatureProcessorImplementation2" });
  55. EXPECT_EQ(testFeatureProcessorInterfaceId2, TestFeatureProcessorInterface::RTTI_Type());
  56. EXPECT_EQ(testFeatureProcessorInterfaceId, testFeatureProcessorInterfaceId2);
  57. }
  58. TEST_F(FeatureProcessorFactoryTests, GetFeatureProcessorInterfaceTypeId_FeatureProcessorDoesNotHaveInterface_ReturnsNullTypeId)
  59. {
  60. AZ::TypeId testFeatureProcessor1InterfaceId = FeatureProcessorFactory::Get()->GetFeatureProcessorInterfaceTypeId(FeatureProcessorId{ "TestFeatureProcessor1" });
  61. EXPECT_EQ(testFeatureProcessor1InterfaceId, TypeId::CreateNull());
  62. AZ::TypeId testFeatureProcessor2InterfaceId = FeatureProcessorFactory::Get()->GetFeatureProcessorInterfaceTypeId(FeatureProcessorId{ "TestFeatureProcessor2" });
  63. EXPECT_EQ(testFeatureProcessor2InterfaceId, TypeId::CreateNull());
  64. }
  65. //
  66. // Two implementations of the same interface
  67. //
  68. TEST_F(FeatureProcessorFactoryTests, CreateFeatureProcessor_MultipleImplmentationsOfTheSameInterface_CreatesBothFeatureProcessors)
  69. {
  70. FeatureProcessorPtr implementation1 = FeatureProcessorFactory::Get()->CreateFeatureProcessor(FeatureProcessorId{ TestFeatureProcessorImplementation::RTTI_TypeName() });
  71. FeatureProcessorPtr implementation2 = FeatureProcessorFactory::Get()->CreateFeatureProcessor(FeatureProcessorId{ TestFeatureProcessorImplementation2::RTTI_TypeName() });
  72. EXPECT_NE(implementation1, nullptr);
  73. EXPECT_NE(implementation2, nullptr);
  74. EXPECT_NE(implementation1, implementation2);
  75. }
  76. TEST_F(FeatureProcessorFactoryTests, UnregisterFeatureProcessor_MultipleImplmentationsOfTheSameInterface_OnlyTestFeatureProcessorImplementationIsUnregistered)
  77. {
  78. FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<TestFeatureProcessorImplementation>();
  79. // Should still be able to create both feature processors even with one unregistered.
  80. FeatureProcessorPtr implementation1 = FeatureProcessorFactory::Get()->CreateFeatureProcessor(FeatureProcessorId{ TestFeatureProcessorImplementation::RTTI_TypeName() });
  81. FeatureProcessorPtr implementation2 = FeatureProcessorFactory::Get()->CreateFeatureProcessor(FeatureProcessorId{ TestFeatureProcessorImplementation2::RTTI_TypeName() });
  82. EXPECT_NE(implementation1, nullptr);
  83. EXPECT_NE(implementation2, nullptr);
  84. }
  85. //
  86. // Invalid cases
  87. //
  88. TEST_F(FeatureProcessorFactoryTests, CreateFeatureProcessor_ByInterfaceName_FailsToCreate)
  89. {
  90. AZ_TEST_START_TRACE_SUPPRESSION; // FeatureProcessorFactory may throw an error for this
  91. EXPECT_EQ(AZ::RPI::FeatureProcessorFactory::Get()->CreateFeatureProcessor(FeatureProcessorId{ TestFeatureProcessorInterface::RTTI_TypeName() }), nullptr);
  92. AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT;
  93. }
  94. // Get typeid from interface
  95. }