diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
index d987833862..d421ba3cb7 100644
--- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
@@ -19,37 +19,50 @@ add_subdirectory(assetpipeline)
add_subdirectory(atom_renderer)
## Physics ##
-# DISABLED - see LYN-2536
-#if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
-# ly_add_pytest(
-# NAME AutomatedTesting::PhysicsTests
-# TEST_SUITE main
-# TEST_SERIAL
-# PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Active.py
-# TIMEOUT 3600
-# RUNTIME_DEPENDENCIES
-# Legacy::Editor
-# Legacy::CryRenderNULL
-# AZ::AssetProcessor
-# AutomatedTesting.Assets
-# COMPONENT
-# Physics
-# )
-# ly_add_pytest(
-# NAME AutomatedTesting::PhysicsTests_Sandbox
-# TEST_SUITE sandbox
-# TEST_SERIAL
-# PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Sandbox.py
-# TIMEOUT 3600
-# RUNTIME_DEPENDENCIES
-# Legacy::Editor
-# Legacy::CryRenderNULL
-# AZ::AssetProcessor
-# AutomatedTesting.Assets
-# COMPONENT
-# Physics
-# )
-#endif()
+if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
+ ly_add_pytest(
+ NAME AutomatedTesting::PhysicsTests_Main
+ TEST_SUITE main
+ TEST_SERIAL
+ PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Main.py
+ TIMEOUT 3600
+ RUNTIME_DEPENDENCIES
+ Legacy::Editor
+ Legacy::CryRenderNULL
+ AZ::AssetProcessor
+ AutomatedTesting.Assets
+ COMPONENT
+ Physics
+ )
+ ly_add_pytest(
+ NAME AutomatedTesting::PhysicsTests_Periodic
+ TEST_SUITE periodic
+ TEST_SERIAL
+ PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Periodic.py
+ TIMEOUT 3600
+ RUNTIME_DEPENDENCIES
+ Legacy::Editor
+ Legacy::CryRenderNULL
+ AZ::AssetProcessor
+ AutomatedTesting.Assets
+ COMPONENT
+ Physics
+ )
+ ly_add_pytest(
+ NAME AutomatedTesting::PhysicsTests_Sandbox
+ TEST_SUITE sandbox
+ TEST_SERIAL
+ PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Sandbox.py
+ TIMEOUT 3600
+ RUNTIME_DEPENDENCIES
+ Legacy::Editor
+ Legacy::CryRenderNULL
+ AZ::AssetProcessor
+ AutomatedTesting.Assets
+ COMPONENT
+ Physics
+ )
+endif()
## ScriptCanvas ##
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
@@ -178,7 +191,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
## DynVeg ##
ly_add_pytest(
- NAME DynamicVegetationTests_Main_GPU
+ NAME AutomatedTesting::DynamicVegetationTests_Main_GPU
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE main
@@ -195,7 +208,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
)
ly_add_pytest(
- NAME DynamicVegetationTests_Sandbox_GPU
+ NAME AutomatedTesting::DynamicVegetationTests_Sandbox_GPU
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE sandbox
@@ -212,7 +225,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
)
ly_add_pytest(
- NAME DynamicVegetationTests_Periodic_GPU
+ NAME AutomatedTesting::DynamicVegetationTests_Periodic_GPU
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE periodic
@@ -229,7 +242,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
## LandscapeCanvas ##
ly_add_pytest(
- NAME LandscapeCanvasTests_Main
+ NAME AutomatedTesting::LandscapeCanvasTests_Main
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE main
@@ -245,7 +258,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
)
ly_add_pytest(
- NAME LandscapeCanvasTests_Periodic
+ NAME AutomatedTesting::LandscapeCanvasTests_Periodic
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE periodic
@@ -262,7 +275,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
## GradientSignal ##
ly_add_pytest(
- NAME GradientSignalTests_Periodic
+ NAME AutomatedTesting::GradientSignalTests_Periodic
TEST_REQUIRES gpu
TEST_SERIAL
TEST_SUITE periodic
@@ -281,7 +294,7 @@ endif()
## Editor ##
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_FOUNDATION_TEST_SUPPORTED)
ly_add_pytest(
- NAME EditorTests_Periodic
+ NAME AutomatedTesting::EditorTests_Periodic
TEST_SUITE periodic
TEST_SERIAL
PATH ${CMAKE_CURRENT_LIST_DIR}/editor
@@ -299,7 +312,7 @@ endif()
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
# Unstable, SPEC-3838 will restore
#ly_add_pytest(
- # NAME asset_load_benchmark_test
+ # NAME AutomatedTesting::asset_load_benchmark_test
# TEST_SERIAL
# TEST_SUITE benchmark
# PATH ${CMAKE_CURRENT_LIST_DIR}/streaming/benchmark/asset_load_benchmark_test.py
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py
index 6ca0ec16a7..a9f6d0aa02 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py
@@ -278,6 +278,12 @@ class Tracer:
self.function = args[3]
self.message = args[4]
+ def __str__(self):
+ return f"Warning: [{self.filename}:{self.function}:{self.line}]: [{self.window}] {self.message}"
+
+ def __repr__(self):
+ return f"[Warning: {self.message}]"
+
class ErrorInfo:
def __init__(self, args):
self.window = args[0]
@@ -285,6 +291,12 @@ class Tracer:
self.line = args[2]
self.function = args[3]
self.message = args[4]
+
+ def __str__(self):
+ return f"Error: [{self.filename}:{self.function}:{self.line}]: [{self.window}] {self.message}"
+
+ def __repr__(self):
+ return f"[Error: {self.message}]"
class AssertInfo:
def __init__(self, args):
@@ -292,6 +304,12 @@ class Tracer:
self.line = args[1]
self.function = args[2]
self.message = args[3]
+
+ def __str__(self):
+ return f"Assert: [{self.filename}:{self.function}:{self.line}]: {self.message}"
+
+ def __repr__(self):
+ return f"[Assert: {self.message}]"
def _on_warning(self, args):
warningInfo = Tracer.WarningInfo(args)
diff --git a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
index 1887d5736e..f00227c47f 100755
--- a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
+++ b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
@@ -94,13 +94,13 @@ class TestAutomationBase:
editor_starttime = time.time()
self.logger.debug("Running automated test")
testcase_module_filepath = self._get_testcase_module_filepath(testcase_module)
- pycmd = ["--runpythontest", testcase_module_filepath, "-BatchMode", "-autotest_mode", "-NullRenderer"] + extra_cmdline_args
+ pycmd = ["--runpythontest", testcase_module_filepath, "-BatchMode", "-autotest_mode", "-rhi=null"] + extra_cmdline_args
editor.args.extend(pycmd) # args are added to the WinLauncher start command
editor.start(backupFiles = False, launch_ap = False)
try:
editor.wait(TestAutomationBase.MAX_TIMEOUT)
except WaitTimeoutError:
- errors.append(TestRunError("TIMEOUT", "Editor did not close after {TestAutomationBase.MAX_TIMEOUT} seconds, verify the test is ending and the application didn't freeze"))
+ errors.append(TestRunError("TIMEOUT", f"Editor did not close after {TestAutomationBase.MAX_TIMEOUT} seconds, verify the test is ending and the application didn't freeze"))
editor.kill()
output = editor.get_output()
@@ -118,16 +118,16 @@ class TestAutomationBase:
else:
error_str = "Test failed, no output available..\n"
errors.append(TestRunError("FAILED TEST", error_str))
- if return_code != TestAutomationBase.TEST_FAIL_RETCODE: # Crashed
+ if return_code and return_code != TestAutomationBase.TEST_FAIL_RETCODE: # Crashed
crash_info = "-- No crash log available --"
- error_log = os.path.join(workspace.paths.project_log(), 'error.log')
+ crash_log = os.path.join(workspace.paths.project_log(), 'error.log')
try:
- waiter.wait_for(lambda: os.path.exists(error_log), timeout=TestAutomationBase.WAIT_FOR_CRASH_LOG)
+ waiter.wait_for(lambda: os.path.exists(crash_log), timeout=TestAutomationBase.WAIT_FOR_CRASH_LOG)
except AssertionError:
pass
try:
- with open(error_log) as f:
+ with open(crash_log) as f:
crash_info = f.read()
except Exception as ex:
crash_info += f"\n{str(ex)}"
diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py b/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py
index eae5ea547a..904b5b0189 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py
@@ -24,7 +24,7 @@ class Tests():
# fmt: on
-def run():
+def C14861501_PhysXCollider_RenderMeshAutoAssigned():
"""
Summary:
Create entity with Mesh component and assign a render mesh to the Mesh component. Add Physics Collider component
@@ -61,7 +61,7 @@ def run():
from asset_utils import Asset
# Asset paths
- STATIC_MESH = os.path.join("assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.cgf")
+ STATIC_MESH = os.path.join("assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.azmodel")
PHYSX_MESH = os.path.join(
"assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.pxmesh"
)
@@ -80,8 +80,8 @@ def run():
# 4) Assign a render mesh asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
mesh_asset = Asset.find_asset_by_path(STATIC_MESH)
- mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id)
- mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset")
+ mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id)
+ mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset")
Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/"))
# 5) Add PhysX Collider component
@@ -95,4 +95,8 @@ def run():
if __name__ == "__main__":
- run()
+ import ImportPathHelper as imports
+ imports.init()
+
+ from utils import Report
+ Report.start_test(C14861501_PhysXCollider_RenderMeshAutoAssigned)
diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py b/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py
index 6ea81ea2ff..075c3f5b61 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py
@@ -62,8 +62,8 @@ def C14861502_PhysXCollider_AssetAutoAssigned():
# Open 3D Engine Imports
import azlmbr.legacy.general as general
- MESH_ASSET_PATH = os.path.join("Objects", "SphereBot", "r0-b_body.cgf")
- MESH_PROPERTY_PATH = "MeshComponentRenderNode|Mesh asset"
+ MESH_ASSET_PATH = os.path.join("Objects", "SphereBot", "r0-b_body.azmodel")
+ MESH_PROPERTY_PATH = "Controller|Configuration|Mesh Asset"
TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh"
helper.init_idle()
diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py b/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py
index abc79ba1b0..bbaabf67f6 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py
@@ -69,7 +69,7 @@ def run():
import azlmbr.asset as azasset
# Asset paths
- STATIC_MESH = os.path.join("assets", "c14861504_rendermeshasset_withnopxasset", "test_asset.cgf")
+ STATIC_MESH = os.path.join("assets", "c14861504_rendermeshasset_withnopxasset", "test_asset.azmodel")
helper.init_idle()
# 1) Load the empty level
@@ -85,8 +85,8 @@ def run():
# 4) Assign a render mesh asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
mesh_asset = Asset.find_asset_by_path(STATIC_MESH)
- mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id)
- mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset")
+ mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id)
+ mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset")
Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/"))
# 5) Add PhysX Collider component
diff --git a/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py b/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py
index a92927a9db..858e778f07 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py
@@ -27,7 +27,7 @@ class Tests():
# fmt: on
-def run():
+def C4044695_PhysXCollider_AddMultipleSurfaceFbx():
"""
Summary:
Create entity with Mesh and PhysX Collider components and assign a fbx file in both the components.
@@ -45,12 +45,7 @@ def run():
4) Select the PhysicsAsset shape in the PhysX Collider component
5) Assign the fbx file in PhysX Mesh and Mesh component
6) Check if multiple material slots show up under Materials section in the PhysX Collider component
-
- Note:
- - This test file must be called from the Open 3D Engine Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
-
+
:return: None
"""
# Builtins
@@ -70,7 +65,7 @@ def run():
SURFACE_TAG_COUNT = 4 # Number of surface tags included in used asset
# Asset paths
- STATIC_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.cgf")
+ STATIC_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.azmodel")
PHYSX_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.pxmesh")
helper.init_idle()
@@ -100,8 +95,8 @@ def run():
Report.result(Tests.assign_px_mesh_asset, px_asset.get_path() == PHYSX_MESH.replace(os.sep, "/"))
mesh_asset = Asset.find_asset_by_path(STATIC_MESH)
- mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id)
- mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset")
+ mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id)
+ mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset")
Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/"))
# 6) Check if multiple material slots show up under Materials section in the PhysX Collider component
@@ -116,4 +111,8 @@ def run():
if __name__ == "__main__":
- run()
+ import ImportPathHelper as imports
+ imports.init()
+
+ from utils import Report
+ Report.start_test(C4044695_PhysXCollider_AddMultipleSurfaceFbx)
diff --git a/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py b/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py
index 906c6db55b..72442601e4 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py
@@ -27,7 +27,7 @@ class Tests():
def C4976236_AddPhysxColliderComponent():
"""
Summary:
- Load level with Entity having PhysX Collider component. Verify that editor remains stable in Game mode.
+ Opens an empty level and creates an Entity with PhysX Collider. Verify that editor remains stable in Game mode.
Expected Behavior:
The Editor is stable there are no warnings or errors.
@@ -37,16 +37,10 @@ def C4976236_AddPhysxColliderComponent():
2) Create test entity
3) Start the Tracer to catch any errors and warnings
4) Add the PhysX Collider component and change shape to box
- 5) Add Mesh component and an asset
- 6) Enter game mode
- 7) Verify there are no errors and warnings in the logs
- 8) Exit game mode
- 9) Close the editor
-
- Note:
- - This test file must be called from the Open 3D Engine Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
+ 5) Enter game mode
+ 6) Verify there are no errors and warnings in the logs
+ 7) Exit game mode
+ 8) Close the editor
:return: None
"""
@@ -60,7 +54,7 @@ def C4976236_AddPhysxColliderComponent():
from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.utils import Tracer
from asset_utils import Asset
-
+
helper.init_idle()
# 1) Load the level
helper.open_level("Physics", "Base")
@@ -74,17 +68,12 @@ def C4976236_AddPhysxColliderComponent():
# 4) Add the PhysX Collider component and change shape to box
collider_component = test_entity.add_component("PhysX Collider")
Report.result(Tests.add_physx_collider, test_entity.has_component("PhysX Collider"))
- collider_component.set_component_property_value('Shape Configuration|Shape', 1)
-
- # 5) Add Mesh component and an asset
- mesh_component = test_entity.add_component("Mesh")
- asset = Asset.find_asset_by_path(r"Objects\default\primitive_cube.cgf")
- mesh_component.set_component_property_value('MeshComponentRenderNode|Mesh asset', asset.id)
+ collider_component.set_component_property_value('Shape Configuration|Shape', azlmbr.physics.ShapeType_Box)
- # 6) Enter game mode
+ # 5) Enter game mode
helper.enter_game_mode(Tests.enter_game_mode)
- # 7) Verify there are no errors and warnings in the logs
+ # 6) Verify there are no errors and warnings in the logs
success_condition = not (section_tracer.has_errors or section_tracer.has_warnings)
Report.result(Tests.no_errors_and_warnings_found, success_condition)
if not success_condition:
@@ -92,9 +81,8 @@ def C4976236_AddPhysxColliderComponent():
Report.info(f"Warnings found: {section_tracer.warnings}")
if section_tracer.has_errors:
Report.info(f"Errors found: {section_tracer.errors}")
- Report.failure(Tests.no_errors_and_warnings_found)
- # 8) Exit game mode
+ # 7) Exit game mode
helper.exit_game_mode(Tests.exit_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py
new file mode 100644
index 0000000000..67e855a00e
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py
@@ -0,0 +1,37 @@
+"""
+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 suite consists of all test cases that are passing and have been verified.
+
+import pytest
+import os
+import sys
+
+from .FileManagement import FileManagement as fm
+from ly_test_tools import LAUNCHERS
+
+sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
+
+from base import TestAutomationBase
+
+
+revert_physics_config = fm.file_revert_list(['physxdebugconfiguration.setreg', 'physxdefaultsceneconfiguration.setreg', 'physxsystemconfiguration.setreg'], 'AutomatedTesting/Registry')
+
+
+@pytest.mark.SUITE_main
+@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+class TestAutomation(TestAutomationBase):
+
+ def test_C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC(self, request, workspace, editor, launcher_platform):
+ from . import C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC as test_module
+ self._run_test(request, workspace, editor, test_module)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py
similarity index 96%
rename from AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py
rename to AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py
index 805e4f7d79..ad8ae6481f 100755
--- a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py
+++ b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py
@@ -27,26 +27,16 @@ from base import TestAutomationBase
revert_physics_config = fm.file_revert_list(['physxdebugconfiguration.setreg', 'physxdefaultsceneconfiguration.setreg', 'physxsystemconfiguration.setreg'], 'AutomatedTesting/Registry')
-@pytest.mark.SUITE_main
+@pytest.mark.SUITE_periodic
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
class TestAutomation(TestAutomationBase):
- # Marking the test as an expected failure due to sporadic failure on Automated Review: SPEC-3146
- # The test still runs, but a failure of the test doesn't result in the test run failing
- @pytest.mark.xfail(
- reason="This test seems to fail sometimes due to it being the first test in the testsuite, we'll duplicate it temporarly."
- "Need to figure out the reason why this is the case")
- @revert_physics_config
- def test_C000000_RigidBody_EnablingGravityWorksPoC_DUPLICATE(self, request, workspace, editor, launcher_platform):
- from . import C100000_RigidBody_EnablingGravityWorksPoC as test_module
- self._run_test(request, workspace, editor, test_module)
-
@revert_physics_config
def test_C3510642_Terrain_NotCollideWithTerrain(self, request, workspace, editor, launcher_platform):
from . import C3510642_Terrain_NotCollideWithTerrain as test_module
self._run_test(request, workspace, editor, test_module)
-
+
@revert_physics_config
def test_C4976195_RigidBodies_InitialLinearVelocity(self, request, workspace, editor, launcher_platform):
from . import C4976195_RigidBodies_InitialLinearVelocity as test_module
@@ -530,8 +520,4 @@ class TestAutomation(TestAutomationBase):
def test_C100000_RigidBody_EnablingGravityWorksPoC(self, request, workspace, editor, launcher_platform):
from . import C100000_RigidBody_EnablingGravityWorksPoC as test_module
- self._run_test(request, workspace, editor, test_module)
-
- def test_C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC(self, request, workspace, editor, launcher_platform):
- from . import C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC as test_module
- self._run_test(request, workspace, editor, test_module)
+ self._run_test(request, workspace, editor, test_module)
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/Physics/Base/Base.ly b/AutomatedTesting/Levels/Physics/Base/Base.ly
index 97546ff3a2..f99dc672b0 100644
--- a/AutomatedTesting/Levels/Physics/Base/Base.ly
+++ b/AutomatedTesting/Levels/Physics/Base/Base.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:75cb1c8454aafc3de81351450a9480f91cb98d926a6e47f87a5ffe91e1d5a7d5
-size 4745
+oid sha256:f63204a86af8bc0963a4823d047a2e222cc19aabd14570d0789dc90cdc82970c
+size 2017
diff --git a/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml
index 456d609b8a..6ea168cc6b 100644
--- a/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml
+++ b/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml
@@ -1,356 +1,356 @@
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
diff --git a/AutomatedTesting/game.cfg b/AutomatedTesting/game.cfg
index d9d8461ea0..f50112436f 100644
--- a/AutomatedTesting/game.cfg
+++ b/AutomatedTesting/game.cfg
@@ -1,7 +1,7 @@
sys_game_name = "AutomatedTesting"
sys_localization_folder = Localization
ca_useIMG_CAF = 0
-sys_asserts=2
+sys_asserts=1
-- Enable warnings when asset loads take longer than the given millisecond threshold
cl_assetLoadWarningEnable=true
diff --git a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp
index f01e42a443..52eae22fee 100644
--- a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp
@@ -26,6 +26,22 @@ namespace Physics
->Field("Scale", &ShapeConfiguration::m_scale)
;
}
+
+ if (auto behaviorContext = azrtti_cast(context))
+ {
+ #define REFLECT_SHAPETYPE_ENUM_VALUE(EnumValue) \
+ behaviorContext->EnumProperty<(int)Physics::ShapeType::EnumValue>("ShapeType_"#EnumValue) \
+ ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation) \
+ ->Attribute(AZ::Script::Attributes::Module, "physics");
+
+ // Note: Here we only expose the types that are available to the user in the editor
+ REFLECT_SHAPETYPE_ENUM_VALUE(Box);
+ REFLECT_SHAPETYPE_ENUM_VALUE(Sphere);
+ REFLECT_SHAPETYPE_ENUM_VALUE(Cylinder);
+ REFLECT_SHAPETYPE_ENUM_VALUE(PhysicsAsset);
+
+ #undef REFLECT_SHAPETYPE_ENUM_VALUE
+ }
}
void SphereShapeConfiguration::Reflect(AZ::ReflectContext* context)
diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp
index a474706910..c6a2ece984 100644
--- a/Code/Sandbox/Editor/CryEdit.cpp
+++ b/Code/Sandbox/Editor/CryEdit.cpp
@@ -5232,6 +5232,13 @@ extern "C" int AZ_DLL_EXPORT CryEditMain(int argc, char* argv[])
AzQtComponents::Utilities::HandleDpiAwareness(AzQtComponents::Utilities::SystemDpiAware);
Editor::EditorQtApplication app(argc, argv);
+ if (app.arguments().contains("-autotest_mode"))
+ {
+ // Nullroute all stdout to null for automated tests, this way we make sure
+ // that the test result output is not polluted with unrelated output data.
+ theApp->RedirectStdoutToNull();
+ }
+
// Hook the trace bus to catch errors, boot the AZ app after the QApplication is up
int ret = 0;
@@ -5249,13 +5256,6 @@ extern "C" int AZ_DLL_EXPORT CryEditMain(int argc, char* argv[])
return -1;
}
- if (app.arguments().contains("-autotest_mode"))
- {
- // Nullroute all stdout to null for automated tests, this way we make sure
- // that the test result output is not polluted with unrelated output data.
- theApp->RedirectStdoutToNull();
- }
-
AzToolsFramework::EditorEvents::Bus::Broadcast(&AzToolsFramework::EditorEvents::NotifyQtApplicationAvailable, &app);
#if defined(AZ_PLATFORM_MAC)
diff --git a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
index d2d119a02d..53f5be5bc4 100644
--- a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
+++ b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
@@ -653,8 +653,8 @@ namespace EditorPythonBindings
}
else
{
- // something when wrong with executing the test script
- AZ::Debug::Trace::Terminate(1);
+ // something went wrong with executing the test script
+ AZ::Debug::Trace::Terminate(0xF);
}
}
diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp
index c470c05c58..eb4235766c 100644
--- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp
+++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp
@@ -88,33 +88,33 @@ namespace PhysX
editContext->Class(
"EditorProxyShapeConfig", "PhysX Base shape collider")
->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorProxyShapeConfig::m_shapeType, "Shape", "The shape of the collider")
- ->EnumAttribute(Physics::ShapeType::Sphere, "Sphere")
- ->EnumAttribute(Physics::ShapeType::Box, "Box")
- ->EnumAttribute(Physics::ShapeType::Capsule, "Capsule")
- ->EnumAttribute(Physics::ShapeType::PhysicsAsset, "PhysicsAsset")
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
- // note: we do not want the user to be able to change shape types while in ComponentMode (there will
- // potentially be different ComponentModes for different shape types)
- ->Attribute(AZ::Edit::Attributes::ReadOnly, &AzToolsFramework::ComponentModeFramework::InComponentMode)
+ ->EnumAttribute(Physics::ShapeType::Sphere, "Sphere")
+ ->EnumAttribute(Physics::ShapeType::Box, "Box")
+ ->EnumAttribute(Physics::ShapeType::Capsule, "Capsule")
+ ->EnumAttribute(Physics::ShapeType::PhysicsAsset, "PhysicsAsset")
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
+ // note: we do not want the user to be able to change shape types while in ComponentMode (there will
+ // potentially be different ComponentModes for different shape types)
+ ->Attribute(AZ::Edit::Attributes::ReadOnly, &AzToolsFramework::ComponentModeFramework::InComponentMode)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_sphere, "Sphere", "Configuration of sphere shape")
- ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsSphereConfig)
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
+ ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsSphereConfig)
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_box, "Box", "Configuration of box shape")
- ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsBoxConfig)
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
+ ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsBoxConfig)
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_capsule, "Capsule", "Configuration of capsule shape")
- ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsCapsuleConfig)
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
+ ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsCapsuleConfig)
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_physicsAsset, "Asset", "Configuration of asset shape")
- ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsAssetConfig)
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
+ ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsAssetConfig)
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_subdivisionLevel, "Subdivision level",
"The level of subdivision if a primitive shape is replaced with a convex mesh due to scaling")
- ->Attribute(AZ::Edit::Attributes::Min, Utils::MinCapsuleSubdivisionLevel)
- ->Attribute(AZ::Edit::Attributes::Max, Utils::MaxCapsuleSubdivisionLevel)
- ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::ShowingSubdivisionLevel)
- ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
+ ->Attribute(AZ::Edit::Attributes::Min, Utils::MinCapsuleSubdivisionLevel)
+ ->Attribute(AZ::Edit::Attributes::Max, Utils::MaxCapsuleSubdivisionLevel)
+ ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::ShowingSubdivisionLevel)
+ ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged)
;
}
}
diff --git a/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py b/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py
index e8e0b02501..c67d6721cf 100755
--- a/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py
+++ b/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py
@@ -22,7 +22,7 @@ def _get_test_launcher_cmd(build_dir=None):
"""
build_arg = ""
if build_dir:
- build_arg = f"--build-directory {build_dir} "
+ build_arg = f" --build-directory {build_dir} "
python_runner = "python.cmd"
if not WINDOWS: