ViewportUiDisplayTests.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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/std/smart_ptr/make_shared.h>
  9. #include <AzCore/Math/Transform.h>
  10. #include <AzCore/UnitTest/TestTypes.h>
  11. #include <AzFramework/Viewport/CameraState.h>
  12. #include <AzFramework/Viewport/ViewportScreen.h>
  13. #include <AzTest/AzTest.h>
  14. #include <AzToolsFramework/ViewportUi/ViewportUiDisplay.h>
  15. #include <AzToolsFramework/Viewport/ViewportMessages.h>
  16. namespace UnitTest
  17. {
  18. using ViewportUiDisplay = AzToolsFramework::ViewportUi::Internal::ViewportUiDisplay;
  19. using ViewportUiElementId = AzToolsFramework::ViewportUi::ViewportUiElementId;
  20. using ButtonGroup = AzToolsFramework::ViewportUi::Internal::ButtonGroup;
  21. // sets up a parent widget and render overlay to attach the Viewport UI to
  22. // as well as a button group with one button
  23. class ViewportUiDisplayTestFixture : public ::testing::Test
  24. {
  25. public:
  26. ViewportUiDisplayTestFixture() = default;
  27. void SetUp() override
  28. {
  29. m_buttonGroup = AZStd::make_shared<ButtonGroup>();
  30. m_buttonGroup->AddButton("");
  31. m_parentWidget = new QWidget();
  32. m_mockRenderOverlay = new QWidget();
  33. }
  34. void TearDown() override
  35. {
  36. m_buttonGroup.reset();
  37. delete m_parentWidget;
  38. delete m_mockRenderOverlay;
  39. }
  40. QWidget* m_parentWidget = nullptr;
  41. QWidget* m_mockRenderOverlay = nullptr;
  42. AZStd::shared_ptr<ButtonGroup> m_buttonGroup = nullptr;
  43. };
  44. TEST_F(ViewportUiDisplayTestFixture, ViewportUiInitializationReturnsProperlyParentedWidgets)
  45. {
  46. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  47. EXPECT_TRUE(viewportUi.GetUiMainWindow()->parent() == m_parentWidget);
  48. EXPECT_TRUE(viewportUi.GetUiOverlay()->parent() == m_parentWidget);
  49. }
  50. TEST_F(ViewportUiDisplayTestFixture, InitializeUiOverlaySetsViewportUiVisibilityToFalse)
  51. {
  52. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  53. viewportUi.InitializeUiOverlay();
  54. EXPECT_FALSE(viewportUi.GetUiMainWindow()->isVisible());
  55. EXPECT_FALSE(viewportUi.GetUiOverlay()->isVisible());
  56. }
  57. TEST_F(ViewportUiDisplayTestFixture, RemoveViewportUiElementRemovesElementFromViewportUi)
  58. {
  59. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  60. viewportUi.AddCluster(m_buttonGroup, AzToolsFramework::ViewportUi::Alignment::TopLeft);
  61. auto widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  62. EXPECT_TRUE(widget.get() != nullptr);
  63. viewportUi.RemoveViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  64. widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  65. EXPECT_TRUE(widget.get() == nullptr);
  66. }
  67. TEST_F(ViewportUiDisplayTestFixture, ShowViewportUiElementSetsWidgetVisibilityToTrue)
  68. {
  69. m_mockRenderOverlay->setVisible(true);
  70. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  71. viewportUi.InitializeUiOverlay();
  72. viewportUi.AddCluster(m_buttonGroup, AzToolsFramework::ViewportUi::Alignment::TopLeft);
  73. viewportUi.Update();
  74. viewportUi.ShowViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  75. EXPECT_TRUE(viewportUi.IsViewportUiElementVisible(m_buttonGroup->GetViewportUiElementId()));
  76. }
  77. TEST_F(ViewportUiDisplayTestFixture, HideViewportUiElementSetsWidgetVisibilityToFalse)
  78. {
  79. m_mockRenderOverlay->setVisible(true);
  80. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  81. viewportUi.InitializeUiOverlay();
  82. viewportUi.AddCluster(m_buttonGroup, AzToolsFramework::ViewportUi::Alignment::TopLeft);
  83. viewportUi.HideViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  84. EXPECT_FALSE(viewportUi.IsViewportUiElementVisible(m_buttonGroup->GetViewportUiElementId()));
  85. }
  86. TEST_F(ViewportUiDisplayTestFixture, UpdateUiOverlayGeometryChangesGeometryToMatchViewportUiElements)
  87. {
  88. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  89. viewportUi.InitializeUiOverlay();
  90. viewportUi.AddCluster(m_buttonGroup, AzToolsFramework::ViewportUi::Alignment::TopLeft);
  91. viewportUi.Update();
  92. auto widget = viewportUi.GetViewportUiElement(m_buttonGroup->GetViewportUiElementId());
  93. EXPECT_EQ(viewportUi.GetUiMainWindow()->mask(), widget->geometry());
  94. }
  95. TEST_F(ViewportUiDisplayTestFixture, UpdateSetsViewportUiInvisibleIfNoChildGeometry)
  96. {
  97. m_mockRenderOverlay->setVisible(true);
  98. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  99. viewportUi.InitializeUiOverlay();
  100. auto buttonGroup = AZStd::make_shared<ButtonGroup>();
  101. buttonGroup->AddButton("");
  102. viewportUi.AddCluster(buttonGroup, AzToolsFramework::ViewportUi::Alignment::TopLeft);
  103. viewportUi.Update();
  104. EXPECT_TRUE(viewportUi.GetUiMainWindow()->isVisible());
  105. viewportUi.RemoveViewportUiElement(buttonGroup->GetViewportUiElementId());
  106. viewportUi.Update();
  107. EXPECT_FALSE(viewportUi.GetUiMainWindow()->isVisible());
  108. }
  109. TEST_F(ViewportUiDisplayTestFixture, UpdateSetsUiDimensionsToMatchRenderViewport)
  110. {
  111. auto geometry = QRect(25, 50, 200, 100);
  112. m_mockRenderOverlay->setGeometry(geometry);
  113. m_mockRenderOverlay->setVisible(true);
  114. ViewportUiDisplay viewportUi(m_parentWidget, m_mockRenderOverlay);
  115. viewportUi.InitializeUiOverlay();
  116. viewportUi.Update();
  117. EXPECT_EQ(viewportUi.GetUiOverlay()->height(), m_mockRenderOverlay->height());
  118. EXPECT_EQ(viewportUi.GetUiOverlay()->width(), m_mockRenderOverlay->width());
  119. }
  120. } // namespace UnitTest