ScriptEventsTestFixture.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. #pragma once
  9. #include "ScriptEventsTestApplication.h"
  10. #include <AzTest/AzTest.h>
  11. #include <AzCore/IO/FileIO.h>
  12. #include <AzCore/Jobs/JobManager.h>
  13. #include <AzCore/Jobs/JobContext.h>
  14. #include <AzCore/Serialization/SerializeContext.h>
  15. #include <AzCore/Serialization/EditContext.h>
  16. #include <AzCore/Asset/AssetManagerComponent.h>
  17. #include <AzCore/UnitTest/TestTypes.h>
  18. #include <AzFramework/IO/LocalFileIO.h>
  19. #include <ScriptEvents/ScriptEventsGem.h>
  20. #include <ScriptEvents/Internal/VersionedProperty.h>
  21. #include <ScriptEvents/ScriptEventParameter.h>
  22. #include <ScriptEvents/ScriptEventsMethod.h>
  23. #include <ScriptEvents/ScriptEventsAsset.h>
  24. #include "ScriptEventTestUtilities.h"
  25. #include <AzCore/Math/MathReflection.h>
  26. #include <AzCore/Memory/PoolAllocator.h>
  27. namespace ScriptEventsTests
  28. {
  29. class ScriptEventsTestFixture
  30. : public ::testing::Test
  31. {
  32. static ScriptEventsTests::Application* GetApplication();
  33. protected:
  34. static ScriptEventsTests::Application* s_application;
  35. static inline UnitTest::LeakDetectionBase s_leakDetection{};
  36. static void SetUpTestCase()
  37. {
  38. if (s_application == nullptr)
  39. {
  40. AZ::ComponentApplication::StartupParameters appStartup;
  41. s_application = aznew ScriptEventsTests::Application();
  42. {
  43. AZ::ComponentApplication::Descriptor descriptor;
  44. descriptor.m_useExistingAllocator = true; // Use the SystemAllocator we own in this test.
  45. appStartup.m_createStaticModulesCallback =
  46. [](AZStd::vector<AZ::Module*>& modules)
  47. {
  48. modules.emplace_back(new ScriptEvents::ScriptEventsModule);
  49. };
  50. s_application->Start(descriptor, appStartup);
  51. }
  52. AZ::SerializeContext* serializeContext = s_application->GetSerializeContext();
  53. serializeContext->RegisterGenericType<AZStd::string>();
  54. serializeContext->RegisterGenericType<AZStd::any>();
  55. AZ::BehaviorContext* behaviorContext = s_application->GetBehaviorContext();
  56. Utilities::Reflect(behaviorContext);
  57. AZ_Assert(s_application->FindEntity(AZ::SystemEntityId), "SystemEntity must exist");
  58. }
  59. AZ::TickBus::AllowFunctionQueuing(true);
  60. }
  61. static void TearDownTestCase()
  62. {
  63. AZ_Assert(s_application->FindEntity(AZ::SystemEntityId), "SystemEntity must exist");
  64. AZ::Data::AssetManager::Instance().DispatchEvents();
  65. if (s_application)
  66. {
  67. s_application->Stop();
  68. delete s_application;
  69. s_application = nullptr;
  70. }
  71. s_leakDetection.CheckAllocatorsForLeaks();
  72. }
  73. void SetUp() override
  74. {
  75. m_serializeContext = s_application->GetSerializeContext();
  76. m_behaviorContext = s_application->GetBehaviorContext();
  77. if (!AZ::IO::FileIOBase::GetInstance())
  78. {
  79. m_fileIO.reset(aznew AZ::IO::LocalFileIO());
  80. AZ::IO::FileIOBase::SetInstance(m_fileIO.get());
  81. }
  82. AZ_Assert(AZ::IO::FileIOBase::GetInstance(), "File IO was not properly installed");
  83. }
  84. void TearDown() override
  85. {
  86. AZ::IO::FileIOBase::SetInstance(nullptr);
  87. m_fileIO = nullptr;
  88. }
  89. AZStd::unique_ptr<AZ::IO::FileIOBase> m_fileIO;
  90. AZ::SerializeContext* m_serializeContext;
  91. AZ::BehaviorContext* m_behaviorContext;
  92. };
  93. }