You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EntityCommands_test_case.py

149 lines
5.4 KiB
Python

"""
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
"""
# Tests the Python API for Entity CRUD while the Editor is running
import azlmbr.bus as bus
import azlmbr.editor as editor
from azlmbr.entity import EntityId
createdEntityIds = []
def onEditorEntityCreated(parameters):
global createdEntityIds
entityId = parameters[0]
createdEntityIds.append(entityId)
def onEditorEntityDeleted(parameters):
global createdEntityIds
deletedEntityId = parameters[0]
for entityId in createdEntityIds:
if (entityId.invoke("Equal", deletedEntityId)):
createdEntityIds.remove(entityId)
break
# Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample')
# Listen for notifications when entities are created/deleted
handler = bus.NotificationHandler('EditorEntityContextNotificationBus')
handler.connect()
handler.add_callback('OnEditorEntityCreated', onEditorEntityCreated)
handler.add_callback('OnEditorEntityDeleted', onEditorEntityDeleted)
# Create a new Entity at the root level
rootEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())
if (rootEntityId):
print("New entity with no parent created")
if (rootEntityId.invoke("Equal", createdEntityIds[0])):
print("New root entity matches entity received from notification")
# Create a new Entity parented to the first Entity we created
firstChildEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', rootEntityId)
if (firstChildEntityId):
print("New entity with valid parent created")
if (firstChildEntityId.invoke("Equal", createdEntityIds[1])):
print("First child entity matches entity received from notification")
# Create another Entity parented to the first Entity we created
secondChildEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', rootEntityId)
if (secondChildEntityId):
print("Another new entity with valid parent created")
if (secondChildEntityId.invoke("Equal", createdEntityIds[2])):
print("Second child entity matches entity received from notification")
# Create two more entities and then delete them using the API that takes a list instead of a single entity
thirdChildEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', secondChildEntityId)
fourthChildEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', secondChildEntityId)
editor.ToolsApplicationRequestBus(bus.Broadcast, 'DeleteEntities', [thirdChildEntityId, fourthChildEntityId])
# Delete the second child Entity we created
editor.ToolsApplicationRequestBus(bus.Broadcast, 'DeleteEntityById', secondChildEntityId)
# Delete the root Entity we created and all its children (so this should also delete the firstChildEntityId)
editor.ToolsApplicationRequestBus(bus.Broadcast, 'DeleteEntityAndAllDescendants', rootEntityId)
# There should be no more entities left that we created
if (len(createdEntityIds) == 0):
print("Deleted all entities we created")
# Stop listening for entity creation/deletion notifications
handler.disconnect()
# Create new Entity
entityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())
# Get current name
oldName = editor.EditorEntityInfoRequestBus(bus.Event, 'GetName', entityId);
# Set a new name
editor.EditorEntityAPIBus(bus.Event, 'SetName', entityId, "TestName")
# Get new name
newName = editor.EditorEntityInfoRequestBus(bus.Event, 'GetName', entityId);
if not(oldName == newName):
print("GetName and SetName work")
# Create new Entity
parentId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())
# Create new Entity with parentId as parent
childId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', parentId)
getId = editor.EditorEntityInfoRequestBus(bus.Event, 'GetParent', childId);
if(getId.Equal(parentId)):
print("GetParent works")
# Find the entity in the scene
import azlmbr.bus as bus
import azlmbr.entity
searchFilter = azlmbr.entity.SearchFilter()
searchFilter.names = ['TestName']
# Search by name
searchEntityIdList = azlmbr.entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter)
for entityId in searchEntityIdList:
entityName = editor.EditorEntityInfoRequestBus(bus.Event, 'GetName', entityId)
if(entityName == 'TestName'):
print("TestName entity found")
# Search by name path (DAG)
editor.EditorEntityAPIBus(bus.Event, 'SetName', parentId, "TestParent")
editor.EditorEntityAPIBus(bus.Event, 'SetName', childId, "TestChild")
searchFilter = azlmbr.entity.SearchFilter()
searchFilter.names = ['TestParent|TestChild']
searchEntityIdList = azlmbr.entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter)
for entityId in searchEntityIdList:
entityName = editor.EditorEntityInfoRequestBus(bus.Event, 'GetName', entityId)
if(entityName == 'TestChild'):
print("TestChild entity found")
# Search using wildcard
searchFilter = azlmbr.entity.SearchFilter()
searchFilter.names = ['Test*']
searchEntityIdList = azlmbr.entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter)
if(len(searchEntityIdList) == 3):
print("Test* 3 entities found")
# Close Editor
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'ExitNoPrompt')