diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py
deleted file mode 100644
index 81075657f4..0000000000
--- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py
+++ /dev/null
@@ -1,103 +0,0 @@
-"""
-All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-its licensors.
-
-For complete copyright and license terms please see the LICENSE at the root of this
-distribution (the "License"). All use of this software is governed by the License,
-or, if provided, by the license below or the license accompanying this file. Do not
-remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
-This hydra/EPB script opens and closes every possible Atom level.
-"""
-import os
-import sys
-
-import azlmbr.legacy.general as general
-import azlmbr.paths
-
-sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests'))
-
-from automatedtesting_shared.editor_test_helper import EditorTestHelper
-
-levels = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels"))
-helper = EditorTestHelper(log_prefix="HydraAtomLevels")
-
-
-def run():
- """
- 1. Open & close all valid test levels in the Editor.
- 2. Every time a level is opened, verify it loads correctly and the Editor remains stable.
- """
-
- # Create a new level.
- level_name = "tmp_level" # Defined in test_Atom_MainSuite.py
- heightmap_resolution = 512
- heightmap_meters_per_pixel = 1
- terrain_texture_resolution = 412
- use_terrain = False
-
- # Return codes are ECreateLevelResult defined in CryEdit.h
- return_code = general.create_level_no_prompt(
- f"AtomLevels/{level_name}",
- heightmap_resolution,
- heightmap_meters_per_pixel,
- terrain_texture_resolution,
- use_terrain
- )
- if return_code == 1:
- general.log(f"AtomLevels/{level_name} level already exists")
- elif return_code == 2:
- general.log("Failed to create directory")
- elif return_code == 3:
- general.log("Directory length is too long")
- elif return_code != 0:
- general.log("Unknown error, failed to create level")
- else:
- general.log(f"AtomLevels/{level_name} level created successfully")
- after_level_load()
-
- # Open all valid AtomLevels.
- failed_to_open = []
- levels.append(level_name)
- for level in levels:
- if general.is_idle_enabled() and (general.get_current_level_name() == level):
- general.log(f"Level {level} already open.")
- else:
- general.log(f"Opening level {level}")
- general.open_level_no_prompt(f"AtomLevels/{level}")
- helper.wait_for_condition(function=lambda: general.get_current_level_name() == level,
- timeout_in_seconds=4.0)
- result = (general.get_current_level_name() == level) and after_level_load()
- if result:
- general.log(f"Successfully opened {level}")
- else:
- general.log(f"{level} failed to open")
- failed_to_open.append(level)
-
- if failed_to_open:
- general.log(f"The following levels failed to open: {failed_to_open}")
-
-
-def after_level_load():
- """Function to call after creating/opening a level to ensure it loads."""
- # Give everything a second to initialize.
- general.idle_enable(True)
- general.update_viewport()
- general.idle_wait(0.5) # half a second is more than enough for updating the viewport.
-
- # Close out problematic windows, FPS meters, and anti-aliasing.
- if general.is_helpers_shown(): # Turn off the helper gizmos if visible
- general.toggle_helpers()
- if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus.
- general.close_pane("Error Report")
- if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus.
- general.close_pane("Error Log")
- general.run_console("r_displayInfo=0")
- general.run_console("r_antialiasingmode=0")
-
- return True
-
-
-if __name__ == "__main__":
- run()
diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py
new file mode 100644
index 0000000000..848deeb522
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py
@@ -0,0 +1,297 @@
+"""
+All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
+its licensors.
+
+For complete copyright and license terms please see the LICENSE at the root of this
+distribution (the "License"). All use of this software is governed by the License,
+or, if provided, by the license below or the license accompanying this file. Do not
+remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+"""
+
+# This module does a bulk test and update of many components at once.
+# Each test case is listed below in the format:
+# "Test Case ID: Test Case Title (URL)"
+
+# C32078130: Tone Mapper (https://testrail.agscollab.com/index.php?/cases/view/32078130)
+# C32078129: Light (https://testrail.agscollab.com/index.php?/cases/view/32078129)
+# C32078131: Radius Weight Modifier (https://testrail.agscollab.com/index.php?/cases/view/32078131)
+# C32078127: PostFX Layer (https://testrail.agscollab.com/index.php?/cases/view/32078127)
+# C32078126: Point Light (https://testrail.agscollab.com/index.php?/cases/view/32078126)
+# C32078125: Physical Sky (https://testrail.agscollab.com/index.php?/cases/view/32078125)
+# C32078115: Global Skylight (IBL) (https://testrail.agscollab.com/index.php?/cases/view/32078115)
+# C32078121: Exposure Control (https://testrail.agscollab.com/index.php?/cases/view/32078121)
+# C32078120: Directional Light (https://testrail.agscollab.com/index.php?/cases/view/32078120)
+# C32078119: DepthOfField (https://testrail.agscollab.com/index.php?/cases/view/32078119)
+# C32078118: Decal (https://testrail.agscollab.com/index.php?/cases/view/32078118)
+# C32078117: Area Light (https://testrail.agscollab.com/index.php?/cases/view/32078117)
+
+import os
+import sys
+
+import azlmbr.math as math
+import azlmbr.bus as bus
+import azlmbr.paths
+import azlmbr.asset as asset
+import azlmbr.entity as entity
+import azlmbr.legacy.general as general
+import azlmbr.editor as editor
+import azlmbr.render as render
+
+sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
+
+import automatedtesting_shared.hydra_editor_utils as hydra
+from automatedtesting_shared.utils import TestHelper as helper
+
+
+class TestAllComponentsBasicTests(object):
+ """
+ Holds shared hydra test functions for this set of tests.
+ """
+
+
+def run():
+ """
+ Summary:
+ The below common tests are done for each of the components.
+ 1) Addition of component to the entity
+ 2) UNDO/REDO of addition of component
+ 3) Enter/Exit game mode
+ 4) Hide/Show entity containing component
+ 5) Deletion of component
+ 6) UNDO/REDO of deletion of component
+ Some additional tests for specific components include
+ 1) Assigning value to some properties of each component
+ 2) Verifying if the component is activated only when the required components are added
+
+ Expected Result:
+ 1) Component can be added to an entity.
+ 2) The addition of component can be undone and redone.
+ 3) Game mode can be entered/exited without issue.
+ 4) Entity with component can be hidden/shown.
+ 5) Component can be deleted.
+ 6) The deletion of component can be undone and redone.
+ 7) Component is activated only when the required components are added
+ 8) Values can be assigned to the properties of the component
+
+ :return: None
+ """
+
+ def after_level_load():
+ """Function to call after creating/opening a level to ensure it loads."""
+ # Give everything a second to initialize.
+ general.idle_enable(True)
+ general.idle_wait(1.0)
+ general.update_viewport()
+ general.idle_wait(0.5) # half a second is more than enough for updating the viewport.
+
+ # Close out problematic windows, FPS meters, and anti-aliasing.
+ if general.is_helpers_shown(): # Turn off the helper gizmos if visible
+ general.toggle_helpers()
+ general.idle_wait(1.0)
+ if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus.
+ general.close_pane("Error Report")
+ if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus.
+ general.close_pane("Error Log")
+ general.idle_wait(1.0)
+ general.run_console("r_displayInfo=0")
+ general.run_console("r_antialiasingmode=0")
+ general.idle_wait(1.0)
+
+ return True
+
+ def create_entity_undo_redo_component_addition(component_name):
+ new_entity = hydra.Entity(f"{component_name}")
+ new_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), [component_name])
+ general.log(f"{component_name}_test: Component added to the entity: "
+ f"{hydra.has_components(new_entity.id, [component_name])}")
+
+ # undo component addition
+ general.undo()
+ helper.wait_for_condition(lambda: not hydra.has_components(new_entity.id, [component_name]), 2.0)
+ general.log(f"{component_name}_test: Component removed after UNDO: "
+ f"{not hydra.has_components(new_entity.id, [component_name])}")
+
+ # redo component addition
+ general.redo()
+ helper.wait_for_condition(lambda: hydra.has_components(new_entity.id, [component_name]), 2.0)
+ general.log(f"{component_name}_test: Component added after REDO: "
+ f"{hydra.has_components(new_entity.id, [component_name])}")
+
+ return new_entity
+
+ def verify_enter_exit_game_mode(component_name):
+ general.enter_game_mode()
+ helper.wait_for_condition(lambda: general.is_in_game_mode(), 1.0)
+ general.log(f"{component_name}_test: Entered game mode: {general.is_in_game_mode()}")
+ general.exit_game_mode()
+ helper.wait_for_condition(lambda: not general.is_in_game_mode(), 1.0)
+ general.log(f"{component_name}_test: Exit game mode: {not general.is_in_game_mode()}")
+
+ def verify_hide_unhide_entity(component_name, entity_obj):
+
+ def is_entity_hidden(entity_id):
+ return editor.EditorEntityInfoRequestBus(bus.Event, "IsHidden", entity_id)
+
+ editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", entity_obj.id, False)
+ general.idle_wait_frames(1)
+ general.log(f"{component_name}_test: Entity is hidden: {is_entity_hidden(entity_obj.id)}")
+ editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", entity_obj.id, True)
+ general.idle_wait_frames(1)
+ general.log(f"{component_name}_test: Entity is shown: {not is_entity_hidden(entity_obj.id)}")
+
+ def verify_deletion_undo_redo(component_name, entity_obj):
+ editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntityById", entity_obj.id)
+ helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0)
+ general.log(f"{component_name}_test: Entity deleted: {not hydra.find_entity_by_name(entity_obj.name)}")
+
+ general.undo()
+ helper.wait_for_condition(lambda: hydra.find_entity_by_name(entity_obj.name) is not None, 1.0)
+ general.log(f"{component_name}_test: UNDO entity deletion works: "
+ f"{hydra.find_entity_by_name(entity_obj.name) is not None}")
+
+ general.redo()
+ helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0)
+ general.log(f"{component_name}_test: REDO entity deletion works: "
+ f"{not hydra.find_entity_by_name(entity_obj.name)}")
+
+ def verify_required_component_addition(entity_obj, components_to_add, component_name):
+
+ def is_component_enabled(entity_componentid_pair):
+ return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", entity_componentid_pair)
+
+ general.log(
+ f"{component_name}_test: Entity disabled initially: "
+ f"{not is_component_enabled(entity_obj.components[0])}")
+ for component in components_to_add:
+ entity_obj.add_component(component)
+ helper.wait_for_condition(lambda: is_component_enabled(entity_obj.components[0]), 1.0)
+ general.log(
+ f"{component_name}_test: Entity enabled after adding "
+ f"required components: {is_component_enabled(entity_obj.components[0])}"
+ )
+
+ def verify_set_property(entity_obj, path, value):
+ entity_obj.get_set_test(0, path, value)
+
+ # Wait for Editor idle loop before executing Python hydra scripts.
+ helper.init_idle()
+
+ # Create a new level.
+ new_level_name = "tmp_level" # Specified in TestAllComponentsBasicTests.py
+ heightmap_resolution = 512
+ heightmap_meters_per_pixel = 1
+ terrain_texture_resolution = 412
+ use_terrain = False
+
+ # Return codes are ECreateLevelResult defined in CryEdit.h
+ return_code = general.create_level_no_prompt(
+ new_level_name, heightmap_resolution, heightmap_meters_per_pixel, terrain_texture_resolution, use_terrain)
+ if return_code == 1:
+ general.log(f"{new_level_name} level already exists")
+ elif return_code == 2:
+ general.log("Failed to create directory")
+ elif return_code == 3:
+ general.log("Directory length is too long")
+ elif return_code != 0:
+ general.log("Unknown error, failed to create level")
+ else:
+ general.log(f"{new_level_name} level created successfully")
+ after_level_load()
+
+ # Delete all existing entities initially
+ search_filter = azlmbr.entity.SearchFilter()
+ all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter)
+ editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities)
+
+ class ComponentTests:
+ """Test launcher for each component."""
+ def __init__(self, component_name, *additional_tests):
+ self.component_name = component_name
+ self.additional_tests = additional_tests
+ self.run_component_tests()
+
+ def run_component_tests(self):
+ # Run common and additional tests
+ entity_obj = create_entity_undo_redo_component_addition(self.component_name)
+
+ # Enter/Exit game mode test
+ verify_enter_exit_game_mode(self.component_name)
+
+ # Any additional tests are executed here
+ for test in self.additional_tests:
+ test(entity_obj)
+
+ # Hide/Unhide entity test
+ verify_hide_unhide_entity(self.component_name, entity_obj)
+
+ # Deletion/Undo/Redo test
+ verify_deletion_undo_redo(self.component_name, entity_obj)
+
+ # Area Light Component
+ area_light = "Area Light"
+ ComponentTests(
+ area_light, lambda entity_obj: verify_required_component_addition(
+ entity_obj, ["Capsule Shape"], area_light))
+
+ # Decal Component
+ material_asset_path = os.path.join("Materials", "decal", "aiirship_nose_number_decal.material")
+ material_asset = asset.AssetCatalogRequestBus(
+ bus.Broadcast, "GetAssetIdByPath", material_asset_path, math.Uuid(), False)
+ ComponentTests(
+ "Decal", lambda entity_obj: verify_set_property(
+ entity_obj, "Settings|Decal Settings|Material", material_asset))
+
+ # DepthOfField Component
+ camera_entity = hydra.Entity("camera_entity")
+ camera_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), ["Camera"])
+ depth_of_field = "DepthOfField"
+ ComponentTests(
+ depth_of_field,
+ lambda entity_obj: verify_required_component_addition(entity_obj, ["PostFX Layer"], depth_of_field),
+ lambda entity_obj: verify_set_property(
+ entity_obj, "Controller|Configuration|Camera Entity", camera_entity.id))
+
+ # Directional Light Component
+ ComponentTests(
+ "Directional Light",
+ lambda entity_obj: verify_set_property(
+ entity_obj, "Controller|Configuration|Shadow|Camera", camera_entity.id))
+
+ # Exposure Control Component
+ ComponentTests(
+ "Exposure Control", lambda entity_obj: verify_required_component_addition(
+ entity_obj, ["PostFX Layer"], "Exposure Control"))
+
+ # Global Skylight (IBL) Component
+ diffuse_image_path = os.path.join("LightingPresets", "greenwich_park_02_4k_iblskyboxcm.exr.streamingimage")
+ diffuse_image_asset = asset.AssetCatalogRequestBus(
+ bus.Broadcast, "GetAssetIdByPath", diffuse_image_path, math.Uuid(), False)
+ specular_image_path = os.path.join("LightingPresets", "greenwich_park_02_4k_iblskyboxcm.exr.streamingimage")
+ specular_image_asset = asset.AssetCatalogRequestBus(
+ bus.Broadcast, "GetAssetIdByPath", specular_image_path, math.Uuid(), False)
+ ComponentTests(
+ "Global Skylight (IBL)",
+ lambda entity_obj: verify_set_property(
+ entity_obj, "Controller|Configuration|Diffuse Image", diffuse_image_asset),
+ lambda entity_obj: verify_set_property(
+ entity_obj, "Controller|Configuration|Specular Image", specular_image_asset))
+
+ # Physical Sky Component
+ ComponentTests("Physical Sky")
+
+ # Point Light Component
+ ComponentTests("Point Light")
+
+ # PostFX Layer Component
+ ComponentTests("PostFX Layer")
+
+ # Radius Weight Modifier Component
+ ComponentTests("Radius Weight Modifier")
+
+ # Spot Light Component
+ ComponentTests("Light")
+
+
+if __name__ == "__main__":
+ run()
diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
index fe23f108bd..eb207c2f90 100644
--- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
+++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
@@ -11,11 +11,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
import logging
import os
-from pathlib import PurePath
import pytest
-# Bail on the test if ly_test_tools doesn't exist.
-pytest.importorskip("ly_test_tools")
import ly_test_tools.environment.file_system as file_system
import automatedtesting_shared.hydra_test_utils as hydra
@@ -24,17 +21,11 @@ logger = logging.getLogger(__name__)
EDITOR_TIMEOUT = 60
TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "atom_hydra_scripts")
-# Go to the project root directory
-PROJECT_DIRECTORY = PurePath(TEST_DIRECTORY)
-if len(PROJECT_DIRECTORY.parents) > 5:
- for _ in range(5):
- PROJECT_DIRECTORY = PROJECT_DIRECTORY.parent
-
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("level", ["tmp_level"])
-class TestAtomLevels(object):
+class TestAtomEditorComponents(object):
@pytest.fixture(autouse=True)
def setup_teardown(self, request, workspace, project, level):
# Cleanup our temp level
@@ -48,16 +39,167 @@ class TestAtomLevels(object):
request.addfinalizer(teardown)
- @pytest.mark.test_case_id("C34428174") # Level: ShadowTest
- def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform):
-
+ @pytest.mark.test_case_id("C32078130") # Tone Mapper
+ @pytest.mark.test_case_id("C32078129") # Light
+ @pytest.mark.test_case_id("C32078131") # Radius Weight Modifier
+ @pytest.mark.test_case_id("C32078127") # PostFX Layer
+ @pytest.mark.test_case_id("C32078126") # Point Light
+ @pytest.mark.test_case_id("C32078125") # Physical Sky
+ @pytest.mark.test_case_id("C32078115") # Global Skylight (IBL)
+ @pytest.mark.test_case_id("C32078121") # Exposure Control
+ @pytest.mark.test_case_id("C32078120") # Directional Light
+ @pytest.mark.test_case_id("C32078119") # DepthOfField
+ @pytest.mark.test_case_id("C32078118") # Decal
+ def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform):
cfg_args = [level]
- test_levels = os.listdir(os.path.join(str(PROJECT_DIRECTORY), project, "Levels", "AtomLevels"))
- test_levels.append(level)
- expected_lines = []
- for level in test_levels:
- expected_lines.append(f"Successfully opened {level}")
+ expected_lines = [
+ # Area Light Component
+ "Area Light Entity successfully created",
+ "Area Light_test: Component added to the entity: True",
+ "Area Light_test: Component removed after UNDO: True",
+ "Area Light_test: Component added after REDO: True",
+ "Area Light_test: Entered game mode: True",
+ # Disabled, see ATOM-: "Area Light_test: Exit game mode: True",
+ "Area Light_test: Entity disabled initially: True",
+ "Area Light_test: Entity enabled after adding required components: True",
+ "Area Light_test: Entity is hidden: True",
+ "Area Light_test: Entity is shown: True",
+ "Area Light_test: Entity deleted: True",
+ "Area Light_test: UNDO entity deletion works: True",
+ "Area Light_test: REDO entity deletion works: True",
+ # Decal Component
+ "Decal Entity successfully created",
+ "Decal_test: Component added to the entity: True",
+ "Decal_test: Component removed after UNDO: True",
+ "Decal_test: Component added after REDO: True",
+ "Decal_test: Entered game mode: True",
+ "Decal_test: Exit game mode: True",
+ "Decal Settings|Decal Settings|Material: SUCCESS",
+ "Decal_test: Entity is hidden: True",
+ "Decal_test: Entity is shown: True",
+ "Decal_test: Entity deleted: True",
+ "Decal_test: UNDO entity deletion works: True",
+ "Decal_test: REDO entity deletion works: True",
+ # DepthOfField Component
+ "DepthOfField Entity successfully created",
+ "DepthOfField_test: Component added to the entity: True",
+ "DepthOfField_test: Component removed after UNDO: True",
+ "DepthOfField_test: Component added after REDO: True",
+ "DepthOfField_test: Entered game mode: True",
+ "DepthOfField_test: Exit game mode: True",
+ "DepthOfField_test: Entity disabled initially: True",
+ "DepthOfField_test: Entity enabled after adding required components: True",
+ "DepthOfField Controller|Configuration|Camera Entity: SUCCESS",
+ "DepthOfField_test: Entity is hidden: True",
+ "DepthOfField_test: Entity is shown: True",
+ "DepthOfField_test: Entity deleted: True",
+ "DepthOfField_test: UNDO entity deletion works: True",
+ "DepthOfField_test: REDO entity deletion works: True",
+ # Directional Light Component
+ "Directional Light Entity successfully created",
+ "Directional Light_test: Component added to the entity: True",
+ "Directional Light_test: Component removed after UNDO: True",
+ "Directional Light_test: Component added after REDO: True",
+ "Directional Light_test: Entered game mode: True",
+ "Directional Light_test: Exit game mode: True",
+ "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS",
+ "Directional Light_test: Entity is hidden: True",
+ "Directional Light_test: Entity is shown: True",
+ "Directional Light_test: Entity deleted: True",
+ "Directional Light_test: UNDO entity deletion works: True",
+ "Directional Light_test: REDO entity deletion works: True",
+ # Exposure Control Component
+ "Exposure Control Entity successfully created",
+ "Exposure Control_test: Component added to the entity: True",
+ "Exposure Control_test: Component removed after UNDO: True",
+ "Exposure Control_test: Component added after REDO: True",
+ "Exposure Control_test: Entered game mode: True",
+ "Exposure Control_test: Exit game mode: True",
+ "Exposure Control_test: Entity disabled initially: True",
+ "Exposure Control_test: Entity enabled after adding required components: True",
+ "Exposure Control_test: Entity is hidden: True",
+ "Exposure Control_test: Entity is shown: True",
+ "Exposure Control_test: Entity deleted: True",
+ "Exposure Control_test: UNDO entity deletion works: True",
+ "Exposure Control_test: REDO entity deletion works: True",
+ # Global Skylight (IBL) Component
+ "Global Skylight (IBL) Entity successfully created",
+ "Global Skylight (IBL)_test: Component added to the entity: True",
+ "Global Skylight (IBL)_test: Component removed after UNDO: True",
+ "Global Skylight (IBL)_test: Component added after REDO: True",
+ "Global Skylight (IBL)_test: Entered game mode: True",
+ "Global Skylight (IBL)_test: Exit game mode: True",
+ "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS",
+ "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS",
+ "Global Skylight (IBL)_test: Entity is hidden: True",
+ "Global Skylight (IBL)_test: Entity is shown: True",
+ "Global Skylight (IBL)_test: Entity deleted: True",
+ "Global Skylight (IBL)_test: UNDO entity deletion works: True",
+ "Global Skylight (IBL)_test: REDO entity deletion works: True",
+ # Physical Sky Component
+ "Physical Sky Entity successfully created",
+ "Physical Sky component was added to entity",
+ "Entity has a Physical Sky component",
+ "Physical Sky_test: Component added to the entity: True",
+ "Physical Sky_test: Component removed after UNDO: True",
+ "Physical Sky_test: Component added after REDO: True",
+ "Physical Sky_test: Entered game mode: True",
+ "Physical Sky_test: Exit game mode: True",
+ "Physical Sky_test: Entity is hidden: True",
+ "Physical Sky_test: Entity is shown: True",
+ "Physical Sky_test: Entity deleted: True",
+ "Physical Sky_test: UNDO entity deletion works: True",
+ "Physical Sky_test: REDO entity deletion works: True",
+ # Point Light Component
+ "Point Light Entity successfully created",
+ "Point Light_test: Component added to the entity: True",
+ "Point Light_test: Component removed after UNDO: True",
+ "Point Light_test: Component added after REDO: True",
+ "Point Light_test: Entered game mode: True",
+ "Point Light_test: Exit game mode: True",
+ "Point Light_test: Entity is hidden: True",
+ "Point Light_test: Entity is shown: True",
+ "Point Light_test: Entity deleted: True",
+ "Point Light_test: UNDO entity deletion works: True",
+ "Point Light_test: REDO entity deletion works: True",
+ # PostFX Layer Component
+ "PostFX Layer Entity successfully created",
+ "PostFX Layer_test: Component added to the entity: True",
+ "PostFX Layer_test: Component removed after UNDO: True",
+ "PostFX Layer_test: Component added after REDO: True",
+ "PostFX Layer_test: Entered game mode: True",
+ "PostFX Layer_test: Exit game mode: True",
+ "PostFX Layer_test: Entity is hidden: True",
+ "PostFX Layer_test: Entity is shown: True",
+ "PostFX Layer_test: Entity deleted: True",
+ "PostFX Layer_test: UNDO entity deletion works: True",
+ "PostFX Layer_test: REDO entity deletion works: True",
+ # Radius Weight Modifier Component
+ "Radius Weight Modifier Entity successfully created",
+ "Radius Weight Modifier_test: Component added to the entity: True",
+ "Radius Weight Modifier_test: Component removed after UNDO: True",
+ "Radius Weight Modifier_test: Component added after REDO: True",
+ "Radius Weight Modifier_test: Entered game mode: True",
+ "Radius Weight Modifier_test: Exit game mode: True",
+ "Radius Weight Modifier_test: Entity is hidden: True",
+ "Radius Weight Modifier_test: Entity is shown: True",
+ "Radius Weight Modifier_test: Entity deleted: True",
+ "Radius Weight Modifier_test: UNDO entity deletion works: True",
+ "Radius Weight Modifier_test: REDO entity deletion works: True",
+ # Light Component
+ "Light Entity successfully created",
+ "Light_test: Component added to the entity: True",
+ "Light_test: Component removed after UNDO: True",
+ "Light_test: Component added after REDO: True",
+ "Light_test: Entered game mode: True",
+ "Light_test: Exit game mode: True",
+ "Light_test: Entity is hidden: True",
+ "Light_test: Entity is shown: True",
+ "Light_test: Entity deleted: True",
+ "Light_test: UNDO entity deletion works: True",
+ "Light_test: REDO entity deletion works: True",
+ ]
unexpected_lines = [
"failed to open",
@@ -68,10 +210,11 @@ class TestAtomLevels(object):
request,
TEST_DIRECTORY,
editor,
- "hydra_AllLevels_OpenClose.py",
+ "hydra_AtomEditorComponentsTest_AddedToEntity.py",
timeout=EDITOR_TIMEOUT,
expected_lines=expected_lines,
unexpected_lines=unexpected_lines,
halt_on_unexpected=True,
+ null_renderer=True,
cfg_args=cfg_args,
)
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml
deleted file mode 100644
index c8398b6257..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat
deleted file mode 100644
index 2bb3c003f3..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a8859eeafde418ffe71a29da14f5419439f9cdd598517b0de51bf1049770de44
-size 8389396
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml
deleted file mode 100644
index e4106ce437..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly
deleted file mode 100644
index 34d7254d5e..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c19dc62e3349a435a6760fd532b28c9a86c626e800687bb585038adf48a16397
-size 9146
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak
deleted file mode 100644
index fe3604a050..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
-size 22
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml
deleted file mode 100644
index 502f2b5af5..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak
deleted file mode 100644
index 34ec3a3cb3..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3fc101d03df12328e2a1ddf817628963c60d3999dfd08aceb843c5e2bd0c16f7
-size 41574
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt
deleted file mode 100644
index 0d6c1880e7..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
-0,0,0,0,0,0
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc
deleted file mode 100644
index 5c869c6533..0000000000
--- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c
-size 1310792