Просмотр исходного кода

[SceneCore] Add method to allow the tests to clean up SceneCore's generic reflection data

Each separate shared library maintains its own set of generic serialized
type information that was created by that library. Normally this info is
destroyed when the library is unloaded. To support the unit test's leak
detection, this info needs to be cleaned up at test completion, so that it
doesn't appear as a leak.

Signed-off-by: Chris Burel <[email protected]>
Chris Burel 3 лет назад
Родитель
Сommit
8314744735

+ 5 - 0
Code/Tools/SceneAPI/SceneCore/DllMain.cpp

@@ -309,6 +309,11 @@ extern "C" AZ_DLL_EXPORT void ReflectTypes(AZ::SerializeContext * context)
     AZ::SceneAPI::SceneCore::ReflectTypes(context);
     AZ::SceneAPI::SceneCore::ReflectTypes(context);
 }
 }
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo()
+{
+    AZ::GetCurrentSerializeContextModule().Cleanup();
+}
+
 extern "C" AZ_DLL_EXPORT void Activate()
 extern "C" AZ_DLL_EXPORT void Activate()
 {
 {
     AZ::SceneAPI::SceneCore::Activate();
     AZ::SceneAPI::SceneCore::Activate();

+ 5 - 0
Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneBehaviorTests.cpp

@@ -30,6 +30,8 @@ extern "C" AZ_DLL_EXPORT void ReflectBehavior(AZ::BehaviorContext* context);
 // the DLL entry point for SceneCore to reflect its serialize context
 // the DLL entry point for SceneCore to reflect its serialize context
 extern "C" AZ_DLL_EXPORT void ReflectTypes(AZ::SerializeContext* context);
 extern "C" AZ_DLL_EXPORT void ReflectTypes(AZ::SerializeContext* context);
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+
 namespace AZ::SceneAPI::Containers
 namespace AZ::SceneAPI::Containers
 {
 {
     class MockManifestRule : public DataTypes::IManifestObject
     class MockManifestRule : public DataTypes::IManifestObject
@@ -836,6 +838,9 @@ namespace AZ::SceneAPI::Containers
             m_scriptContext.reset();
             m_scriptContext.reset();
             m_behaviorContext.reset();
             m_behaviorContext.reset();
             m_componentApplication.reset();
             m_componentApplication.reset();
+
+            CleanUpSceneCoreGenericClassInfo();
+
             UnitTest::AllocatorsFixture::TearDown();
             UnitTest::AllocatorsFixture::TearDown();
         }
         }
 
 

+ 14 - 9
Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneManifestTests.cpp

@@ -16,11 +16,14 @@
 #include <AzCore/Serialization/Json/JsonSystemComponent.h>
 #include <AzCore/Serialization/Json/JsonSystemComponent.h>
 #include <AzCore/Serialization/Json/JsonUtils.h>
 #include <AzCore/Serialization/Json/JsonUtils.h>
 #include <AzCore/Serialization/Utils.h>
 #include <AzCore/Serialization/Utils.h>
+#include <AzCore/UnitTest/TestTypes.h>
 #include <AzToolsFramework/Application/ToolsApplication.h>
 #include <AzToolsFramework/Application/ToolsApplication.h>
 #include <SceneAPI/SceneCore/Containers/SceneManifest.h>
 #include <SceneAPI/SceneCore/Containers/SceneManifest.h>
 #include <SceneAPI/SceneCore/DataTypes/IManifestObject.h>
 #include <SceneAPI/SceneCore/DataTypes/IManifestObject.h>
 #include <string>
 #include <string>
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+
 namespace AZ
 namespace AZ
 {
 {
     namespace SceneAPI
     namespace SceneAPI
@@ -106,7 +109,7 @@ namespace AZ
 
 
 
 
             class SceneManifestTest
             class SceneManifestTest
-                : public ::testing::Test
+                : public UnitTest::AllocatorsTestFixture
                 , public AZ::Debug::TraceMessageBus::Handler
                 , public AZ::Debug::TraceMessageBus::Handler
             {
             {
             public:
             public:
@@ -155,6 +158,8 @@ namespace AZ
                     m_serializeContext.reset();
                     m_serializeContext.reset();
                     m_jsonRegistrationContext.reset();
                     m_jsonRegistrationContext.reset();
                     m_jsonSystemComponent.reset();
                     m_jsonSystemComponent.reset();
+
+                    CleanUpSceneCoreGenericClassInfo();
                 }
                 }
 
 
                 bool OnPreAssert(const char* /*message*/, int /*line*/, const char* /*func*/, const char* /*message*/) override
                 bool OnPreAssert(const char* /*message*/, int /*line*/, const char* /*func*/, const char* /*message*/) override
@@ -173,13 +178,13 @@ namespace AZ
                 AZStd::unique_ptr<JsonSystemComponent> m_jsonSystemComponent;
                 AZStd::unique_ptr<JsonSystemComponent> m_jsonSystemComponent;
             };
             };
 
 
-            TEST(SceneManifest, IsEmpty_Empty_True)
+            TEST_F(SceneManifestTest, IsEmpty_Empty_True)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 EXPECT_TRUE(testManifest.IsEmpty());
                 EXPECT_TRUE(testManifest.IsEmpty());
             }
             }
 
 
