فهرست منبع

[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 2 سال پیش
والد
کامیت
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);
 }
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo()
+{
+    AZ::GetCurrentSerializeContextModule().Cleanup();
+}
+
 extern "C" AZ_DLL_EXPORT void 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
 extern "C" AZ_DLL_EXPORT void ReflectTypes(AZ::SerializeContext* context);
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+
 namespace AZ::SceneAPI::Containers
 {
     class MockManifestRule : public DataTypes::IManifestObject
@@ -836,6 +838,9 @@ namespace AZ::SceneAPI::Containers
             m_scriptContext.reset();
             m_behaviorContext.reset();
             m_componentApplication.reset();
+
+            CleanUpSceneCoreGenericClassInfo();
+
             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/JsonUtils.h>
 #include <AzCore/Serialization/Utils.h>
+#include <AzCore/UnitTest/TestTypes.h>
 #include <AzToolsFramework/Application/ToolsApplication.h>
 #include <SceneAPI/SceneCore/Containers/SceneManifest.h>
 #include <SceneAPI/SceneCore/DataTypes/IManifestObject.h>
 #include <string>
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+
 namespace AZ
 {
     namespace SceneAPI
@@ -106,7 +109,7 @@ namespace AZ
 
 
             class SceneManifestTest
-                : public ::testing::Test
+                : public UnitTest::AllocatorsTestFixture
                 , public AZ::Debug::TraceMessageBus::Handler
             {
             public:
@@ -155,6 +158,8 @@ namespace AZ
                     m_serializeContext.reset();
                     m_jsonRegistrationContext.reset();
                     m_jsonSystemComponent.reset();
+
+                    CleanUpSceneCoreGenericClassInfo();
                 }
 
                 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;
             };
 
-            TEST(SceneManifest, IsEmpty_Empty_True)
+            TEST_F(SceneManifestTest, IsEmpty_Empty_True)
             {
                 SceneManifest testManifest;
                 EXPECT_TRUE(testManifest.IsEmpty());
             }
 
-            TEST(SceneManifest, AddEntry_AddNewValue_ResultTrue)
+            TEST_F(SceneManifestTest, AddEntry_AddNewValue_ResultTrue)
             {
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -187,7 +192,7 @@ namespace AZ
                 EXPECT_TRUE(result);
             }
 
-            TEST(SceneManifest, AddEntry_MoveNewValue_ResultTrueAndPointerClear)
+            TEST_F(SceneManifestTest, AddEntry_MoveNewValue_ResultTrueAndPointerClear)
             {
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -197,7 +202,7 @@ namespace AZ
             }
 
             //dependent on AddEntry
-            TEST(SceneManifest, IsEmpty_NotEmpty_False)
+            TEST_F(SceneManifestTest, IsEmpty_NotEmpty_False)
             {
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -206,7 +211,7 @@ namespace AZ
             }
 
             //dependent on AddEntry and IsEmpty
-            TEST(SceneManifest, Clear_NotEmpty_EmptyTrue)
+            TEST_F(SceneManifestTest, Clear_NotEmpty_EmptyTrue)
             {
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(100);
@@ -217,7 +222,7 @@ namespace AZ
             }
 
             //RemoveEntry
-            TEST(SceneManifest, RemoveEntry_NameInList_ResultTrueAndNotStillInList)
+            TEST_F(SceneManifestTest, RemoveEntry_NameInList_ResultTrueAndNotStillInList)
             {
                 SceneManifest testManifest;
                 AZStd::shared_ptr<MockManifestInt> testDataObject = AZStd::make_shared<MockManifestInt>(1);
@@ -237,7 +242,7 @@ namespace AZ
             }
 
             // GetEntryCount
-            TEST(SceneManifest, GetEntryCount_EmptyManifest_CountIsZero)
+            TEST_F(SceneManifestTest, GetEntryCount_EmptyManifest_CountIsZero)
             {
                 SceneManifest testManifest;
                 EXPECT_TRUE(testManifest.IsEmpty());
@@ -281,7 +286,7 @@ namespace AZ
             }
 
             // RemoveEntry - continued
-            TEST(SceneManifest, RemoveEntry_IndexAdjusted_IndexReduced)
+            TEST_F(SceneManifestTest, RemoveEntry_IndexAdjusted_IndexReduced)
             {
                 SceneManifest testManifest;
                 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);
 }
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo()
+{
+    AZ::GetCurrentSerializeContextModule().Cleanup();
+}
+
 extern "C" AZ_DLL_EXPORT void UninitializeDynamicModule()
 {
     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/TransformData.h>
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace AZ
 {
     namespace SceneAPI
@@ -277,6 +279,8 @@ namespace AZ
                     m_serializeContext.reset();
                     m_behaviorContext.reset();
 
+                    CleanUpSceneDataGenericClassInfo();
+
                     AZ::NameDictionary::Destroy();
                     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/TestTypes.h>
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace AZ
 {
     namespace SceneAPI
@@ -123,6 +126,9 @@ namespace AZ
                 AZ::SettingsRegistry::Unregister(&m_data->m_settings);
                 m_data.reset();
 
+                CleanUpSceneCoreGenericClassInfo();
+                CleanUpSceneDataGenericClassInfo();
+
                 AZ::NameDictionary::Destroy();
                 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/TestTypes.h>
 
+extern "C" AZ_DLL_EXPORT void CleanUpSceneCoreGenericClassInfo();
+extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
+
 namespace Testing
 {
     struct SceneScriptTest
@@ -111,6 +114,9 @@ namespace Testing
             AZ::SettingsRegistry::Unregister(&m_data->m_settings);
             m_data.reset();
 
+            CleanUpSceneDataGenericClassInfo();
+            CleanUpSceneCoreGenericClassInfo();
+
             AZ::NameDictionary::Destroy();
             UnitTest::AllocatorsFixture::TearDown();
         }