Merge branch 'development' into Atom/jromnoa/assert-for-screenshot-comparisons
This commit is contained in:
@@ -6,7 +6,11 @@
|
||||
#
|
||||
#
|
||||
|
||||
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
|
||||
|
||||
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_BLAST Traits
|
||||
|
||||
if(PAL_TRAIT_BLAST_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
ly_add_pytest(
|
||||
NAME AutomatedTesting::BlastTests_Main
|
||||
TEST_SUITE main
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED TRUE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||
@@ -59,5 +59,8 @@ add_subdirectory(smoke)
|
||||
## AWS ##
|
||||
add_subdirectory(AWS)
|
||||
|
||||
## Multiplayer ##
|
||||
add_subdirectory(Multiplayer)
|
||||
|
||||
## Integration tests for editor testing framework ##
|
||||
add_subdirectory(editor_test_testing)
|
||||
|
||||
+53
@@ -14,7 +14,10 @@ from typing import Callable, Tuple
|
||||
|
||||
import azlmbr
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.multiplayer as multiplayer
|
||||
import azlmbr.debug
|
||||
import ly_test_tools.environment.waiter as waiter
|
||||
import ly_test_tools.environment.process_utils as process_utils
|
||||
|
||||
|
||||
class FailFast(Exception):
|
||||
@@ -66,6 +69,56 @@ class TestHelper:
|
||||
TestHelper.wait_for_condition(lambda : general.is_in_game_mode(), 1.0)
|
||||
Report.critical_result(msgtuple_success_fail, general.is_in_game_mode())
|
||||
|
||||
@staticmethod
|
||||
def multiplayer_enter_game_mode(msgtuple_success_fail : Tuple[str, str], sv_default_player_spawn_asset : str):
|
||||
# type: (tuple) -> None
|
||||
"""
|
||||
:param msgtuple_success_fail: The tuple with the expected/unexpected messages for entering game mode.
|
||||
:param sv_default_player_spawn_asset: The path to the network player prefab that will be automatically spawned upon entering gamemode. The engine default is "prefabs/player.network.spawnable"
|
||||
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# looks for an expected line in a list of tracers lines
|
||||
# lines: the tracer list of lines to search. options are section_tracer.warnings, section_tracer.errors, section_tracer.asserts, section_tracer.prints
|
||||
# return: true if the line is found, otherwise false
|
||||
def find_expected_line(expected_line, lines):
|
||||
found_lines = [printInfo.message.strip() for printInfo in lines]
|
||||
return expected_line in found_lines
|
||||
|
||||
def wait_for_critical_expected_line(expected_line, lines, time_out):
|
||||
TestHelper.wait_for_condition(lambda : find_expected_line(expected_line, lines), time_out)
|
||||
Report.critical_result(("Found expected line: " + expected_line, "Failed to find expected line: " + expected_line), find_expected_line(expected_line, lines))
|
||||
|
||||
def wait_for_critical_unexpected_line(unexpected_line, lines, time_out):
|
||||
TestHelper.wait_for_condition(lambda : find_expected_line(unexpected_line, lines), time_out)
|
||||
Report.critical_result(("Unexpected line not found: " + unexpected_line, "Unexpected line found: " + unexpected_line), not find_expected_line(unexpected_line, lines))
|
||||
|
||||
|
||||
Report.info("Entering game mode")
|
||||
if sv_default_player_spawn_asset :
|
||||
general.set_cvar("sv_defaultPlayerSpawnAsset", sv_default_player_spawn_asset)
|
||||
|
||||
with Tracer() as section_tracer:
|
||||
# enter game-mode.
|
||||
# game-mode in multiplayer will also launch ServerLauncher.exe and connect to the editor
|
||||
multiplayer.PythonEditorFuncs_enter_game_mode()
|
||||
|
||||
# make sure the server launcher binary exists
|
||||
wait_for_critical_unexpected_line("LaunchEditorServer failed! The ServerLauncher binary is missing!", section_tracer.errors, 0.5)
|
||||
|
||||
# make sure the server launcher is running
|
||||
waiter.wait_for(lambda: process_utils.process_exists("AutomatedTesting.ServerLauncher", ignore_extensions=True), timeout=5.0, exc=AssertionError("AutomatedTesting.ServerLauncher has NOT launched!"), interval=1.0)
|
||||
|
||||
# make sure the editor connects to the editor-server and sends the level data packet
|
||||
wait_for_critical_expected_line("Editor is sending the editor-server the level data packet.", section_tracer.prints, 5.0)
|
||||
|
||||
# make sure the editor finally connects to the editor-server network simulation
|
||||
wait_for_critical_expected_line("Editor-server ready. Editor has successfully connected to the editor-server's network simulation.", section_tracer.prints, 5.0)
|
||||
|
||||
TestHelper.wait_for_condition(lambda : multiplayer.PythonEditorFuncs_is_in_game_mode(), 5.0)
|
||||
Report.critical_result(msgtuple_success_fail, multiplayer.PythonEditorFuncs_is_in_game_mode())
|
||||
|
||||
@staticmethod
|
||||
def exit_game_mode(msgtuple_success_fail : Tuple[str, str]):
|
||||
# type: (tuple) -> None
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
ly_add_pytest(
|
||||
NAME AutomatedTesting::MultiplayerTests_Main
|
||||
TEST_SUITE main
|
||||
TEST_SERIAL
|
||||
PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
|
||||
RUNTIME_DEPENDENCIES
|
||||
Legacy::Editor
|
||||
AZ::AssetProcessor
|
||||
AutomatedTesting.Assets
|
||||
AutomatedTesting.ServerLauncher
|
||||
COMPONENT
|
||||
Multiplayer
|
||||
)
|
||||
endif()
|
||||
@@ -0,0 +1,33 @@
|
||||
"""
|
||||
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
|
||||
|
||||
"""
|
||||
|
||||
# This suite consists of all test cases that are under development and have not been verified yet.
|
||||
# Once they are verified, please move them to TestSuite_Active.py
|
||||
|
||||
import pytest
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
|
||||
|
||||
from base import TestAutomationBase
|
||||
|
||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
class TestAutomation(TestAutomationBase):
|
||||
def _run_prefab_test(self, request, workspace, editor, test_module, batch_mode=True, autotest_mode=True):
|
||||
self._run_test(request, workspace, editor, test_module,
|
||||
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"],
|
||||
batch_mode=batch_mode,
|
||||
autotest_mode=autotest_mode)
|
||||
|
||||
def test_Multiplayer_AutoComponent_NetworkInput(self, request, workspace, editor, launcher_platform):
|
||||
from .tests import Multiplayer_AutoComponent_NetworkInput as test_module
|
||||
self._run_prefab_test(request, workspace, editor, test_module)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
"""
|
||||
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
|
||||
"""
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
"""
|
||||
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
|
||||
"""
|
||||
|
||||
|
||||
# Test Case Title : Check that network input can be created, received by the authority, and processed
|
||||
|
||||
|
||||
# fmt: off
|
||||
class Tests():
|
||||
enter_game_mode = ("Entered game mode", "Failed to enter game mode")
|
||||
exit_game_mode = ("Exited game mode", "Couldn't exit game mode")
|
||||
find_network_player = ("Found network player", "Couldn't find network player")
|
||||
found_lines = ("Expected log lines were found", "Expected log lines were not found")
|
||||
found_unexpected_lines = ("Unexpected log lines were not found", "Unexpected log lines were found")
|
||||
# fmt: on
|
||||
|
||||
|
||||
def Multiplayer_AutoComponent_NetworkInput():
|
||||
r"""
|
||||
Summary:
|
||||
Runs a test to make sure that network input can be sent from the autonomous player, received by the authority, and processed
|
||||
|
||||
Level Description:
|
||||
- Dynamic
|
||||
1. Although the level is empty, when the server and editor connect the server will spawn and replicate the player network prefab.
|
||||
a. The player network prefab has a NetworkTestPlayerComponent.AutoComponent and a script canvas attached which will listen for the CreateInput and ProcessInput events.
|
||||
Print logs occur upon triggering the CreateInput and ProcessInput events along with their values; we are testing to make sure the expected events are values are recieved.
|
||||
- Static
|
||||
1. This is an empty level. All the logic occurs on the Player.network.spawnable (see the above Dynamic description)
|
||||
|
||||
|
||||
Expected Outcome:
|
||||
We should see editor logs stating that network input has been created and processed.
|
||||
However, if the script receives unexpected values for the Process event we will see print logs for bad data as well.
|
||||
|
||||
:return:
|
||||
"""
|
||||
import azlmbr.legacy.general as general
|
||||
from editor_python_test_tools.utils import Report
|
||||
from editor_python_test_tools.utils import Tracer
|
||||
|
||||
from editor_python_test_tools.utils import TestHelper as helper
|
||||
from ly_remote_console.remote_console_commands import RemoteConsole as RemoteConsole
|
||||
|
||||
|
||||
def find_expected_line(expected_line):
|
||||
found_lines = [printInfo.message.strip() for printInfo in section_tracer.prints]
|
||||
return expected_line in found_lines
|
||||
|
||||
def find_unexpected_line(expected_line):
|
||||
return not find_expected_line(expected_line)
|
||||
|
||||
unexpected_lines = [
|
||||
'AutoComponent_NetworkInput received bad fwdback!',
|
||||
'AutoComponent_NetworkInput received bad leftright!',
|
||||
|
||||
]
|
||||
expected_lines = [
|
||||
'AutoComponent_NetworkInput ProcessInput called!',
|
||||
'AutoComponent_NetworkInput CreateInput called!',
|
||||
]
|
||||
|
||||
expected_lines_server = [
|
||||
'(Script) - AutoComponent_NetworkInput ProcessInput called!',
|
||||
]
|
||||
|
||||
level_name = "AutoComponent_NetworkInput"
|
||||
player_prefab_name = "Player"
|
||||
player_prefab_path = f"levels/multiplayer/{level_name}/{player_prefab_name}.network.spawnable"
|
||||
|
||||
helper.init_idle()
|
||||
|
||||
|
||||
# 1) Open Level
|
||||
helper.open_level("Multiplayer", level_name)
|
||||
|
||||
with Tracer() as section_tracer:
|
||||
# 2) Enter game mode
|
||||
helper.multiplayer_enter_game_mode(Tests.enter_game_mode, player_prefab_path.lower())
|
||||
|
||||
# 3) Make sure the network player was spawned
|
||||
player_id = general.find_game_entity(player_prefab_name)
|
||||
Report.critical_result(Tests.find_network_player, player_id.IsValid())
|
||||
|
||||
# 4) Check the editor logs for expected and unexpected log output
|
||||
EXPECTEDLINE_WAIT_TIME_SECONDS = 1.0
|
||||
for expected_line in expected_lines :
|
||||
helper.wait_for_condition(lambda: find_expected_line(expected_line), EXPECTEDLINE_WAIT_TIME_SECONDS)
|
||||
Report.result(Tests.found_lines, find_expected_line(expected_line))
|
||||
|
||||
general.idle_wait_frames(1)
|
||||
for unexpected_line in unexpected_lines :
|
||||
Report.result(Tests.found_unexpected_lines, find_unexpected_line(unexpected_line))
|
||||
|
||||
# 5) Check the ServerLauncher logs for expected log output
|
||||
# Since the editor has started a server launcher, the RemoteConsole with the default port=4600 will automatically be able to read the server logs
|
||||
server_console = RemoteConsole()
|
||||
server_console.start()
|
||||
for line in expected_lines_server:
|
||||
assert server_console.expect_log_line(line, EXPECTEDLINE_WAIT_TIME_SECONDS), f"Expected line not found: {line}"
|
||||
server_console.stop()
|
||||
|
||||
|
||||
# Exit game mode
|
||||
helper.exit_game_mode(Tests.exit_game_mode)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Multiplayer_AutoComponent_NetworkInput)
|
||||
@@ -53,6 +53,27 @@ class EditorSingleTest_WithFileOverrides(EditorSingleTest):
|
||||
for f in original_file_list:
|
||||
fm._restore_file(f, file_list[f])
|
||||
|
||||
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
||||
@pytest.mark.SUITE_main
|
||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||
class TestAutomationWithPrefabSystemEnabled(EditorTestSuite):
|
||||
|
||||
global_extra_cmdline_args = ['-BatchMode', '-autotest_mode',
|
||||
'extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"]']
|
||||
|
||||
@staticmethod
|
||||
def get_number_parallel_editors():
|
||||
return 16
|
||||
|
||||
class C4982801_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_BoxShapeEditing as test_module
|
||||
|
||||
class C4982800_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_SphereShapeEditing as test_module
|
||||
|
||||
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_CapsuleShapeEditing as test_module
|
||||
|
||||
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
||||
@pytest.mark.SUITE_main
|
||||
@@ -286,15 +307,6 @@ class TestAutomation(EditorTestSuite):
|
||||
class C19723164_ShapeCollider_WontCrashEditor(EditorSharedTest):
|
||||
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
|
||||
|
||||
class C4982800_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_SphereShapeEditting as test_module
|
||||
|
||||
class C4982801_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_BoxShapeEditting as test_module
|
||||
|
||||
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||
from .tests.collider import Collider_CapsuleShapeEditting as test_module
|
||||
|
||||
class C12905528_ForceRegion_WithNonTriggerCollider(EditorSharedTest):
|
||||
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
||||
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
|
||||
|
||||
@@ -401,19 +401,22 @@ class TestAutomation(TestAutomationBase):
|
||||
self._run_test(request, workspace, editor, test_module)
|
||||
|
||||
@revert_physics_config
|
||||
def test_Collider_SphereShapeEditting(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_SphereShapeEditting as test_module
|
||||
self._run_test(request, workspace, editor, test_module)
|
||||
def test_Collider_SphereShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_SphereShapeEditing as test_module
|
||||
self._run_test(request, workspace, editor, test_module,
|
||||
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||
|
||||
@revert_physics_config
|
||||
def test_Collider_BoxShapeEditting(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_BoxShapeEditting as test_module
|
||||
self._run_test(request, workspace, editor, test_module)
|
||||
def test_Collider_BoxShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_BoxShapeEditing as test_module
|
||||
self._run_test(request, workspace, editor, test_module,
|
||||
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||
|
||||
@revert_physics_config
|
||||
def test_Collider_CapsuleShapeEditting(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_CapsuleShapeEditting as test_module
|
||||
self._run_test(request, workspace, editor, test_module)
|
||||
def test_Collider_CapsuleShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.collider import Collider_CapsuleShapeEditing as test_module
|
||||
self._run_test(request, workspace, editor, test_module,
|
||||
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||
|
||||
def test_ForceRegion_WithNonTriggerColliderWarning(self, request, workspace, editor, launcher_platform):
|
||||
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
||||
|
||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
||||
# fmt: on
|
||||
|
||||
|
||||
def Collider_BoxShapeEditting():
|
||||
def Collider_BoxShapeEditing():
|
||||
"""
|
||||
Summary:
|
||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||
@@ -73,7 +73,7 @@ def Collider_BoxShapeEditting():
|
||||
|
||||
helper.init_idle()
|
||||
# 1) Load the empty level
|
||||
helper.open_level("Physics", "Base")
|
||||
helper.open_level("", "Base")
|
||||
|
||||
# 2) Create the test entity
|
||||
test_entity = Entity.create_editor_entity("Test Entity")
|
||||
@@ -102,4 +102,4 @@ def Collider_BoxShapeEditting():
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Collider_BoxShapeEditting)
|
||||
Report.start_test(Collider_BoxShapeEditing)
|
||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
||||
# fmt: on
|
||||
|
||||
|
||||
def Collider_CapsuleShapeEditting():
|
||||
def Collider_CapsuleShapeEditing():
|
||||
"""
|
||||
Summary:
|
||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||
@@ -74,7 +74,7 @@ def Collider_CapsuleShapeEditting():
|
||||
|
||||
helper.init_idle()
|
||||
# 1) Load the empty level
|
||||
helper.open_level("Physics", "Base")
|
||||
helper.open_level("", "Base")
|
||||
|
||||
# 2) Create the test entity
|
||||
test_entity = Entity.create_editor_entity("Test Entity")
|
||||
@@ -102,4 +102,4 @@ def Collider_CapsuleShapeEditting():
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Collider_CapsuleShapeEditting)
|
||||
Report.start_test(Collider_CapsuleShapeEditing)
|
||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
||||
# fmt: on
|
||||
|
||||
|
||||
def Collider_SphereShapeEditting():
|
||||
def Collider_SphereShapeEditing():
|
||||
"""
|
||||
Summary:
|
||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||
@@ -57,7 +57,7 @@ def Collider_SphereShapeEditting():
|
||||
|
||||
helper.init_idle()
|
||||
# 1) Load the empty level
|
||||
helper.open_level("Physics", "Base")
|
||||
helper.open_level("", "Base")
|
||||
|
||||
# 2) Create the test entity
|
||||
test_entity = Entity.create_editor_entity("Test Entity")
|
||||
@@ -90,4 +90,4 @@ def Collider_SphereShapeEditting():
|
||||
|
||||
if __name__ == "__main__":
|
||||
from editor_python_test_tools.utils import Report
|
||||
Report.start_test(Collider_SphereShapeEditting)
|
||||
Report.start_test(Collider_SphereShapeEditing)
|
||||
@@ -6,7 +6,11 @@
|
||||
#
|
||||
#
|
||||
|
||||
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
|
||||
|
||||
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_WHITEBOX Traits
|
||||
|
||||
if(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
ly_add_pytest(
|
||||
NAME AutomatedTesting::WhiteBoxTests
|
||||
TEST_SUITE main
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED TRUE)
|
||||
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
||||
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||
-76
@@ -47,82 +47,6 @@ class TestsAssetProcessorBatch_DependenycyTests(object):
|
||||
"""
|
||||
AssetProcessorBatch Dependency tests
|
||||
"""
|
||||
|
||||
@pytest.mark.test_case_id("C16877166")
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
# fmt:off
|
||||
def test_WindowsMacPlatforms_RunAPBatch_NotMissingDependency(self, ap_setup_fixture, asset_processor,
|
||||
workspace):
|
||||
# fmt:on
|
||||
"""
|
||||
Engine Schema
|
||||
This test case has a conditional scenario depending on the existence of surfacetypes.xml in a project.
|
||||
Some projects have this file and others do not. Run the conditional scenario depending on the existence
|
||||
of the file in the project
|
||||
libs/materialeffects/surfacetypes.xml is listed as an entry engine_dependencies.xml
|
||||
libs/materialeffects/surfacetypes.xml is not listed as a missing dependency
|
||||
in the 'assetprocessorbatch' console output
|
||||
|
||||
Test Steps:
|
||||
1. Assets are pre-processed
|
||||
2. Verify that engine_dependencies.xml exists
|
||||
3. Verify engine_dependencies.xml has surfacetypes.xml present
|
||||
4. Run Missing Dependency scanner against the engine_dependenciese.xml
|
||||
5. Verify that Surfacetypes.xml is NOT in the missing depdencies output
|
||||
6. Add the schema file which allows our xml parser to understand dependencies for our engine_dependencies file
|
||||
7. Process assets
|
||||
8. Run Missing Dependency scanner against the engine_dependenciese.xml
|
||||
9. Verify that surfacetypes.xml is in the missing dependencies out
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
BATCH_LOG_PATH = env["ap_batch_log_file"]
|
||||
asset_processor.create_temp_asset_root()
|
||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Engine_Dependencies.xml"))
|
||||
asset_processor.add_scan_folder(os.path.join("Assets", "Engine"))
|
||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Libs", "MaterialEffects", "surfacetypes.xml"))
|
||||
|
||||
# Precondition: Assets are all processed
|
||||
asset_processor.batch_process()
|
||||
|
||||
DEPENDENCIES_PATH = os.path.join(asset_processor.temp_project_cache(), "engine_dependencies.xml")
|
||||
assert os.path.exists(DEPENDENCIES_PATH), "The engine_dependencies.xml does not exist."
|
||||
surfacetypes_in_dependencies = False
|
||||
surfacetypes_missing_logline = False
|
||||
|
||||
# Read engine_dependencies.xml to see if surfacetypes.xml is present
|
||||
with open(DEPENDENCIES_PATH, "r") as dependencies_file:
|
||||
for line in dependencies_file.readlines():
|
||||
if "surfacetypes.xml" in line:
|
||||
surfacetypes_in_dependencies = True
|
||||
logger.info("Surfacetypes.xml was listed in the engine_dependencies.xml file.")
|
||||
break
|
||||
|
||||
if not surfacetypes_in_dependencies:
|
||||
logger.info("Surfacetypes.xml was not listed in the engine_dependencies.xml file.")
|
||||
|
||||
_, output = asset_processor.batch_process(capture_output=True,
|
||||
extra_params="--dsp=%engine_dependencies.xml")
|
||||
log = APOutputParser(output)
|
||||
for _ in log.get_lines(run=-1, contains=["surfacetypes.xml", "Missing"]):
|
||||
surfacetypes_missing_logline = True
|
||||
|
||||
assert surfacetypes_missing_logline, "Surfacetypes.xml not seen in the batch log as missing."
|
||||
|
||||
# Add the schema file which allows our xml parser to understand dependencies for our engine_dependencies file
|
||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Schema", "enginedependency.xmlschema"))
|
||||
asset_processor.batch_process()
|
||||
|
||||
_, output = asset_processor.batch_process(capture_output=True,
|
||||
extra_params="--dsp=%engine_dependencies.xml")
|
||||
log = APOutputParser(output)
|
||||
surfacetypes_missing_logline = False
|
||||
for _ in log.get_lines(run=-1, contains=["surfacetypes.xml", "Missing"]):
|
||||
surfacetypes_missing_logline = True
|
||||
|
||||
assert not surfacetypes_missing_logline, "Surfacetypes.xml not seen in the batch log as missing."
|
||||
|
||||
schemas = [
|
||||
("C16877167", ".ent"),
|
||||
("C16877168", "Environment.xml"),
|
||||
|
||||
Reference in New Issue
Block a user