-            TEST(SceneManifest, AddEntry_AddNewValue_ResultTrue)
+            TEST_F(SceneManifestTest, AddEntry_AddNewValue_ResultTrue)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -187,7 +192,7 @@ namespace AZ
                 EXPECT_TRUE(result);
                 EXPECT_TRUE(result);
             }
             }
 
 
-            TEST(SceneManifest, AddEntry_MoveNewValue_ResultTrueAndPointerClear)
+            TEST_F(SceneManifestTest, AddEntry_MoveNewValue_ResultTrueAndPointerClear)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -197,7 +202,7 @@ namespace AZ
             }
             }
 
 
             //dependent on AddEntry
             //dependent on AddEntry
-            TEST(SceneManifest, IsEmpty_NotEmpty_False)
+            TEST_F(SceneManifestTest, IsEmpty_NotEmpty_False)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -206,7 +211,7 @@ namespace AZ
             }
             }
 
 
             //dependent on AddEntry and IsEmpty
             //dependent on AddEntry and IsEmpty
-            TEST(SceneManifest, Clear_NotEmpty_EmptyTrue)
+            TEST_F(SceneManifestTest, Clear_NotEmpty_EmptyTrue)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -217,7 +222,7 @@ namespace AZ
             }
             }
 
 
             //RemoveEntry
             //RemoveEntry
-            TEST(SceneManifest, RemoveEntry_NameInList_ResultTrueAndNotStillInList)
+            TEST_F(SceneManifestTest, RemoveEntry_NameInList_ResultTrueAndNotStillInList)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(1);
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(1);
@@ -237,7 +242,7 @@ namespace AZ
             }
             }
 
 
             // GetEntryCount
             // GetEntryCount
-            TEST(SceneManifest, GetEntryCount_EmptyManifest_CountIsZero)
+            TEST_F(SceneManifestTest, GetEntryCount_EmptyManifest_CountIsZero)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 EXPECT_TRUE(testManifest.IsEmpty());
                 EXPECT_TRUE(testManifest.IsEmpty());
@@ -281,7 +286,7 @@ namespace AZ
             }
             }
 
 
             // RemoveEntry - continued
             // RemoveEntry - continued
