hydra_AtomEditorComponents_PostFXLayerAdded.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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. class Tests:
  7. postfx_layer_entity_creation = (
  8. "PostFX Layer Entity successfully created",
  9. "P0: PostFX Layer Entity failed to be created")
  10. postfx_layer_component_added = (
  11. "Entity has a PostFX Layer component",
  12. "P0: Entity failed to find PostFX Layer component")
  13. postfx_layer_component_removed = (
  14. "Remove PostFX Layer component success",
  15. "P0: Remove PostFX Layer component failed")
  16. enter_game_mode = (
  17. "Entered game mode",
  18. "P0: Failed to enter game mode")
  19. exit_game_mode = (
  20. "Exited game mode",
  21. "P0: Couldn't exit game mode")
  22. is_visible = (
  23. "P0: Entity is visible",
  24. "Entity was not visible")
  25. is_hidden = (
  26. "Entity is hidden",
  27. "P0: Entity was not hidden")
  28. entity_deleted = (
  29. "Entity deleted",
  30. "P0: Entity was not deleted")
  31. deletion_undo = (
  32. "UNDO deletion success",
  33. "P0: UNDO deletion failed")
  34. deletion_redo = (
  35. "REDO deletion success",
  36. "P0: REDO deletion failed")
  37. priority = (
  38. "'Priority' property set",
  39. "P1: 'Priority' property failed to set")
  40. weight = (
  41. "'Weight' property set",
  42. "P1: 'Weight' property failed to set")
  43. selected_container = (
  44. "'Select Camera Tags Only' is a container property",
  45. "P1: 'Select Camera Tags Only' is not a container property")
  46. selected_append = (
  47. "'Select Camera Tags Only' container property appended string value",
  48. "P1: 'Select Camera Tags Only' container property failed to append string value")
  49. excluded_container = (
  50. "'Excluded Camera Tags' is a container property",
  51. "P1: 'Excluded Camera Tags' is not a container property")
  52. excluded_append = (
  53. "'Excluded Camera Tags' container property appended string value",
  54. "P1: 'Excluded Camera Tags' container property failed to append string value")
  55. def AtomEditorComponents_postfx_layer_AddedToEntity():
  56. """
  57. Summary:
  58. Tests the PostFX Layer component can be added to an entity and has the expected functionality.
  59. Test setup:
  60. - Wait for Editor idle loop.
  61. - Open the "Base" level.
  62. Expected Behavior:
  63. The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components.
  64. Creation and deletion undo/redo should also work.
  65. Test Steps:
  66. 1) Create a PostFX Layer entity with no components.
  67. 2) Add a PostFX Layer component to PostFX Layer entity.
  68. 3) Remove PostFX Layer component.
  69. 4) REDO the entity creation and component addition.
  70. 5) Set each 'Layer Category' value.
  71. 6) Set 'Priority' property.
  72. 7) Set 'Weight' property.
  73. 8) Set a 'Select Camera Tags Only' tag.
  74. 9) Set an 'Excluded Camera Tags' tag.
  75. 10) Enter/Exit game mode.
  76. 11) Test IsHidden.
  77. 12) Test IsVisible.
  78. 13) Delete PostFX Layer entity.
  79. 14) UNDO deletion.
  80. 15) REDO deletion.
  81. 16) Look for errors.
  82. :return: None
  83. """
  84. import azlmbr.legacy.general as general
  85. from editor_python_test_tools.editor_entity_utils import EditorEntity
  86. from editor_python_test_tools.utils import Report, Tracer, TestHelper
  87. from Atom.atom_utils.atom_constants import AtomComponentProperties, POSTFX_LAYER_CATEGORY
  88. with Tracer() as error_tracer:
  89. # Test setup begins.
  90. # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
  91. TestHelper.init_idle()
  92. TestHelper.open_level("Graphics", "base_empty")
  93. # Test steps begin.
  94. # 1. Create a PostFX Layer entity with no components.
  95. postfx_layer_entity = EditorEntity.create_editor_entity(AtomComponentProperties.postfx_layer())
  96. Report.critical_result(Tests.postfx_layer_entity_creation, postfx_layer_entity.exists())
  97. # 2. Add a PostFX Layer component to PostFX Layer entity.
  98. postfx_layer_component = postfx_layer_entity.add_component(AtomComponentProperties.postfx_layer())
  99. Report.critical_result(
  100. Tests.postfx_layer_component_added,
  101. postfx_layer_entity.has_component(AtomComponentProperties.postfx_layer()))
  102. # 3. Remove PostFX Layer component.
  103. postfx_layer_component.remove()
  104. general.idle_wait_frames(1)
  105. Report.result(
  106. Tests.postfx_layer_component_removed,
  107. not postfx_layer_entity.has_component(AtomComponentProperties.postfx_layer()))
  108. # 4. UNDO component removal.
  109. general.undo()
  110. general.idle_wait_frames(1)
  111. Report.critical_result(
  112. Tests.postfx_layer_component_added,
  113. postfx_layer_entity.has_component(AtomComponentProperties.postfx_layer()))
  114. # 5. Set each 'Layer Category' value.
  115. for category in POSTFX_LAYER_CATEGORY:
  116. postfx_layer_component.set_component_property_value(
  117. AtomComponentProperties.postfx_layer('Layer Category'), POSTFX_LAYER_CATEGORY[category])
  118. general.idle_wait_frames(1)
  119. layer_category = (f"'Layer Category' set to {category}", f"P1: 'Layer Category' failed to set {category}")
  120. Report.result(
  121. layer_category,
  122. postfx_layer_component.get_component_property_value(
  123. AtomComponentProperties.postfx_layer('Layer Category')) == POSTFX_LAYER_CATEGORY[category])
  124. # 6. Set 'Priority' property.
  125. postfx_layer_component.set_component_property_value(AtomComponentProperties.postfx_layer('Priority'), 20)
  126. Report.result(
  127. Tests.priority,
  128. postfx_layer_component.get_component_property_value(AtomComponentProperties.postfx_layer('Priority')) == 20)
  129. # 7. Set 'Weight' property.
  130. postfx_layer_component.set_component_property_value(AtomComponentProperties.postfx_layer('Weight'), 0.5)
  131. Report.result(
  132. Tests.weight,
  133. postfx_layer_component.get_component_property_value(AtomComponentProperties.postfx_layer('Weight')) == 0.5)
  134. # 8. Set a 'Select Camera Tags Only' tag.
  135. Report.result(
  136. Tests.selected_container,
  137. postfx_layer_component.is_property_container(
  138. AtomComponentProperties.postfx_layer('Select Camera Tags Only')))
  139. # https://github.com/o3de/o3de/issues/10464
  140. # postfx_layer_component.reset_container(AtomComponentProperties.postfx_layer('Select Camera Tags Only'))
  141. # postfx_layer_component.append_container_item(
  142. # AtomComponentProperties.postfx_layer('Select Camera Tags Only'), value='yes')
  143. # Report.result(
  144. # Tests.selected_append,
  145. # postfx_layer_component.get_container_item(
  146. # AtomComponentProperties.postfx_layer('Select Camera Tags Only'), key=0) == 'yes')
  147. # 9. Set an 'Excluded Camera Tags' tag.
  148. Report.result(
  149. Tests.excluded_container,
  150. postfx_layer_component.is_property_container(
  151. AtomComponentProperties.postfx_layer('Excluded Camera Tags')))
  152. # https://github.com/o3de/o3de/issues/10464
  153. # postfx_layer_component.reset_container(AtomComponentProperties.postfx_layer('Excluded Camera Tags'))
  154. # postfx_layer_component.append_container_item(
  155. # AtomComponentProperties.postfx_layer('Excluded Camera Tags'), 'not this camera')
  156. # Report.result(
  157. # Tests.excluded_append,
  158. # postfx_layer_component.get_container_item(
  159. # AtomComponentProperties.postfx_layer('Excluded Camera Tags'), key=0) == 'not this camera')
  160. # 10. Enter/Exit game mode.
  161. TestHelper.enter_game_mode(Tests.enter_game_mode)
  162. general.idle_wait_frames(1)
  163. TestHelper.exit_game_mode(Tests.exit_game_mode)
  164. # 11. Test IsHidden.
  165. postfx_layer_entity.set_visibility_state(False)
  166. Report.result(Tests.is_hidden, postfx_layer_entity.is_hidden() is True)
  167. # 12. Test IsVisible.
  168. postfx_layer_entity.set_visibility_state(True)
  169. general.idle_wait_frames(1)
  170. Report.result(Tests.is_visible, postfx_layer_entity.is_visible() is True)
  171. # 13. Delete PostFX Layer entity.
  172. postfx_layer_entity.delete()
  173. Report.result(Tests.entity_deleted, not postfx_layer_entity.exists())
  174. # 14. UNDO deletion.
  175. general.undo()
  176. general.idle_wait_frames(1)
  177. Report.result(Tests.deletion_undo, postfx_layer_entity.exists())
  178. # 15. REDO deletion.
  179. general.redo()
  180. general.idle_wait_frames(1)
  181. Report.result(Tests.deletion_redo, not postfx_layer_entity.exists())
  182. # 16. Look for errors or asserts.
  183. TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
  184. for error_info in error_tracer.errors:
  185. Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
  186. for assert_info in error_tracer.asserts:
  187. Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
  188. if __name__ == "__main__":
  189. from editor_python_test_tools.utils import Report
  190. Report.start_test(AtomEditorComponents_postfx_layer_AddedToEntity)