test_DisplaySettingsPythonBindings.cpp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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 "EditorDefs.h"
  9. #include <AzTest/AzTest.h>
  10. #include <Util/EditorUtils.h>
  11. #include <AzCore/base.h>
  12. #include <AzCore/Memory/SystemAllocator.h>
  13. #include <AzCore/Debug/TraceMessageBus.h>
  14. #include <AzCore/UnitTest/TestTypes.h>
  15. #include <AzCore/UserSettings/UserSettingsComponent.h>
  16. #include <AzToolsFramework/API/ToolsApplicationAPI.h>
  17. #include <AzToolsFramework/Application/ToolsApplication.h>
  18. #include <DisplaySettings.h>
  19. #include <DisplaySettingsPythonFuncs.h>
  20. #include <AzCore/RTTI/BehaviorContext.h>
  21. namespace DisplaySettingsPythonBindingsUnitTests
  22. {
  23. class DisplaySettingsPythonBindingsFixture
  24. : public ::UnitTest::LeakDetectionFixture
  25. {
  26. public:
  27. AzToolsFramework::ToolsApplication m_app;
  28. void SetUp() override
  29. {
  30. AzFramework::Application::Descriptor appDesc;
  31. AZ::ComponentApplication::StartupParameters startupParameters;
  32. startupParameters.m_loadSettingsRegistry = false;
  33. m_app.Start(appDesc, startupParameters);
  34. m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsPythonFuncsHandler::CreateDescriptor());
  35. // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
  36. // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
  37. // in the unit tests.
  38. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
  39. }
  40. void TearDown() override
  41. {
  42. m_app.Stop();
  43. }
  44. };
  45. TEST_F(DisplaySettingsPythonBindingsFixture, DisplaySettingsEditorCommands_ApiExists)
  46. {
  47. AZ::BehaviorContext* behaviorContext = m_app.GetBehaviorContext();
  48. ASSERT_TRUE(behaviorContext);
  49. EXPECT_TRUE(behaviorContext->m_methods.find("get_misc_editor_settings") != behaviorContext->m_methods.end());
  50. EXPECT_TRUE(behaviorContext->m_methods.find("set_misc_editor_settings") != behaviorContext->m_methods.end());
  51. }
  52. class DisplaySettingsComponentFixture
  53. : public ::UnitTest::LeakDetectionFixture
  54. {
  55. public:
  56. AzToolsFramework::ToolsApplication m_app;
  57. void SetUp() override
  58. {
  59. AzFramework::Application::Descriptor appDesc;
  60. AZ::ComponentApplication::StartupParameters startupParameters;
  61. startupParameters.m_loadSettingsRegistry = false;
  62. m_app.Start(appDesc, startupParameters);
  63. m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsComponent::CreateDescriptor());
  64. // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
  65. // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
  66. // in the unit tests.
  67. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
  68. }
  69. void TearDown() override
  70. {
  71. m_app.Stop();
  72. }
  73. };
  74. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsComponent_ApiExists)
  75. {
  76. AZ::BehaviorContext* behaviorContext = m_app.GetBehaviorContext();
  77. ASSERT_TRUE(behaviorContext);
  78. auto itDisplaySettingsBus = behaviorContext->m_ebuses.find("DisplaySettingsBus");
  79. if (itDisplaySettingsBus != behaviorContext->m_ebuses.end())
  80. {
  81. AZ::BehaviorEBus* behaviorBus = itDisplaySettingsBus->second;
  82. EXPECT_TRUE(behaviorBus->m_events.find("GetSettingsState") != behaviorBus->m_events.end());
  83. EXPECT_TRUE(behaviorBus->m_events.find("SetSettingsState") != behaviorBus->m_events.end());
  84. }
  85. }
  86. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsComponent_ConvertToFlagsAllUnset)
  87. {
  88. AzToolsFramework::DisplaySettingsState state;
  89. state.m_noCollision = false;
  90. state.m_noLabels = false;
  91. state.m_simulate = false;
  92. state.m_hideTracks = false;
  93. state.m_hideLinks = false;
  94. state.m_hideHelpers = false;
  95. state.m_showDimensionFigures = false;
  96. AzToolsFramework::DisplaySettingsComponent component;
  97. int result = component.ConvertToFlags(state);
  98. int expected = 0x0;
  99. EXPECT_EQ(result, expected);
  100. }
  101. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsComponent_ConvertToFlagsAllSet)
  102. {
  103. AzToolsFramework::DisplaySettingsState state;
  104. state.m_noCollision = true;
  105. state.m_noLabels = true;
  106. state.m_simulate = true;
  107. state.m_hideTracks = true;
  108. state.m_hideLinks = true;
  109. state.m_hideHelpers = true;
  110. state.m_showDimensionFigures = true;
  111. AzToolsFramework::DisplaySettingsComponent component;
  112. int result = component.ConvertToFlags(state);
  113. int expected = SETTINGS_NOCOLLISION |
  114. SETTINGS_NOLABELS |
  115. SETTINGS_PHYSICS |
  116. SETTINGS_HIDE_TRACKS |
  117. SETTINGS_HIDE_LINKS |
  118. SETTINGS_HIDE_HELPERS |
  119. SETTINGS_SHOW_DIMENSIONFIGURES;
  120. EXPECT_EQ(result, expected);
  121. }
  122. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsComponent_ConvertToSettingsAllSet)
  123. {
  124. int flags = SETTINGS_NOCOLLISION |
  125. SETTINGS_NOLABELS |
  126. SETTINGS_PHYSICS |
  127. SETTINGS_HIDE_TRACKS |
  128. SETTINGS_HIDE_LINKS |
  129. SETTINGS_HIDE_HELPERS |
  130. SETTINGS_SHOW_DIMENSIONFIGURES;
  131. AzToolsFramework::DisplaySettingsState expected;
  132. expected.m_noCollision = true;
  133. expected.m_noLabels = true;
  134. expected.m_simulate = true;
  135. expected.m_hideTracks = true;
  136. expected.m_hideLinks = true;
  137. expected.m_hideHelpers = true;
  138. expected.m_showDimensionFigures = true;
  139. AzToolsFramework::DisplaySettingsComponent component;
  140. AzToolsFramework::DisplaySettingsState result = component.ConvertToSettings(flags);
  141. EXPECT_EQ(result, expected);
  142. }
  143. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsComponent_ConvertToSettingsAllUnset)
  144. {
  145. int flags = 0x0;
  146. AzToolsFramework::DisplaySettingsState expected;
  147. expected.m_noCollision = false;
  148. expected.m_noLabels = false;
  149. expected.m_simulate = false;
  150. expected.m_hideTracks = false;
  151. expected.m_hideLinks = false;
  152. expected.m_hideHelpers = false;
  153. expected.m_showDimensionFigures = false;
  154. AzToolsFramework::DisplaySettingsComponent component;
  155. AzToolsFramework::DisplaySettingsState result = component.ConvertToSettings(flags);
  156. EXPECT_EQ(result, expected);
  157. }
  158. TEST_F(DisplaySettingsComponentFixture, DisplaySettingsState_ToString)
  159. {
  160. AzToolsFramework::DisplaySettingsState state;
  161. state.m_noCollision = false;
  162. state.m_noLabels = true;
  163. state.m_simulate = false;
  164. state.m_hideTracks = true;
  165. state.m_hideLinks = false;
  166. state.m_hideHelpers = true;
  167. state.m_showDimensionFigures = false;
  168. AZStd::string result = state.ToString();
  169. EXPECT_EQ(result, "(no_collision=False, no_labels=True, simulate=False, hide_tracks=True, hide_links=False, hide_helpers=True, show_dimension_figures=False)");
  170. }
  171. }