VariableTests.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  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. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <QLineEdit>
  10. #include <QMenu>
  11. #include <QString>
  12. #include <QTableView>
  13. #include <GraphCanvas/Components/Nodes/NodeBus.h>
  14. #include <GraphCanvas/Components/SceneBus.h>
  15. #include <GraphCanvas/Components/Slots/SlotBus.h>
  16. #include <GraphCanvas/Components/VisualBus.h>
  17. #include <GraphCanvas/Utils/ConversionUtils.h>
  18. #include <ScriptCanvas/Bus/RequestBus.h>
  19. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h>
  20. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/EditorKeyActions.h>
  21. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/EditorMouseActions.h>
  22. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/WidgetActions.h>
  23. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/ConnectionActions.h>
  24. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/CreateElementsActions.h>
  25. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/EditorViewActions.h>
  26. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/ElementInteractions.h>
  27. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/GraphActions.h>
  28. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/VariableActions.h>
  29. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/CreateElementsStates.h>
  30. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/EditorViewStates.h>
  31. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/ElementInteractionStates.h>
  32. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/VariableStates.h>
  33. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/UtilityStates.h>
  34. namespace ScriptCanvas::Developer
  35. {
  36. /**
  37. EditorAutmationTest that will create a variable of the specified type using the specified creation type, and optionally give it a name
  38. */
  39. class ManuallyCreateVariableTest
  40. : public EditorAutomationTest
  41. {
  42. public:
  43. ManuallyCreateVariableTest(ScriptCanvas::Data::Type dataType, CreateVariableAction::CreationType creationType, AZStd::string variableName = AZStd::string());
  44. ~ManuallyCreateVariableTest() override = default;
  45. };
  46. /**
  47. EditorautomationTest that will provide a nicer name for the test.
  48. */
  49. class CreateNamedVariableTest
  50. : public ManuallyCreateVariableTest
  51. {
  52. public:
  53. CreateNamedVariableTest(ScriptCanvas::Data::Type dataType, AZStd::string name, CreateVariableAction::CreationType creationType = CreateVariableAction::CreationType::AutoComplete);
  54. ~CreateNamedVariableTest() override = default;
  55. };
  56. /**
  57. EditorautomationTest that will create a two variables with a duplicated name
  58. */
  59. class DuplicateVariableNameTest
  60. : public EditorAutomationTest
  61. {
  62. class CheckVariableForNameMismatchState
  63. : public CustomActionState
  64. {
  65. public:
  66. AZ_CLASS_ALLOCATOR(CheckVariableForNameMismatchState, AZ::SystemAllocator)
  67. CheckVariableForNameMismatchState(AutomationStateModelId nameId, AutomationStateModelId variableId);
  68. ~CheckVariableForNameMismatchState() override = default;
  69. void OnCustomAction() override;
  70. private:
  71. AutomationStateModelId m_nameId;
  72. AutomationStateModelId m_variableId;
  73. };
  74. public:
  75. DuplicateVariableNameTest(ScriptCanvas::Data::Type firstType, ScriptCanvas::Data::Type secondType, AZStd::string variableName);
  76. ~DuplicateVariableNameTest() override = default;
  77. };
  78. // General Helper States for the tests in this file.
  79. namespace EditStringLike
  80. {
  81. class VariableInPaletteState
  82. : public NamedAutomationState
  83. {
  84. public:
  85. AZ_CLASS_ALLOCATOR(VariableInPaletteState, AZ::SystemAllocator)
  86. typedef std::function< AZ::Outcome<void, AZStd::string>(const ScriptCanvas::GraphVariable*)> VariablePaletteValidator;
  87. VariableInPaletteState(AZStd::string value, AutomationStateModelId variableId, VariablePaletteValidator validator);
  88. ~VariableInPaletteState() override = default;
  89. void OnSetupStateActions(EditorAutomationActionRunner& actionRunner) override;
  90. void OnStateActionsComplete() override;
  91. private:
  92. AZStd::string m_stringValue;
  93. AutomationStateModelId m_variableId;
  94. VariablePaletteValidator m_validator;
  95. MouseMoveAction* m_moveToTableRow = nullptr;
  96. MouseClickAction m_clickAction;
  97. ProcessUserEventsAction m_processEvents;
  98. TypeStringAction m_typeStringAction;
  99. TypeCharAction m_typeReturnAction;
  100. };
  101. class ValueInNodeState
  102. : public NamedAutomationState
  103. {
  104. public:
  105. AZ_CLASS_ALLOCATOR(ValueInNodeState, AZ::SystemAllocator)
  106. typedef std::function< AZ::Outcome<void, AZStd::string>(const ScriptCanvas::Datum*)> DatumValidator;
  107. ValueInNodeState(AZStd::string value, AutomationStateModelId endpointId, DatumValidator datumValidator);
  108. ~ValueInNodeState() override = default;
  109. void OnSetupStateActions(EditorAutomationActionRunner& actionRunner) override;
  110. void OnStateActionsComplete() override;
  111. private:
  112. AZStd::string m_stringValue;
  113. AutomationStateModelId m_endpointId;
  114. DatumValidator m_datumValidator;
  115. MouseClickAction m_clickAction;
  116. ProcessUserEventsAction m_processEvents;
  117. TypeStringAction m_typeStringAction;
  118. TypeCharAction m_typeReturnAction;
  119. MouseToNodePropertyEditorAction* m_moveToPropertyAction = nullptr;
  120. };
  121. }
  122. /**
  123. EditorautomationTest that will test out a couple of ways of editing a number[GraphPalette modification, and on-node editing]
  124. */
  125. class ModifyNumericInputTest
  126. : public EditorAutomationTest
  127. {
  128. public:
  129. ModifyNumericInputTest(double value);
  130. ~ModifyNumericInputTest() override = default;
  131. };
  132. /**
  133. EditorautomationTest that will test out a couple of ways of editing a string[GraphPalette modification, an on-node editing]
  134. */
  135. class ModifyStringInputTest
  136. : public EditorAutomationTest
  137. {
  138. public:
  139. ModifyStringInputTest(AZStd::string value);
  140. ~ModifyStringInputTest() override = default;
  141. };
  142. /**
  143. EditorautomationTest that will test out a couple of ways of editing a bool[GraphPalette modification, an on-node editing]
  144. */
  145. class ToggleBoolInputTest
  146. : public EditorAutomationTest
  147. {
  148. enum State
  149. {
  150. CreateGraph,
  151. CreateVariable,
  152. ToggleBoolInPalette,
  153. CreateSetNode,
  154. ToggleBoolInNode,
  155. CloseGraph
  156. };
  157. class ToggleBoolInPaletteState
  158. : public NamedAutomationState
  159. {
  160. public:
  161. AZ_CLASS_ALLOCATOR(ToggleBoolInPaletteState, AZ::SystemAllocator)
  162. ToggleBoolInPaletteState(AutomationStateModelId variableId);
  163. ~ToggleBoolInPaletteState() override = default;
  164. void OnSetupStateActions(EditorAutomationActionRunner& actionRunner) override;
  165. void OnStateActionsComplete() override;
  166. private:
  167. bool m_originalValue = false;
  168. AutomationStateModelId m_variableId;
  169. MouseClickAction* m_interactWithTableAction = nullptr;
  170. ProcessUserEventsAction m_processEvents;
  171. };
  172. class ToggleBoolInNodeState
  173. : public NamedAutomationState
  174. {
  175. public:
  176. AZ_CLASS_ALLOCATOR(ToggleBoolInNodeState, AZ::SystemAllocator)
  177. ToggleBoolInNodeState(AutomationStateModelId endpointId);
  178. ~ToggleBoolInNodeState() override = default;
  179. void OnSetupStateActions(EditorAutomationActionRunner& actionRunner) override;
  180. void OnStateActionsComplete() override;
  181. private:
  182. ScriptCanvas::Endpoint m_scriptCanvasEndpoint;
  183. bool m_originalValue = false;
  184. AutomationStateModelId m_endpointId;
  185. MouseToNodePropertyEditorAction* m_mouseToNodePropertyEditorAction = nullptr;
  186. ProcessUserEventsAction m_processEvents;
  187. MouseClickAction m_clickAction;
  188. };
  189. public:
  190. ToggleBoolInputTest();
  191. ~ToggleBoolInputTest() override = default;
  192. };
  193. /**
  194. EditorautomationTest that takes in a set of variable types to create. For each type it will then create the variable, create a get and set node for that variable. Then clean-up the nodes and delete the variable.
  195. */
  196. class VariableLifeCycleTest
  197. : public EditorAutomationTest
  198. {
  199. public:
  200. AZ_CLASS_ALLOCATOR(VariableLifeCycleTest, AZ::SystemAllocator)
  201. VariableLifeCycleTest(AZStd::string name, AZStd::vector<ScriptCanvas::Data::Type> dataTypes, CreateVariableAction::CreationType creationType = CreateVariableAction::CreationType::AutoComplete);
  202. ~VariableLifeCycleTest() override = default;
  203. void OnTestStarting() override;
  204. protected:
  205. // Custom Transition
  206. int EvaluateTransition(int stateId) override;
  207. ////
  208. private:
  209. int SetupNextVariable();
  210. ScriptCanvas::VariableId m_activeVariableId;
  211. AZStd::vector<CreateVariableAction*> m_createVariables;
  212. AZStd::vector<ScriptCanvas::Data::Type> m_typesToMake;
  213. bool m_createVariablesNodesViaContextMenu = true;
  214. int m_activeIndex = 0;
  215. GraphCanvas::ViewId m_viewId;
  216. GraphCanvas::GraphId m_graphId;
  217. ScriptCanvas::ScriptCanvasId m_scriptCanvasId;
  218. AutomationStateModelId m_variableTypeId;
  219. AutomationStateModelId m_variableId;
  220. AutomationStateModelId m_viewCenter;
  221. AutomationStateModelId m_offsetCenter;
  222. FindViewCenterState* m_findViewCenterState;
  223. CreateVariableState* m_createVariableState;
  224. CreateVariableNodeFromGraphPaletteState* m_dragCreateGetNode = nullptr;
  225. CreateVariableNodeFromGraphPaletteState* m_dragCreateSetNode = nullptr;
  226. CreateNodeFromContextMenuState* m_createGetNode = nullptr;
  227. CreateNodeFromContextMenuState* m_createSetNode = nullptr;
  228. AltClickSceneElementState* m_destroyGetNode = nullptr;
  229. AltClickSceneElementState* m_destroySetNode = nullptr;
  230. DeleteVariableRowFromPaletteState* m_deleteVariableRowState = nullptr;
  231. };
  232. /**
  233. EditorautomationTest that will create every variable type(including all variations of containers) and then delete them all.
  234. */
  235. class RapidVariableCreationDeletionTest
  236. : public EditorAutomationTest
  237. {
  238. public:
  239. AZ_CLASS_ALLOCATOR(RapidVariableCreationDeletionTest, AZ::SystemAllocator)
  240. RapidVariableCreationDeletionTest();
  241. ~RapidVariableCreationDeletionTest() override = default;
  242. void OnTestStarting() override;
  243. // Custom Transition
  244. int EvaluateTransition(int stateId) override;
  245. ////
  246. private:
  247. int SetupNextVariable();
  248. private:
  249. QTableView* m_graphPalette = nullptr;
  250. int m_activeIndex = 0;
  251. AZStd::vector< ScriptCanvas::Data::Type > m_variableTypes;
  252. AutomationStateModelId m_variableType;
  253. CreateVariableState* m_createVariableState = nullptr;
  254. DeleteVariableRowFromPaletteState* m_deleteVariableRowState = nullptr;
  255. ShowGraphVariablesAction m_showGraphVariableAction;
  256. };
  257. }