123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- def DeleteEntity_UnderNestedEntityHierarchy():
- """
- Test description:
- - Creates a nested entity hierarchy
- - Deletes an entity from the hierarchy
- Test passes if the entity is successfully deleted, and Undo/Redo restores/re-deletes the entity.
- """
- import azlmbr.bus as bus
- import azlmbr.entity as entity
- import azlmbr.legacy.general as general
- import azlmbr.math as math
- from EditorPythonTestTools.editor_python_test_tools.editor_entity_utils import EditorEntity
- from EditorPythonTestTools.editor_python_test_tools.wait_utils import PrefabWaiter
- import Prefab.tests.PrefabTestUtils as prefab_test_utils
- ENTITY_POS = math.Vector3(0.0, 0.0, 0.0)
- NUM_NESTED_ENTITY_LEVELS = 10
- NESTED_ENTITY_PREFIX = "TestEntity_"
- def validate_nested_entity_deletion(num_expected_deleted_entities, first_deleted_entity_suffix,
- last_deleted_entity_suffix):
- for i in range(first_deleted_entity_suffix, last_deleted_entity_suffix):
- search_filter = entity.SearchFilter()
- search_filter.names = [f"{NESTED_ENTITY_PREFIX}{i}"]
- nested_entities = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
- assert len(nested_entities) == 0, f"Unexpectedly found {NESTED_ENTITY_PREFIX}{i} when it should be deleted"
- prefab_test_utils.validate_linear_nested_entities(nested_entities_root,
- NUM_NESTED_ENTITY_LEVELS - num_expected_deleted_entities,
- ENTITY_POS)
- prefab_test_utils.open_base_tests_level()
- # Creates new nested entities at the root level
- # Asserts if creation didn't succeed
- nested_entities_root = prefab_test_utils.create_linear_nested_entities(NESTED_ENTITY_PREFIX,
- NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
- prefab_test_utils.validate_linear_nested_entities(nested_entities_root, NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
- # Find an entity in the hierarchy, delete it, and validate Undo/Redo functionality
- search_filter = entity.SearchFilter()
- search_filter.names = [f"{NESTED_ENTITY_PREFIX}5"]
- entity_to_delete = EditorEntity(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)[0])
- entity_to_delete.delete()
- # TestEntity_5 -> TestEntity_9 should all be removed at this point
- validate_nested_entity_deletion(5, 5, 9)
- # Undo, and validate the nested entity hierarchy is restored
- general.undo()
- PrefabWaiter.wait_for_propagation()
- prefab_test_utils.validate_linear_nested_entities(nested_entities_root, NUM_NESTED_ENTITY_LEVELS, ENTITY_POS)
- # Redo, and validate that the appropriate nested entities are once again deleted
- general.redo()
- PrefabWaiter.wait_for_propagation()
- validate_nested_entity_deletion(5, 5, 9)
- if __name__ == "__main__":
- from editor_python_test_tools.utils import Report
- Report.start_test(DeleteEntity_UnderNestedEntityHierarchy)
|