| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """
- 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 DetachPrefab_WithSingleEntity():
- from pathlib import Path
- import pyside_utils
- @pyside_utils.wrap_async
- async def run_test():
- import azlmbr.bus as bus
- import azlmbr.editor as editor
- import azlmbr.legacy.general as general
- from editor_python_test_tools.editor_entity_utils import EditorEntity
- from editor_python_test_tools.prefab_utils import Prefab
- from editor_python_test_tools.wait_utils import PrefabWaiter
- import Prefab.tests.PrefabTestUtils as prefab_test_utils
- TEST_PREFAB_FILE_NAME = Path(__file__).stem + '_prefab'
- prefab_test_utils.open_base_tests_level()
- # Creates an entity at the root level
- test_entity = EditorEntity.create_editor_entity("Test")
- test_prefab_entities = [test_entity]
- # Creates a prefab from the test entity
- _, test_instance = Prefab.create_prefab(test_prefab_entities, TEST_PREFAB_FILE_NAME)
- # Get parent info for the test prefab to validate hierarchy remains unchanged after Undo/Redo
- test_instance_parent = test_instance.container_entity.get_parent_id()
- # Detaches the test prefab instance
- Prefab.detach_prefab(test_instance)
- # Test undo/redo on prefab detach
- general.undo()
- PrefabWaiter.wait_for_propagation()
- is_prefab = editor.EditorComponentAPIBus(bus.Broadcast, "HasComponentOfType", test_instance.container_entity.id,
- azlmbr.globals.property.EditorPrefabComponentTypeId)
- test_instance_parent_undo = test_instance.container_entity.get_parent_id()
- assert test_instance_parent == test_instance_parent_undo, "Undo operation unexpectedly changed entity hierarchy"
- assert is_prefab, "Undo operation failed. Entity is not recognized as a prefab."
- general.redo()
- PrefabWaiter.wait_for_propagation()
- former_container_entity = EditorEntity.find_editor_entity(TEST_PREFAB_FILE_NAME)
- test_entity = EditorEntity.find_editor_entity("Test")
- is_prefab = editor.EditorComponentAPIBus(bus.Broadcast, "HasComponentOfType", former_container_entity.id,
- azlmbr.globals.property.EditorPrefabComponentTypeId)
- assert test_entity.get_parent_id() == former_container_entity.id, \
- "Redo operation unexpectedly changed entity hierarchy"
- assert not is_prefab, "Redo operation failed. Entity is still recognized as a prefab."
- run_test()
- if __name__ == "__main__":
- from editor_python_test_tools.utils import Report
- Report.start_test(DetachPrefab_WithSingleEntity)
|