DuplicatePrefab_ContainingASingleEntity.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 DuplicatePrefab_ContainingASingleEntity():
  7. from pathlib import Path
  8. import azlmbr.entity as entity
  9. import azlmbr.bus as bus
  10. import azlmbr.legacy.general as general
  11. from editor_python_test_tools.editor_entity_utils import EditorEntity
  12. from editor_python_test_tools.prefab_utils import Prefab
  13. from editor_python_test_tools.wait_utils import PrefabWaiter
  14. import Prefab.tests.PrefabTestUtils as prefab_test_utils
  15. CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
  16. prefab_test_utils.open_base_tests_level()
  17. # Creates a new entity at the root level
  18. car_entity = EditorEntity.create_editor_entity("Car")
  19. car_prefab_entities = [car_entity]
  20. # Creates a prefab from the new entity
  21. _, car = Prefab.create_prefab(
  22. car_prefab_entities, CAR_PREFAB_FILE_NAME)
  23. # Duplicates the prefab instance
  24. Prefab.duplicate_prefabs([car])
  25. # Test undo/redo on prefab duplication
  26. general.undo()
  27. PrefabWaiter.wait_for_propagation()
  28. search_filter = entity.SearchFilter()
  29. search_filter.names = [CAR_PREFAB_FILE_NAME]
  30. prefab_entities_found = len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter))
  31. assert prefab_entities_found == 1, "Undo failed: Found duplicated prefab entities"
  32. search_filter.names = ["Car"]
  33. child_entities_found = len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter))
  34. assert child_entities_found == 1, "Undo failed: Found duplicated child entities"
  35. general.redo()
  36. PrefabWaiter.wait_for_propagation()
  37. search_filter.names = [CAR_PREFAB_FILE_NAME]
  38. prefab_entities_found = len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter))
  39. assert prefab_entities_found == 2, "Redo failed: Failed to find duplicated prefab entities"
  40. search_filter.names = ["Car"]
  41. child_entities_found = len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter))
  42. assert child_entities_found == 2, "Redo failed: Failed to find duplicated child entities"
  43. if __name__ == "__main__":
  44. from editor_python_test_tools.utils import Report
  45. Report.start_test(DuplicatePrefab_ContainingASingleEntity)