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
index 100fd2311b..81075657f4 100644
--- 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
@@ -20,86 +20,84 @@ sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'P
from automatedtesting_shared.editor_test_helper import EditorTestHelper
-LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels"))
+levels = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels"))
+helper = EditorTestHelper(log_prefix="HydraAtomLevels")
-class HydraAtomLevels(EditorTestHelper):
- """Tests that all expected Atom levels can be opened and load successfully."""
- def __init__(self):
- EditorTestHelper.__init__(self, log_prefix="Atom_TestAllLevelsOpenClose", args=["level"])
+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.
+ """
- def run(self):
- """
- 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
- 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.
+ # 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()
- # 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
-
- # Create a new level.
- 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(
- self.args['level'],
- heightmap_resolution,
- heightmap_meters_per_pixel,
- terrain_texture_resolution,
- use_terrain
- )
- if return_code == 1:
- general.log(f"{self.args['level']} 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")
+ # 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"{self.args['level']} level created successfully")
- after_level_load()
+ 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)
- # Open all valid test levels.
- failed_to_open = []
- LEVELS.append(self.args['level']) # Update LEVELS constant for created level.
- 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(level)
- self.wait_for_condition(function=lambda: general.get_current_level_name() == level,
- timeout_in_seconds=2.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}")
+ if failed_to_open:
+ general.log(f"The following levels failed to open: {failed_to_open}")
-test = HydraAtomLevels()
-test.run()
+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/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
index 7f33d06623..fe23f108bd 100644
--- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
+++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py
@@ -48,11 +48,12 @@ class TestAtomLevels(object):
request.addfinalizer(teardown)
- @pytest.mark.test_case_id("C34428159") # Level: ActorTest_100Actors
+ @pytest.mark.test_case_id("C34428174") # Level: ShadowTest
def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform):
cfg_args = [level]
- test_levels = os.path.join(str(PROJECT_DIRECTORY), "Levels", "AtomLevels")
+ test_levels = os.listdir(os.path.join(str(PROJECT_DIRECTORY), project, "Levels", "AtomLevels"))
+ test_levels.append(level)
expected_lines = []
for level in test_levels:
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml
new file mode 100644
index 0000000000..c8398b6257
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat
new file mode 100644
index 0000000000..2bb3c003f3
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 0000000000..f43df05b22
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml
new file mode 100644
index 0000000000..e4106ce437
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat
new file mode 100644
index 0000000000..dce5631cd0
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 0000000000..34d7254d5e
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 0000000000..fe3604a050
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 0000000000..502f2b5af5
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak
new file mode 100644
index 0000000000..34ec3a3cb3
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 0000000000..0d6c1880e7
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt
@@ -0,0 +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
diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc
new file mode 100644
index 0000000000..5c869c6533
--- /dev/null
+++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c
+size 1310792
diff --git a/AutomatedTesting/Objects/bunny.fbx b/AutomatedTesting/Objects/bunny.fbx
new file mode 100644
index 0000000000..586062ebba
--- /dev/null
+++ b/AutomatedTesting/Objects/bunny.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee81db4d3aa5c76316cb51c700d6b35f500bc599d91b9f62d057df16ed9be929
+size 3266108
diff --git a/AutomatedTesting/Objects/cube.fbx b/AutomatedTesting/Objects/cube.fbx
new file mode 100644
index 0000000000..616c7b4ff3
--- /dev/null
+++ b/AutomatedTesting/Objects/cube.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e32877eab35459499c73ff093df898f93bf3e7379de25eef6875d693be9bec81
+size 18015
diff --git a/AutomatedTesting/Objects/plane.fbx b/AutomatedTesting/Objects/plane.fbx
new file mode 100644
index 0000000000..b274bfa282
--- /dev/null
+++ b/AutomatedTesting/Objects/plane.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a1f8d75dcd85e8b4aa57f6c0c81af0300ff96915ba3c2b591095c215d5e1d8c
+size 12072