DeleteEntity_UnderNestedEntityHierarchy.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. """
  6. def DeleteEntity_UnderNestedEntityHierarchy():
  7. """
  8. Test description:
  9. - Creates a nested entity hierarchy
  10. - Deletes an entity from the hierarchy
  11. Test passes if the entity is successfully deleted, and Undo/Redo restores/re-deletes the entity.
  12. """
  13. import azlmbr.bus as bus
  14. import azlmbr.entity as entity
  15. import azlmbr.legacy.general as general
  16. import azlmbr.math as math
  17. from EditorPythonTestTools.editor_python_test_tools.editor_entity_utils import EditorEntity
  18. from EditorPythonTestTools.editor_python_test_tools.wait_utils import PrefabWaiter
  19. import Prefab.tests.PrefabTestUtils as prefab_test_utils
  20. ENTITY_POS = math.Vector3(0.0, 0.0, 0.0)
  21. NUM_NESTED_ENTITY_LEVELS = 10
  22. NESTED_ENTITY_PREFIX = "TestEntity_"
  23. def validate_nested_entity_deletion(num_expected_deleted_entities, first_deleted_entity_suffix,
  24. last_deleted_entity_suffix):
  25. for i in range(first_deleted_entity_suffix, last_deleted_entity_suffix):
  26. search_filter = entity.SearchFilter()
  27. search_filter.names = [f"{NESTED_ENTITY_PREFIX}{i}"]
  28. nested_entities = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
  29. assert len(nested_entities) == 0, f"Unexpectedly found {NESTED_ENTITY_PREFIX}{i} when it should be deleted"
  30. prefab_test_utils.validate_linear_nested_entities(nested_entities_root,
  31. NUM_NESTED_ENTITY_LEVELS - num_expected_deleted_entities,
  32. ENTITY_POS)
  33. prefab_test_utils.open_base_tests_level()
  34. # Creates new nested entities at the root level
  35. # Asserts if creation didn't succeed
  36. nested_entities_root = prefab_test_utils.create_linear_nested_entities(NESTED_ENTITY_PREFIX,
  37. NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
  38. prefab_test_utils.validate_linear_nested_entities(nested_entities_root, NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
  39. # Find an entity in the hierarchy, delete it, and validate Undo/Redo functionality
  40. search_filter = entity.SearchFilter()
  41. search_filter.names = [f"{NESTED_ENTITY_PREFIX}5"]
  42. entity_to_delete = EditorEntity(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)[0])
  43. entity_to_delete.delete()
  44. # TestEntity_5 -> TestEntity_9 should all be removed at this point
  45. validate_nested_entity_deletion(5, 5, 9)
  46. # Undo, and validate the nested entity hierarchy is restored
  47. general.undo()
  48. PrefabWaiter.wait_for_propagation()
  49. prefab_test_utils.validate_linear_nested_entities(nested_entities_root, NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
  50. # Redo, and validate that the appropriate nested entities are once again deleted
  51. general.redo()
  52. PrefabWaiter.wait_for_propagation()
  53. validate_nested_entity_deletion(5, 5, 9)
  54. if __name__ == "__main__":
  55. from editor_python_test_tools.utils import Report
  56. Report.start_test(DeleteEntity_UnderNestedEntityHierarchy)