3
0

hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  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_gradient_weight_creation = (
  8. "PostFX Gradient Weight Modifier Entity successfully created",
  9. "P0: PostFX Gradient Weight Modifier Entity failed to be created")
  10. postfx_gradient_weight_component = (
  11. "Entity has a PostFX Gradient Weight Modifier component",
  12. "P0: Entity failed to find PostFX Gradient Weight Modifier component")
  13. postfx_gradient_weight_component_removed = (
  14. "Entity has a PostFX Gradient Weight Modifier component",
  15. "P0: Entity failed to find PostFX Gradient Weight Modifier component")
  16. postfx_gradient_weight_disabled = (
  17. "PostFX Gradient Weight Modifier component disabled",
  18. "P0: PostFX Gradient Weight Modifier component was not disabled.")
  19. postfx_layer_component = (
  20. "Entity has a PostFX Layer component",
  21. "P0: Entity did not have an PostFX Layer component")
  22. postfx_gradient_weight_enabled = (
  23. "PostFX Gradient Weight Modifier component enabled",
  24. "P0: PostFX Gradient Weight Modifier component was not enabled.")
  25. enter_game_mode = (
  26. "Entered game mode",
  27. "P0: Failed to enter game mode")
  28. exit_game_mode = (
  29. "Exited game mode",
  30. "P0: Couldn't exit game mode")
  31. is_visible = (
  32. "Entity is visible",
  33. "P0: Entity was not visible")
  34. is_hidden = (
  35. "Entity is hidden",
  36. "P0: Entity was not hidden")
  37. entity_deleted = (
  38. "Entity deleted",
  39. "P0: Entity was not deleted")
  40. deletion_undo = (
  41. "UNDO deletion success",
  42. "P0: UNDO deletion failed")
  43. deletion_redo = (
  44. "REDO deletion success",
  45. "P0: REDO deletion failed")
  46. gradient_entity_id = (
  47. "Gradient Entity Id property set",
  48. "P1: 'Gradient Entity Id' property failed to set")
  49. opacity = (
  50. "Opacity property set",
  51. "P1: 'Opacity' property failed to set")
  52. invert_input = (
  53. "Invert Input property set",
  54. "P1: 'Invert Input' property failed to set")
  55. enable_levels = (
  56. "Enable Levels property set",
  57. "P1: 'Enable Levels' property failed to set")
  58. input_max = (
  59. "Input Max property set",
  60. "P1: 'Input Max' property failed to set")
  61. input_min = (
  62. "Input Min property set",
  63. "P1: 'Input Min' property failed to set")
  64. input_mid = (
  65. "Input Mid property set",
  66. "P1: 'Input Mid' property failed to set")
  67. output_max = (
  68. "Output Max property set",
  69. "P1: 'Output Max' property failed to set")
  70. output_min = (
  71. "Output Min property set",
  72. "P1: 'Output Min' property failed to set")
  73. enable_transform = (
  74. "Enable Transform property set",
  75. "P1: 'Enable Transform' property failed to set")
  76. scale = (
  77. "Scale property set",
  78. "P1: 'Scale' property failed to set")
  79. rotate = (
  80. "Rotate property set",
  81. "P1: 'Rotate' property failed to set")
  82. translate = (
  83. "Translate property set",
  84. "P1: 'Translate' property failed to set")
  85. def AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity():
  86. """
  87. Summary:
  88. Tests the PostFX Gradient Weight Modifier component can be added to an entity and has the expected functionality.
  89. Test setup:
  90. - Wait for Editor idle loop.
  91. - Open the "Base" level.
  92. Expected Behavior:
  93. The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components.
  94. Creation and deletion undo/redo should also work.
  95. Test Steps:
  96. 1) Create a PostFX Gradient Weight Modifier entity with no components.
  97. 2) Add a PostFX Gradient Weight Modifier component to PostFX Gradient Weight Modifier entity.
  98. 3) Remove PostFX Gradient Weight Modifier component.
  99. 4) UNDO component removal.
  100. 5) Verify PostFX Gradient Weight Modifier component not enabled.
  101. 6) Add PostFX Layer component since it is required by the PostFX Gradient Weight Modifier component.
  102. 7) Verify PostFX Gradient Weight Modifier component is enabled.
  103. 8) Set 'Gradient Entity Id' property
  104. 9) Set 'Opacity' property
  105. 10) Toggle 'Invert Input' property
  106. 11) Toggle 'Enable Levels' property
  107. 12) Set 'Input Max' property
  108. 13) Set 'Input Min' property
  109. 14) Set 'Input Mid' property
  110. 15) Set 'Output Max' property
  111. 16) Set 'Output Min' property
  112. 17) Toggle 'Enable Transform' property
  113. 18) Set 'Scale' property
  114. 19) Set 'Rotate' property
  115. 20) Set 'Translate' property
  116. 21) Enter/Exit game mode.
  117. 22) Test IsHidden.
  118. 23) Test IsVisible.
  119. 24) Delete PostFX Gradient Weight Modifier entity.
  120. 25) UNDO deletion.
  121. 26) REDO deletion.
  122. 27) Look for errors.
  123. :return: None
  124. """
  125. import azlmbr.legacy.general as general
  126. from azlmbr.math import Vector3, Math_IsClose
  127. from editor_python_test_tools.editor_entity_utils import EditorEntity
  128. from editor_python_test_tools.utils import Report, Tracer, TestHelper
  129. from Atom.atom_utils.atom_constants import AtomComponentProperties
  130. with Tracer() as error_tracer:
  131. # Test setup begins.
  132. # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
  133. TestHelper.init_idle()
  134. TestHelper.open_level("Graphics", "base_empty")
  135. # Test steps begin.
  136. # 1. Create a PostFX Gradient Weight Modifier entity with no components.
  137. postfx_gradient_weight_entity = EditorEntity.create_editor_entity(AtomComponentProperties.postfx_gradient())
  138. Report.critical_result(Tests.postfx_gradient_weight_creation, postfx_gradient_weight_entity.exists())
  139. # 2. Add a PostFX Gradient Weight Modifier component to PostFX Gradient Weight Modifier entity.
  140. postfx_gradient_weight_component = postfx_gradient_weight_entity.add_component(
  141. AtomComponentProperties.postfx_gradient())
  142. Report.critical_result(
  143. Tests.postfx_gradient_weight_component,
  144. postfx_gradient_weight_entity.has_component(AtomComponentProperties.postfx_gradient()))
  145. # 3. Remove PostFX Gradient Weight Modifier component.
  146. postfx_gradient_weight_component.remove()
  147. general.idle_wait_frames(1)
  148. Report.critical_result(
  149. Tests.postfx_gradient_weight_component_removed,
  150. not postfx_gradient_weight_entity.has_component(AtomComponentProperties.postfx_gradient()))
  151. # 4. UNDO component removal.
  152. general.undo()
  153. general.idle_wait_frames(1)
  154. Report.critical_result(
  155. Tests.postfx_gradient_weight_component,
  156. postfx_gradient_weight_entity.has_component(AtomComponentProperties.postfx_gradient()))
  157. # 5. Verify PostFX Gradient Weight Modifier component not enabled.
  158. Report.result(Tests.postfx_gradient_weight_disabled, not postfx_gradient_weight_component.is_enabled())
  159. # 6. Add PostFX Layer component since it is required by the PostFX Gradient Weight Modifier component.
  160. postfx_gradient_weight_entity.add_component(AtomComponentProperties.postfx_layer())
  161. Report.result(
  162. Tests.postfx_layer_component,
  163. postfx_gradient_weight_entity.has_component(AtomComponentProperties.postfx_layer()))
  164. # 7. Verify PostFX Gradient Weight Modifier component is enabled.
  165. Report.result(Tests.postfx_gradient_weight_enabled, postfx_gradient_weight_component.is_enabled())
  166. # 8. Set 'Gradient Entity Id' property
  167. gradient_entity = EditorEntity.create_editor_entity('Gradient Entity')
  168. gradient_entity.add_components(['FastNoise Gradient', 'Gradient Transform Modifier', 'Box Shape'])
  169. postfx_gradient_weight_component.set_component_property_value(
  170. AtomComponentProperties.postfx_gradient('Gradient Entity Id'), gradient_entity.id)
  171. Report.result(
  172. Tests.gradient_entity_id,
  173. postfx_gradient_weight_component.get_component_property_value(
  174. AtomComponentProperties.postfx_gradient('Gradient Entity Id')) == gradient_entity.id)
  175. # 9. Set 'Opacity' property
  176. postfx_gradient_weight_component.set_component_property_value(
  177. AtomComponentProperties.postfx_gradient('Opacity'), 0.9)
  178. Report.result(
  179. Tests.opacity,
  180. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  181. AtomComponentProperties.postfx_gradient('Opacity')), 0.9))
  182. # 10. Toggle 'Invert Input' property
  183. postfx_gradient_weight_component.set_component_property_value(
  184. AtomComponentProperties.postfx_gradient('Invert Input'), True)
  185. Report.result(
  186. Tests.invert_input,
  187. postfx_gradient_weight_component.get_component_property_value(
  188. AtomComponentProperties.postfx_gradient('Invert Input')) is True)
  189. postfx_gradient_weight_component.set_component_property_value(
  190. AtomComponentProperties.postfx_gradient('Invert Input'), False)
  191. Report.result(
  192. Tests.invert_input,
  193. postfx_gradient_weight_component.get_component_property_value(
  194. AtomComponentProperties.postfx_gradient('Invert Input')) is False)
  195. # 11. Toggle 'Enable Levels' property
  196. postfx_gradient_weight_component.set_component_property_value(
  197. AtomComponentProperties.postfx_gradient('Enable Levels'), True)
  198. Report.result(
  199. Tests.enable_levels,
  200. postfx_gradient_weight_component.get_component_property_value(
  201. AtomComponentProperties.postfx_gradient('Enable Levels')) is True)
  202. # 12. Set 'Input Max' property
  203. postfx_gradient_weight_component.set_component_property_value(
  204. AtomComponentProperties.postfx_gradient('Input Max'), 0.9)
  205. Report.result(
  206. Tests.input_max,
  207. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  208. AtomComponentProperties.postfx_gradient('Input Max')), 0.9))
  209. # 13. Set 'Input Min' property
  210. postfx_gradient_weight_component.set_component_property_value(
  211. AtomComponentProperties.postfx_gradient('Input Min'), 0.1)
  212. Report.result(
  213. Tests.input_min,
  214. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  215. AtomComponentProperties.postfx_gradient('Input Min')), 0.1))
  216. # 14. Set 'Input Mid' property
  217. postfx_gradient_weight_component.set_component_property_value(
  218. AtomComponentProperties.postfx_gradient('Input Mid'), 2.0)
  219. Report.result(
  220. Tests.input_mid,
  221. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  222. AtomComponentProperties.postfx_gradient('Input Mid')), 2.0))
  223. # 15. Set 'Output Max' property
  224. postfx_gradient_weight_component.set_component_property_value(
  225. AtomComponentProperties.postfx_gradient('Output Max'), 0.9)
  226. Report.result(
  227. Tests.output_max,
  228. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  229. AtomComponentProperties.postfx_gradient('Output Max')), 0.9))
  230. # 16. Set 'Output Min' property
  231. postfx_gradient_weight_component.set_component_property_value(
  232. AtomComponentProperties.postfx_gradient('Output Min'), 0.1)
  233. Report.result(
  234. Tests.output_min,
  235. Math_IsClose(postfx_gradient_weight_component.get_component_property_value(
  236. AtomComponentProperties.postfx_gradient('Output Min')), 0.1))
  237. # 17. Toggle 'Enable Transform' property
  238. postfx_gradient_weight_component.set_component_property_value(
  239. AtomComponentProperties.postfx_gradient('Enable Transform'), True)
  240. Report.result(
  241. Tests.enable_transform,
  242. postfx_gradient_weight_component.get_component_property_value(
  243. AtomComponentProperties.postfx_gradient('Enable Transform')) is True)
  244. # 18. Set 'Scale' property
  245. x2 = Vector3(2.0, 2.0, 2.0)
  246. postfx_gradient_weight_component.set_component_property_value(
  247. AtomComponentProperties.postfx_gradient('Scale'), x2)
  248. Report.result(
  249. Tests.scale,
  250. postfx_gradient_weight_component.get_component_property_value(
  251. AtomComponentProperties.postfx_gradient('Scale')) == x2)
  252. # 19. Set 'Rotate' property
  253. rotation = Vector3(5.0, 5.0, 5.0)
  254. postfx_gradient_weight_component.set_component_property_value(
  255. AtomComponentProperties.postfx_gradient('Rotate'), rotation)
  256. Report.result(
  257. Tests.rotate,
  258. postfx_gradient_weight_component.get_component_property_value(
  259. AtomComponentProperties.postfx_gradient('Rotate')) == rotation)
  260. # 20. Set 'Translate' property
  261. translation = Vector3(1.0, 1.0, 0.0)
  262. postfx_gradient_weight_component.set_component_property_value(
  263. AtomComponentProperties.postfx_gradient('Translate'), translation)
  264. Report.result(
  265. Tests.translate,
  266. postfx_gradient_weight_component.get_component_property_value(
  267. AtomComponentProperties.postfx_gradient('Translate')) == translation)
  268. # 21. Enter/Exit game mode.
  269. TestHelper.enter_game_mode(Tests.enter_game_mode)
  270. general.idle_wait_frames(1)
  271. TestHelper.exit_game_mode(Tests.exit_game_mode)
  272. # 22. Test IsHidden.
  273. postfx_gradient_weight_entity.set_visibility_state(False)
  274. Report.result(Tests.is_hidden, postfx_gradient_weight_entity.is_hidden() is True)
  275. # 23. Test IsVisible.
  276. postfx_gradient_weight_entity.set_visibility_state(True)
  277. general.idle_wait_frames(1)
  278. Report.result(Tests.is_visible, postfx_gradient_weight_entity.is_visible() is True)
  279. # 24. Delete PostFX Gradient Weight Modifier entity.
  280. postfx_gradient_weight_entity.delete()
  281. Report.result(Tests.entity_deleted, not postfx_gradient_weight_entity.exists())
  282. # 25. UNDO deletion.
  283. general.undo()
  284. general.idle_wait_frames(1)
  285. Report.result(Tests.deletion_undo, postfx_gradient_weight_entity.exists())
  286. # 26. REDO deletion.
  287. general.redo()
  288. general.idle_wait_frames(1)
  289. Report.result(Tests.deletion_redo, not postfx_gradient_weight_entity.exists())
  290. # 27. Look for errors or asserts.
  291. TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
  292. for error_info in error_tracer.errors:
  293. Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
  294. for assert_info in error_tracer.asserts:
  295. Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
  296. if __name__ == "__main__":
  297. from editor_python_test_tools.utils import Report
  298. Report.start_test(AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity)