ViewportUiWidgetManagerTests.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 <AzCore/Math/Transform.h>
  9. #include <AzCore/UnitTest/TestTypes.h>
  10. #include <AzFramework/Viewport/CameraState.h>
  11. #include <AzFramework/Viewport/ViewportScreen.h>
  12. #include <AzTest/AzTest.h>
  13. #include <AzToolsFramework/ViewportUi/ViewportUiWidgetCallbacks.h>
  14. #include <QWidget>
  15. namespace UnitTest
  16. {
  17. class ViewportUiWidgetCallbacksTest : public AzToolsFramework::ViewportUi::Internal::ViewportUiWidgetCallbacks
  18. {
  19. public:
  20. AZStd::vector<QPointer<QObject>>& GetWidgets()
  21. {
  22. return m_widgets;
  23. }
  24. AZStd::unordered_map<QObject*, AZStd::function<void(QPointer<QObject>)>>& GetUpdateCallbacks()
  25. {
  26. return m_updateCallbacks;
  27. }
  28. };
  29. TEST(ViewportUiWidgetCallbacks, AddWidgetAddsToInternalVector)
  30. {
  31. ViewportUiWidgetCallbacksTest testWidgetManager;
  32. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 0);
  33. QObject* mockObject = new QWidget();
  34. testWidgetManager.AddWidget(mockObject);
  35. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 1);
  36. EXPECT_EQ(testWidgetManager.GetWidgets()[0], mockObject);
  37. }
  38. TEST(ViewportUiWidgetCallbacks, AddWidgetDoesNotAddIfWidgetIsNull)
  39. {
  40. ViewportUiWidgetCallbacksTest testWidgetManager;
  41. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 0);
  42. QObject* mockObject = nullptr;
  43. testWidgetManager.AddWidget(mockObject);
  44. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 0);
  45. }
  46. TEST(ViewportUiWidgetCallbacks, RemoveWidgetRemovesFromInternalVector)
  47. {
  48. ViewportUiWidgetCallbacksTest testWidgetManager;
  49. QObject* mockObject = new QWidget();
  50. testWidgetManager.AddWidget(mockObject);
  51. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 1);
  52. testWidgetManager.RemoveWidget(mockObject);
  53. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 0);
  54. }
  55. TEST(ViewportUiWidgetCallbacks, RegisterUpdateCallbackStoresCallbackFunction)
  56. {
  57. ViewportUiWidgetCallbacksTest testWidgetManager;
  58. QObject* mockObject = new QWidget();
  59. testWidgetManager.AddWidget(mockObject);
  60. EXPECT_EQ(testWidgetManager.GetUpdateCallbacks().size(), 0);
  61. auto mockFn = []([[maybe_unused]] QObject* object)
  62. {
  63. return;
  64. };
  65. testWidgetManager.RegisterUpdateCallback(mockObject, mockFn);
  66. EXPECT_EQ(testWidgetManager.GetUpdateCallbacks().size(), 1);
  67. }
  68. class ViewportUiWidgetAssertFixture
  69. : public LeakDetectionFixture
  70. {};
  71. TEST_F(ViewportUiWidgetAssertFixture, RegisterUpdateCallbackDoesNotRegisterFunctionForNotAddedObject)
  72. {
  73. ViewportUiWidgetCallbacksTest testWidgetManager;
  74. QObject* mockObject = new QWidget();
  75. auto mockFn = []([[maybe_unused]] QObject* object)
  76. {
  77. return;
  78. };
  79. AZ_TEST_START_TRACE_SUPPRESSION;
  80. testWidgetManager.RegisterUpdateCallback(mockObject, mockFn);
  81. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  82. EXPECT_EQ(testWidgetManager.GetUpdateCallbacks().size(), 0);
  83. }
  84. TEST(ViewportUiWidgetCallbacks, UpdateCallsCallbackFunction)
  85. {
  86. ViewportUiWidgetCallbacksTest testWidgetManager;
  87. QWidget* mockObject = new QWidget();
  88. mockObject->setVisible(true);
  89. testWidgetManager.AddWidget(mockObject);
  90. auto mockFn = [](QObject* object)
  91. {
  92. static_cast<QWidget*>(object)->setVisible(false);
  93. };
  94. testWidgetManager.RegisterUpdateCallback(mockObject, mockFn);
  95. testWidgetManager.Update();
  96. EXPECT_FALSE(mockObject->isVisible());
  97. }
  98. TEST(ViewportUiWidgetCallbacks, UpdateRemovesDeletedObjects)
  99. {
  100. ViewportUiWidgetCallbacksTest testWidgetManager;
  101. QWidget* mockObject = new QWidget();
  102. mockObject->setVisible(true);
  103. testWidgetManager.AddWidget(mockObject);
  104. auto mockFn = []([[maybe_unused]] QObject* object)
  105. {
  106. return;
  107. };
  108. testWidgetManager.RegisterUpdateCallback(mockObject, mockFn);
  109. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 1);
  110. EXPECT_EQ(testWidgetManager.GetUpdateCallbacks().size(), 1);
  111. delete mockObject;
  112. testWidgetManager.Update();
  113. EXPECT_EQ(testWidgetManager.GetWidgets().size(), 0);
  114. }
  115. } // namespace UnitTest