EditorFocusModeTests.cpp 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 <Tests/FocusMode/EditorFocusModeFixture.h>
  9. #include <AzToolsFramework/API/ToolsApplicationAPI.h>
  10. namespace UnitTest
  11. {
  12. TEST_F(EditorFocusModeFixture, SetFocus)
  13. {
  14. // When an entity is set as the focus root, GetFocusRoot should return its EntityId.
  15. m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
  16. EXPECT_EQ(m_focusModeInterface->GetFocusRoot(m_editorEntityContextId), m_entityMap[CarEntityName]);
  17. // Restore default expected focus.
  18. m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
  19. }
  20. TEST_F(EditorFocusModeFixture, ClearFocus)
  21. {
  22. // Change the value from the default.
  23. m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
  24. // Calling ClearFocusRoot restores the default focus root (which is an invalid EntityId).
  25. m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
  26. EXPECT_EQ(m_focusModeInterface->GetFocusRoot(m_editorEntityContextId), AZ::EntityId());
  27. }
  28. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesRoot)
  29. {
  30. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  31. using ::testing::UnorderedElementsAre;
  32. EXPECT_EQ(entities.size(), 6);
  33. EXPECT_THAT(
  34. entities,
  35. UnorderedElementsAre(
  36. m_entityMap[CityEntityName],
  37. m_entityMap[StreetEntityName],
  38. m_entityMap[CarEntityName],
  39. m_entityMap[Passenger1EntityName],
  40. m_entityMap[SportsCarEntityName],
  41. m_entityMap[Passenger2EntityName]
  42. )
  43. );
  44. }
  45. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesClear)
  46. {
  47. m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
  48. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  49. using ::testing::UnorderedElementsAre;
  50. EXPECT_EQ(entities.size(), 6);
  51. EXPECT_THAT(
  52. entities,
  53. UnorderedElementsAre(
  54. m_entityMap[CityEntityName], m_entityMap[StreetEntityName], m_entityMap[CarEntityName], m_entityMap[Passenger1EntityName],
  55. m_entityMap[SportsCarEntityName], m_entityMap[Passenger2EntityName]));
  56. }
  57. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesBase)
  58. {
  59. m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
  60. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  61. using ::testing::UnorderedElementsAre;
  62. EXPECT_EQ(entities.size(), 5);
  63. EXPECT_THAT(
  64. entities,
  65. UnorderedElementsAre(
  66. m_entityMap[StreetEntityName],
  67. m_entityMap[CarEntityName],
  68. m_entityMap[Passenger1EntityName],
  69. m_entityMap[SportsCarEntityName],
  70. m_entityMap[Passenger2EntityName]
  71. )
  72. );
  73. }
  74. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesSiblings)
  75. {
  76. m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]);
  77. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  78. using ::testing::UnorderedElementsAre;
  79. EXPECT_EQ(entities.size(), 2);
  80. EXPECT_THAT(entities, UnorderedElementsAre(m_entityMap[SportsCarEntityName], m_entityMap[Passenger2EntityName]));
  81. }
  82. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesAddEntity)
  83. {
  84. m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]);
  85. AZ::EntityId testEntityId = CreateEditorEntity("Test", m_entityMap[Passenger2EntityName]);
  86. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  87. EXPECT_EQ(entities.size(), 3);
  88. EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end());
  89. EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[Passenger2EntityName]) != entities.end());
  90. EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), testEntityId) != entities.end());
  91. }
  92. TEST_F(EditorFocusModeFixture, GetFocusedEntitiesRemoveEntity)
  93. {
  94. m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]);
  95. AzToolsFramework::ToolsApplicationRequestBus::Broadcast(
  96. &AzToolsFramework::ToolsApplicationRequests::DeleteEntityAndAllDescendants, m_entityMap[Passenger2EntityName]);
  97. AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId);
  98. EXPECT_EQ(entities.size(), 1);
  99. EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end());
  100. }
  101. TEST_F(EditorFocusModeFixture, IsInFocusSubTreeAncestorsDescendants)
  102. {
  103. // When the focus is set to an entity, all its descendants are in the focus subtree while the ancestors aren't.
  104. m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
  105. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
  106. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
  107. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
  108. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
  109. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
  110. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
  111. }
  112. TEST_F(EditorFocusModeFixture, IsInFocusSubTreeSiblings)
  113. {
  114. // If the root entity has siblings, they are also outside of the focus subtree.
  115. m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]);
  116. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
  117. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
  118. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
  119. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
  120. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
  121. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), false);
  122. }
  123. TEST_F(EditorFocusModeFixture, IsInFocusSubTreeLeaf)
  124. {
  125. // If the root is a leaf, then the focus subtree will consists of just that entity.
  126. m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger2EntityName]);
  127. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false);
  128. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false);
  129. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), false);
  130. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), false);
  131. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false);
  132. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
  133. }
  134. TEST_F(EditorFocusModeFixture, IsInFocusSubTreeClear)
  135. {
  136. // Change the value from the default.
  137. m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]);
  138. // When the focus is cleared, the whole level is in the focus subtree; so we expect all entities to return true.
  139. m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId);
  140. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), true);
  141. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true);
  142. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true);
  143. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true);
  144. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true);
  145. EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true);
  146. }
  147. } // namespace UnitTest