-            TEST(SceneManifest, RemoveEntry_IndexAdjusted_IndexReduced)
+            TEST_F(SceneManifestTest, RemoveEntry_IndexAdjusted_IndexReduced)
             {
             {
                 SceneManifest testManifest;
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject1 = AZStd::make_shared<MockManifestInt>(1);
                 AZStd::shared_ptr<MockManifestInt> testDataObject1 = AZStd::make_shared<MockManifestInt>(1);

+ 5 - 0
Code/Tools/SceneAPI/SceneData/DllMain.cpp

@@ -129,6 +129,11 @@ extern "C" AZ_DLL_EXPORT void ReflectBehavior(AZ::BehaviorContext * context)
     AZ::SceneAPI::SceneData::ReflectBehavior(context);
     AZ::SceneAPI::SceneData::ReflectBehavior(context);
 }
 }
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo()
+{
+    AZ::GetCurrentSerializeContextModule().Cleanup();
+}
+
 extern "C" AZ_DLL_EXPORT void UninitializeDynamicModule()
 extern "C" AZ_DLL_EXPORT void UninitializeDynamicModule()
 {
 {
     if (!g_sceneDataInitialized)
     if (!g_sceneDataInitialized)

+ 4 - 0
Code/Tools/SceneAPI/SceneData/Tests/GraphData/GraphDataBehaviorTests.cpp

@@ -34,6 +34,8 @@
 #include <SceneAPI/SceneData/GraphData/RootBoneData.h>
 #include <SceneAPI/SceneData/GraphData/RootBoneData.h>
 #include <SceneAPI/SceneData/GraphData/TransformData.h>
 #include <SceneAPI/SceneData/GraphData/TransformData.h>
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace AZ
 namespace AZ
 {
 {
     namespace SceneAPI
     namespace SceneAPI
@@ -277,6 +279,8 @@ namespace AZ
                     m_serializeContext.reset();
                     m_serializeContext.reset();
                     m_behaviorContext.reset();
                     m_behaviorContext.reset();
 
 
+                    CleanUpSceneDataGenericClassInfo();
+
                     AZ::NameDictionary::Destroy();
                     AZ::NameDictionary::Destroy();
                     UnitTest::AllocatorsFixture::TearDown();
                     UnitTest::AllocatorsFixture::TearDown();
                 }
                 }

+ 6 - 0
Code/Tools/SceneAPI/SceneData/Tests/SceneManifest/SceneManifestRuleTests.cpp

@@ -28,6 +28,9 @@
 #include <AzCore/UnitTest/Mocks/MockSettingsRegistry.h>
 #include <AzCore/UnitTest/Mocks/MockSettingsRegistry.h>
 #include <AzCore/UnitTest/TestTypes.h>
 #include <AzCore/UnitTest/TestTypes.h>
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace AZ
 namespace AZ
 {
 {
     namespace SceneAPI
     namespace SceneAPI
@@ -123,6 +126,9 @@ namespace AZ
                 AZ::SettingsRegistry::Unregister(&m_data->m_settings);
                 AZ::SettingsRegistry::Unregister(&m_data->m_settings);
                 m_data.reset();
                 m_data.reset();
 
 
+                CleanUpSceneCoreGenericClassInfo();
+                CleanUpSceneDataGenericClassInfo();
+
                 AZ::NameDictionary::Destroy();
                 AZ::NameDictionary::Destroy();
                 UnitTest::AllocatorsFixture::TearDown();
                 UnitTest::AllocatorsFixture::TearDown();
             }
             }

+ 6 - 0
Code/Tools/SceneAPI/SceneData/Tests/SceneManifest/SceneScriptRuleTests.cpp

@@ -33,6 +33,9 @@
 #include <AzCore/UnitTest/Mocks/MockSettingsRegistry.h>
 #include <AzCore/UnitTest/Mocks/MockSettingsRegistry.h>
 #include <AzCore/UnitTest/TestTypes.h>
 #include <AzCore/UnitTest/TestTypes.h>
 
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace Testing
 namespace Testing
 {
 {
     struct SceneScriptTest
     struct SceneScriptTest
@@ -111,6 +114,9 @@ namespace Testing
             AZ::SettingsRegistry::Unregister(&m_data->m_settings);
             AZ::SettingsRegistry::Unregister(&m_data->m_settings);
             m_data.reset();
             m_data.reset();
 
 
+            CleanUpSceneDataGenericClassInfo();
+            CleanUpSceneCoreGenericClassInfo();
+
             AZ::NameDictionary::Destroy();
             AZ::NameDictionary::Destroy();
             UnitTest::AllocatorsFixture::TearDown();
             UnitTest::AllocatorsFixture::TearDown();
         }
         }