TestSuite_Periodic.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. """
  6. import ly_test_tools
  7. import pytest
  8. import os
  9. import sys
  10. sys.path.append(os.path.dirname(__file__))
  11. import ImportPathHelper as imports
  12. imports.init()
  13. import hydra_test_utils as hydra
  14. import ly_test_tools.environment.file_system as file_system
  15. from ly_test_tools.o3de.editor_test import EditorBatchedTest, EditorTestSuite
  16. from ly_test_tools import LAUNCHERS
  17. from base import TestAutomationBase
  18. TEST_DIRECTORY = os.path.dirname(__file__)
  19. # Bat
  20. @pytest.mark.REQUIRES_gpu
  21. @pytest.mark.SUITE_periodic
  22. @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
  23. @pytest.mark.parametrize("project", ["AutomatedTesting"])
  24. class TestScriptCanvas(EditorTestSuite):
  25. class test_NodePalette_HappyPath_CanSelectNode(EditorBatchedTest):
  26. import NodePalette_HappyPath_CanSelectNode as test_module
  27. @pytest.mark.xfail(reason="keyboard shortcuts are not behaving properly: https://github.com/o3de/o3de/issues/14802")
  28. class test_EditMenu_Default_UndoRedo(EditorBatchedTest):
  29. import EditMenu_Default_UndoRedo as test_module
  30. @pytest.mark.REQUIRES_gpu
  31. @pytest.mark.SUITE_periodic
  32. @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
  33. @pytest.mark.parametrize("project", ["AutomatedTesting"])
  34. class TestAutomationQtPyTests(TestAutomationBase):
  35. # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
  36. global_extra_cmdline_args = []
  37. def test_ScriptCanvas_ChangingAssets_ComponentStable(self, request, workspace, editor, launcher_platform):
  38. from . import ScriptCanvas_ChangingAssets_ComponentStable as test_module
  39. self._run_test(request, workspace, editor, test_module)
  40. def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform):
  41. from . import VariableManager_UnpinVariableType_Works as test_module
  42. self._run_test(request, workspace, editor, test_module)
  43. def test_ScriptCanvas_TwoComponents_InteractSuccessfully(self, request, workspace, editor, launcher_platform):
  44. from . import ScriptCanvas_TwoComponents_InteractSuccessfully as test_module
  45. self._run_test(request, workspace, editor, test_module)
  46. def test_ScriptCanvas_TwoEntities_UseSimultaneously(self, request, workspace, editor, launcher_platform):
  47. from . import ScriptCanvas_TwoComponents_InteractSuccessfully as test_module
  48. self._run_test(request, workspace, editor, test_module)
  49. def test_ScriptCanvasComponent_OnEntityActivatedDeactivated_PrintMessage(self, request, workspace, editor, launcher_platform):
  50. from . import ScriptCanvasComponent_OnEntityActivatedDeactivated_PrintMessage as test_module
  51. self._run_test(request, workspace, editor, test_module)
  52. def test_ScriptEvents_Default_SendReceiveSuccessfully(self, request, workspace, editor, launcher_platform):
  53. from . import ScriptEvents_Default_SendReceiveSuccessfully as test_module
  54. self._run_test(request, workspace, editor, test_module)
  55. def test_ScriptEvents_HappyPath_SendReceiveAcrossMultiple(self, request, workspace, editor, launcher_platform):
  56. from . import ScriptEvents_HappyPath_SendReceiveAcrossMultiple as test_module
  57. self._run_test(request, workspace, editor, test_module)
  58. def test_ScriptEvents_ReturnSetType_Successfully(self, request, workspace, editor, launcher_platform):
  59. from . import ScriptEvents_ReturnSetType_Successfully as test_module
  60. self._run_test(request, workspace, editor, test_module)
  61. @pytest.mark.skip(reason="a Qt checkbox does not trigger: https://github.com/o3de/o3de/issues/14860")
  62. def test_ScriptEvent_AddRemoveParameter_ActionsSuccessful(self, request, workspace, editor, launcher_platform):
  63. from . import ScriptEvent_AddRemoveParameter_ActionsSuccessful as test_module
  64. self._run_test(request, workspace, editor, test_module)
  65. @pytest.mark.skip(reason="test needs a way to avoid/dismiss modal save as window.")
  66. def test_ScriptEvent_AddRemoveMethod_UpdatesInSC(self, request, workspace, editor, launcher_platform):
  67. from . import ScriptEvent_AddRemoveMethod_UpdatesInSC as test_module
  68. self._run_test(request, workspace, editor, test_module)
  69. @pytest.mark.skip(reason="a Qt checkbox does not trigger: https://github.com/o3de/o3de/issues/14860")
  70. def test_ScriptEvents_AllParamDatatypes_CreationSuccess(self, request, workspace, editor, launcher_platform):
  71. from . import ScriptEvents_AllParamDatatypes_CreationSuccess as test_module
  72. self._run_test(request, workspace, editor, test_module)
  73. @pytest.mark.REQUIRES_gpu
  74. @pytest.mark.SUITE_periodic
  75. @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
  76. @pytest.mark.parametrize("project", ["AutomatedTesting"])
  77. class TestAutomation(TestAutomationBase):
  78. def test_Pane_HappyPath_OpenCloseSuccessfully(self, request, workspace, editor, launcher_platform):
  79. from . import Pane_HappyPath_OpenCloseSuccessfully as test_module
  80. self._run_test(request, workspace, editor, test_module)
  81. def test_Pane_HappyPath_DocksProperly(self, request, workspace, editor, launcher_platform):
  82. from . import Pane_HappyPath_DocksProperly as test_module
  83. self._run_test(request, workspace, editor, test_module)
  84. def test_Pane_HappyPath_ResizesProperly(self, request, workspace, editor, launcher_platform):
  85. from . import Pane_HappyPath_ResizesProperly as test_module
  86. self._run_test(request, workspace, editor, test_module)
  87. def test_Graph_HappyPath_ZoomInZoomOut(self, request, workspace, editor, launcher_platform):
  88. from . import Graph_HappyPath_ZoomInZoomOut as test_module
  89. self._run_test(request, workspace, editor, test_module)
  90. def test_NodePalette_HappyPath_ClearSelection(self, request, workspace, editor, launcher_platform, project):
  91. from . import NodePalette_HappyPath_ClearSelection as test_module
  92. self._run_test(request, workspace, editor, test_module)
  93. def test_ScriptCanvasTools_Toggle_OpenCloseSuccess(self, request, workspace, editor, launcher_platform):
  94. from . import ScriptCanvasTools_Toggle_OpenCloseSuccess as test_module
  95. self._run_test(request, workspace, editor, test_module)
  96. def test_NodeInspector_HappyPath_VariableRenames(self, request, workspace, editor, launcher_platform, project):
  97. from . import NodeInspector_HappyPath_VariableRenames as test_module
  98. self._run_test(request, workspace, editor, test_module)
  99. def test_Debugger_HappyPath_TargetMultipleGraphs(self, request, workspace, editor, launcher_platform, project):
  100. from . import Debugger_HappyPath_TargetMultipleGraphs as test_module
  101. self._run_test(request, workspace, editor, test_module)
  102. @pytest.mark.skip(reason="Test fails on nightly build builds, it needs to be fixed.")
  103. @pytest.mark.parametrize("level", ["tmp_level"])
  104. def test_Debugger_HappyPath_TargetMultipleEntities(self, request, workspace, editor, launcher_platform, project, level):
  105. def teardown():
  106. file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
  107. request.addfinalizer(teardown)
  108. file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
  109. from . import Debugger_HappyPath_TargetMultipleEntities as test_module
  110. self._run_test(request, workspace, editor, test_module)
  111. def test_Pane_Undocked_ClosesSuccessfully(self, request, workspace, editor, launcher_platform):
  112. from . import Pane_Undocked_ClosesSuccessfully as test_module
  113. self._run_test(request, workspace, editor, test_module)
  114. @pytest.mark.parametrize("level", ["tmp_level"])
  115. def test_Entity_HappyPath_AddScriptCanvasComponent(self, request, workspace, editor, launcher_platform, project, level):
  116. def teardown():
  117. file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
  118. request.addfinalizer(teardown)
  119. file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
  120. from . import Entity_HappyPath_AddScriptCanvasComponent as test_module
  121. self._run_test(request, workspace, editor, test_module)
  122. def test_Pane_Default_RetainOnSCRestart(self, request, workspace, editor, launcher_platform):
  123. from . import Pane_Default_RetainOnSCRestart as test_module
  124. self._run_test(request, workspace, editor, test_module)
  125. # NOTE: We had to use hydra_test_utils.py, as TestAutomationBase run_test method
  126. # fails because of pyside_utils import
  127. @pytest.mark.SUITE_periodic
  128. @pytest.mark.parametrize("launcher_platform", ["windows_editor"])
  129. @pytest.mark.parametrize("project", ["AutomatedTesting"])
  130. class TestScriptCanvasTests(object):
  131. """
  132. The following tests use hydra_test_utils.py to launch the editor and validate the results.
  133. """
  134. @pytest.mark.skipif(ly_test_tools.LINUX, reason="investigate and update https://github.com/o3de/o3de/issues/15553")
  135. def test_NodeCategory_ExpandOnClick(self, request, editor, launcher_platform):
  136. expected_lines = [
  137. "Script Canvas pane successfully opened",
  138. "Category expanded on left click",
  139. "Category collapsed on left click",
  140. "Category expanded on double click",
  141. "Category collapsed on double click",
  142. ]
  143. hydra.launch_and_validate_results(
  144. request,
  145. TEST_DIRECTORY,
  146. editor,
  147. "NodeCategory_ExpandOnClick.py",
  148. expected_lines,
  149. auto_test_mode=False,
  150. timeout=60,
  151. )
  152. def test_Node_HappyPath_DuplicateNode(self, request, editor, launcher_platform):
  153. expected_lines = [
  154. ]
  155. hydra.launch_and_validate_results(
  156. request,
  157. TEST_DIRECTORY,
  158. editor,
  159. "Node_HappyPath_DuplicateNode.py",
  160. expected_lines,
  161. auto_test_mode=False,
  162. timeout=60,
  163. )
  164. def test_FileMenu_Default_NewAndOpen(self, request, editor, launcher_platform):
  165. expected_lines = [
  166. "Verified no tabs open: True",
  167. "New tab opened successfully: True",
  168. "Open file window triggered successfully: True"
  169. ]
  170. hydra.launch_and_validate_results(
  171. request,
  172. TEST_DIRECTORY,
  173. editor,
  174. "FileMenu_Default_NewAndOpen.py",
  175. expected_lines,
  176. auto_test_mode=False,
  177. timeout=60,
  178. )
  179. def test_NewScriptEventButton_HappyPath_ContainsSCCategory(self, request, editor, launcher_platform):
  180. expected_lines = [
  181. "New Script event action found: True",
  182. "Asset Editor opened: True",
  183. "Asset Editor created with new asset: True",
  184. "New Script event created in Asset Editor: True",
  185. ]
  186. hydra.launch_and_validate_results(
  187. request,
  188. TEST_DIRECTORY,
  189. editor,
  190. "NewScriptEventButton_HappyPath_ContainsSCCategory.py",
  191. expected_lines,
  192. auto_test_mode=False,
  193. timeout=60,
  194. )
  195. def test_GraphClose_Default_SavePrompt(self, request, editor, launcher_platform):
  196. expected_lines = [
  197. "New graph created: True",
  198. "Save prompt opened as expected: True",
  199. "Close button worked as expected: True",
  200. ]
  201. hydra.launch_and_validate_results(
  202. request,
  203. TEST_DIRECTORY,
  204. editor,
  205. "GraphClose_Default_SavePrompt.py",
  206. expected_lines,
  207. auto_test_mode=False,
  208. timeout=60,
  209. )
  210. @pytest.mark.xfail(reason="keyboard shortcuts are not behaving properly: https://github.com/o3de/o3de/issues/14802")
  211. def test_VariableManager_Default_CreateDeleteVars(self, request, editor, launcher_platform):
  212. var_types = ["Boolean", "Color", "EntityId", "Number", "String", "Transform", "Vector2", "Vector3", "Vector4"]
  213. expected_lines = [f"{var_type} variable is created: True" for var_type in var_types]
  214. expected_lines.extend([f"{var_type} variable is deleted: True" for var_type in var_types])
  215. hydra.launch_and_validate_results(
  216. request,
  217. TEST_DIRECTORY,
  218. editor,
  219. "VariableManager_Default_CreateDeleteVars.py",
  220. expected_lines,
  221. auto_test_mode=False,
  222. timeout=60,
  223. )
  224. @pytest.mark.parametrize(
  225. "config",
  226. [
  227. {
  228. "cfg_args": "before_restart",
  229. "expected_lines": [
  230. "All the test panes are opened: True",
  231. "Test pane 1 is closed: True",
  232. "Location of test pane 2 changed successfully: True",
  233. "Test pane 3 resized successfully: True",
  234. ],
  235. },
  236. {
  237. "cfg_args": "after_restart",
  238. "expected_lines": [
  239. "Test pane retained its visiblity on Editor restart: True",
  240. "Test pane retained its location on Editor restart: True",
  241. "Test pane retained its size on Editor restart: True",
  242. ],
  243. },
  244. ],
  245. )
  246. def test_Pane_PropertiesChanged_RetainsOnRestart(self, request, editor, config, project, launcher_platform):
  247. hydra.launch_and_validate_results(
  248. request,
  249. TEST_DIRECTORY,
  250. editor,
  251. "Pane_PropertiesChanged_RetainsOnRestart.py",
  252. config.get('expected_lines'),
  253. cfg_args=[config.get('cfg_args')],
  254. auto_test_mode=False,
  255. timeout=60,
  256. )