EditorEntitySelectionTests.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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 <AzTest/AzTest.h>
  9. #include <AzToolsFramework/Application/ToolsApplication.h>
  10. #include <AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h>
  11. namespace UnitTest
  12. {
  13. using namespace AZ;
  14. using namespace AzToolsFramework;
  15. class EditorEntitySelectionTest
  16. : public ToolsApplicationFixture<>
  17. {
  18. void SetUpEditorFixtureImpl() override
  19. {
  20. m_entity1 = CreateDefaultEditorEntity("Entity1");
  21. m_entity2 = CreateDefaultEditorEntity("Entity2");
  22. m_entity3 = CreateDefaultEditorEntity("Entity3");
  23. m_entity4 = CreateDefaultEditorEntity("Entity4");
  24. }
  25. public:
  26. AZ::EntityId m_entity1;
  27. AZ::EntityId m_entity2;
  28. AZ::EntityId m_entity3;
  29. AZ::EntityId m_entity4;
  30. };
  31. TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_SetAndGetSelectedEntities)
  32. {
  33. // Set entity1 and entity4 as selected
  34. EntityIdList testEntityIds{ m_entity1, m_entity4 };
  35. ToolsApplicationRequestBus::Broadcast(
  36. &ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
  37. EntityIdList selectedEntityIds;
  38. ToolsApplicationRequestBus::BroadcastResult(
  39. selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  40. EXPECT_EQ(selectedEntityIds.size(), testEntityIds.size());
  41. for (auto& id : testEntityIds)
  42. {
  43. EXPECT_TRUE(AZStd::find(selectedEntityIds.begin(), selectedEntityIds.end(), id) != selectedEntityIds.end());
  44. }
  45. // Clear all selected entities
  46. testEntityIds.clear();
  47. ToolsApplicationRequestBus::Broadcast(
  48. &ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
  49. ToolsApplicationRequestBus::BroadcastResult(
  50. selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  51. EXPECT_TRUE(selectedEntityIds.empty());
  52. }
  53. TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_MarkEntitySelectedAndDeselected)
  54. {
  55. // Mark testEntityId as selected
  56. AZ::EntityId testEntityId = m_entity1;
  57. ToolsApplicationRequestBus::Broadcast(
  58. &ToolsApplicationRequests::MarkEntitySelected, testEntityId);
  59. bool testEntitySelected = false;
  60. ToolsApplicationRequestBus::BroadcastResult(
  61. testEntitySelected, &ToolsApplicationRequests::IsSelected, testEntityId);
  62. bool anyEntitySelected = false;
  63. ToolsApplicationRequestBus::BroadcastResult(
  64. anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
  65. int selectedEntitiesCount = 0;
  66. ToolsApplicationRequestBus::BroadcastResult(
  67. selectedEntitiesCount, &ToolsApplicationRequests::GetSelectedEntitiesCount);
  68. EntityIdList selectedEntityIds;
  69. ToolsApplicationRequestBus::BroadcastResult(
  70. selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  71. EXPECT_TRUE(testEntitySelected);
  72. EXPECT_TRUE(anyEntitySelected);
  73. EXPECT_EQ(selectedEntitiesCount, 1);
  74. EXPECT_EQ(selectedEntityIds.size(), 1);
  75. EXPECT_EQ(selectedEntityIds.front(), testEntityId);
  76. // Mark testEntityId as deselected
  77. ToolsApplicationRequestBus::Broadcast(
  78. &ToolsApplicationRequests::MarkEntityDeselected, testEntityId);
  79. ToolsApplicationRequestBus::BroadcastResult(
  80. testEntitySelected, &ToolsApplicationRequests::IsSelected, testEntityId);
  81. ToolsApplicationRequestBus::BroadcastResult(
  82. anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
  83. ToolsApplicationRequestBus::BroadcastResult(
  84. selectedEntitiesCount, &ToolsApplicationRequests::GetSelectedEntitiesCount);
  85. ToolsApplicationRequestBus::BroadcastResult(
  86. selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  87. EXPECT_FALSE(testEntitySelected);
  88. EXPECT_FALSE(anyEntitySelected);
  89. EXPECT_EQ(selectedEntitiesCount, 0);
  90. EXPECT_TRUE(selectedEntityIds.empty());
  91. }
  92. TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_MarkEntitiesDeselectedAndSelected)
  93. {
  94. // Set all entities as selected
  95. EntityIdList testEntityIds{ m_entity1, m_entity2, m_entity3, m_entity4 };
  96. ToolsApplicationRequestBus::Broadcast(
  97. &ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
  98. // Deselect first half of entities
  99. EntityIdList deselctedEntityIds{ testEntityIds.begin(), testEntityIds.begin() + testEntityIds.size() / 2 };
  100. EntityIdList expectedSelectedEntityIds{ testEntityIds.begin() + testEntityIds.size() / 2, testEntityIds.end() };
  101. ToolsApplicationRequestBus::Broadcast(
  102. &ToolsApplicationRequests::MarkEntitiesDeselected, deselctedEntityIds);
  103. bool targetSelected = false;
  104. for (auto& id : expectedSelectedEntityIds)
  105. {
  106. ToolsApplicationRequestBus::BroadcastResult(
  107. targetSelected, &ToolsApplicationRequests::IsSelected, id);
  108. EXPECT_TRUE(targetSelected);
  109. }
  110. for (auto& id : deselctedEntityIds)
  111. {
  112. ToolsApplicationRequestBus::BroadcastResult(
  113. targetSelected, &ToolsApplicationRequests::IsSelected, id);
  114. EXPECT_FALSE(targetSelected);
  115. }
  116. bool anyEntitySelected = false;
  117. ToolsApplicationRequestBus::BroadcastResult(
  118. anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
  119. int selectedEntitiesCount = 0;
  120. ToolsApplicationRequestBus::BroadcastResult(
  121. selectedEntitiesCount, &ToolsApplicationRequests::GetSelectedEntitiesCount);
  122. EntityIdList actualSelectedEntityIds;
  123. ToolsApplicationRequestBus::BroadcastResult(
  124. actualSelectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  125. EXPECT_TRUE(anyEntitySelected);
  126. EXPECT_EQ(selectedEntitiesCount, expectedSelectedEntityIds.size());
  127. EXPECT_EQ(actualSelectedEntityIds.size(), expectedSelectedEntityIds.size());
  128. for (auto& id : expectedSelectedEntityIds)
  129. {
  130. EXPECT_TRUE(AZStd::find(actualSelectedEntityIds.begin(), actualSelectedEntityIds.end(), id) != actualSelectedEntityIds.end());
  131. }
  132. // Re-select first half of entities so that all entities got selected again
  133. ToolsApplicationRequestBus::Broadcast(
  134. &ToolsApplicationRequests::MarkEntitiesSelected, deselctedEntityIds);
  135. expectedSelectedEntityIds = testEntityIds;
  136. ToolsApplicationRequestBus::BroadcastResult(
  137. anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
  138. ToolsApplicationRequestBus::BroadcastResult(
  139. selectedEntitiesCount, &ToolsApplicationRequests::GetSelectedEntitiesCount);
  140. ToolsApplicationRequestBus::BroadcastResult(
  141. actualSelectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
  142. EXPECT_TRUE(anyEntitySelected);
  143. EXPECT_EQ(selectedEntitiesCount, expectedSelectedEntityIds.size());
  144. EXPECT_EQ(actualSelectedEntityIds.size(), expectedSelectedEntityIds.size());
  145. for (auto& id : expectedSelectedEntityIds)
  146. {
  147. EXPECT_TRUE(AZStd::find(actualSelectedEntityIds.begin(), actualSelectedEntityIds.end(), id) != actualSelectedEntityIds.end());
  148. ToolsApplicationRequestBus::BroadcastResult(
  149. targetSelected, &ToolsApplicationRequests::IsSelected, id);
  150. EXPECT_TRUE(targetSelected);
  151. }
  152. }
  153. }