GroupTests.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. #include <qpushbutton.h>
  9. #include <GraphCanvas/Components/GridBus.h>
  10. #include <GraphCanvas/Components/Nodes/Group/NodeGroupBus.h>
  11. #include <EditorAutomationTests/GroupTests.h>
  12. #include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
  13. #include <ScriptCanvas/GraphCanvas/MappingBus.h>
  14. #include <ScriptCanvas/Core/Node.h>
  15. #include <ScriptCanvas/Core/NodeBus.h>
  16. #include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
  17. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationActions/ScriptCanvasActions/ElementInteractions.h>
  18. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/CreateElementsStates.h>
  19. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/EditorViewStates.h>
  20. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/GraphStates.h>
  21. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationStates/UtilityStates.h>
  22. namespace ScriptCanvas::Developer
  23. {
  24. ////////////////////
  25. // CreateGroupTest
  26. ////////////////////
  27. CreateGroupTest::CreateGroupTest(CreateGroupAction::CreationType creationType)
  28. : EditorAutomationTest(creationType == CreateGroupAction::CreationType::Hotkey ? "Create Group Test" : "Create Group Test With Toolbar")
  29. {
  30. AddState(new CreateRuntimeGraphState());
  31. AddState(new CreateGroupState(ScriptCanvasEditor::AssetEditorId, creationType));
  32. AddState(new ForceCloseActiveGraphState());
  33. }
  34. //////////////////////////
  35. // GroupManipulationTest
  36. //////////////////////////
  37. GroupManipulationTest::OffsetPositionByNodeDimension::OffsetPositionByNodeDimension(float horizontalDimension, float verticalDimension, AutomationStateModelId nodeId, AutomationStateModelId positionId)
  38. : CustomActionState("OffsetPositionByNodeDimension")
  39. , m_horizontalDimension(horizontalDimension)
  40. , m_verticalDimension(verticalDimension)
  41. , m_nodeId(nodeId)
  42. , m_positionId(positionId)
  43. {
  44. SetStateName(AZStd::string::format("OffsetPosition::%s::ByNodeDimension::%s", m_positionId.c_str(), m_nodeId.c_str()));
  45. }
  46. void GroupManipulationTest::OffsetPositionByNodeDimension::OnCustomAction()
  47. {
  48. const AZ::EntityId* nodeId = GetStateModel()->GetStateDataAs<AZ::EntityId>(m_nodeId);
  49. const AZ::Vector2* position = GetStateModel()->GetStateDataAs<AZ::Vector2>(m_positionId);
  50. if (nodeId && position)
  51. {
  52. QGraphicsItem* nodeItem = nullptr;
  53. GraphCanvas::VisualRequestBus::EventResult(nodeItem, (*nodeId), &GraphCanvas::VisualRequests::AsGraphicsItem);
  54. if (nodeItem)
  55. {
  56. AZ::Vector2 modifiedValue = (*position);
  57. QRectF sceneBoundingBox = nodeItem->sceneBoundingRect();
  58. modifiedValue.SetX(position->GetX() + static_cast<float>(sceneBoundingBox.width()) * m_horizontalDimension);
  59. modifiedValue.SetY(position->GetY() + static_cast<float>(sceneBoundingBox.height()) * m_verticalDimension);
  60. GetStateModel()->SetStateData(m_positionId, modifiedValue);
  61. }
  62. }
  63. else
  64. {
  65. if (nodeId == nullptr)
  66. {
  67. ReportError(AZStd::string::format("%s is not a valid EntityId", m_nodeId.c_str()));
  68. }
  69. if (position == nullptr)
  70. {
  71. ReportError(AZStd::string::format("%s is not a valid Vector2", m_positionId.c_str()));
  72. }
  73. }
  74. }
  75. GroupManipulationTest::GroupManipulationTest(GraphCanvas::NodePaletteWidget* nodePaletteWidget)
  76. : EditorAutomationTest("Group Manipulation Test")
  77. {
  78. AddState(new CreateRuntimeGraphState());
  79. AutomationStateModelId groupId = "GroupId";
  80. AddState(new CreateGroupState(ScriptCanvasEditor::AssetEditorId, CreateGroupAction::CreationType::Hotkey, groupId));
  81. AutomationStateModelId groupCenter = "GroupCenter";
  82. {
  83. FindPositionOffsets groupOffsets;
  84. groupOffsets.m_horizontalPosition = 0.5f;
  85. groupOffsets.m_verticalPosition = 0.5f;
  86. AddState(new FindGroupPosition(groupId, groupCenter, groupOffsets));
  87. }
  88. AutomationStateModelId buildStringNode = "BuildStringNode";
  89. AddState(new CreateNodeFromContextMenuState("Build String", CreateNodeFromContextMenuState::CreationType::ScenePosition, groupCenter, buildStringNode));
  90. AddState(new CheckIsInGroup(buildStringNode, groupId, true, "CheckGroupStatus::ContextMenuCreation"));
  91. AutomationStateModelId moveOutSceneDragStart = "MoveOutSceneDragStart";
  92. AutomationStateModelId moveOutSceneDragEnd = "MoveOutSceneDragEnd";
  93. {
  94. FindPositionOffsets nodeOffsets;
  95. nodeOffsets.m_horizontalPosition = 0.5f;
  96. nodeOffsets.m_verticalPosition = 0.0f;
  97. nodeOffsets.m_verticalOffset = 10;
  98. AddState(new FindNodePosition(buildStringNode, moveOutSceneDragStart, nodeOffsets));
  99. AddState(new FindNodePosition(buildStringNode, moveOutSceneDragEnd, nodeOffsets));
  100. }
  101. AddState(new OffsetPositionByNodeDimension(1.0f, 0.0f, groupId, moveOutSceneDragEnd));
  102. AddState(new OffsetPositionByNodeDimension(1.0f, 0.0f, buildStringNode, moveOutSceneDragEnd));
  103. AddState(new SceneMouseDragState(moveOutSceneDragStart, moveOutSceneDragEnd));
  104. AddState(new CheckIsInGroup(buildStringNode, groupId, false, "CheckGroupStatus::DragOutOfGroup"));
  105. AutomationStateModelId envelopDragStart = "EnvelopDragStart";
  106. AutomationStateModelId envelopDragEnd = "EnvelopDragEnd";
  107. {
  108. FindPositionOffsets groupOffsets;
  109. groupOffsets.m_horizontalPosition = 1.0f;
  110. groupOffsets.m_horizontalOffset = -5;
  111. groupOffsets.m_verticalPosition = 0.5f;
  112. AddState(new FindGroupPosition(groupId, envelopDragStart, groupOffsets));
  113. AddState(new FindGroupPosition(groupId, envelopDragEnd, groupOffsets));
  114. }
  115. AddState(new OffsetPositionByNodeDimension(1.0f, 0.0f, groupId, envelopDragEnd));
  116. AddState(new OffsetPositionByNodeDimension(1.0f, 0.0f, buildStringNode, envelopDragEnd));
  117. AddState(new SceneMouseDragState(envelopDragStart, envelopDragEnd));
  118. AddState(new CheckIsInGroup(buildStringNode, groupId, true, "CheckGroupStatus::ResizeToInclude"));
  119. AddState(new SceneMouseDragState(envelopDragEnd, envelopDragStart));
  120. AddState(new CheckIsInGroup(buildStringNode, groupId, false, "CheckGroupStatus::ResizeToExclude"));
  121. AddState(new SceneMouseDragState(moveOutSceneDragEnd, moveOutSceneDragStart));
  122. AddState(new CheckIsInGroup(buildStringNode, groupId, true, "CheckGroupStatus::DragIntoGroup"));
  123. AutomationStateModelId proposalEndpoint = "ProposalEndpoint";
  124. AddState(new FindEndpointOfTypeState(buildStringNode, proposalEndpoint, GraphCanvas::ConnectionType::CT_Output, GraphCanvas::SlotTypes::ExecutionSlot));
  125. AutomationStateModelId printNode = "PrintNode";
  126. AddState(new CreateNodeFromProposalState("Print", proposalEndpoint, envelopDragStart, printNode));
  127. AddState(new CheckIsInGroup(printNode, groupId, true, "CheckGroupStatus::PoposalCreation"));
  128. AutomationStateModelId onGraphStartNode = "OnGraphStartNode";
  129. AddState(new CreateNodeFromPaletteState(nodePaletteWidget, "On Graph Start", CreateNodeFromPaletteState::CreationType::ScenePosition, groupCenter, onGraphStartNode));
  130. AddState(new CheckIsInGroup(onGraphStartNode, groupId, true, "CheckGroupStatus::PaletteDrop"));
  131. AddState(new ForceCloseActiveGraphState());
  132. }
  133. }