3
0

ScriptCanvasUnitTest_EventHandlerTranslationUtility.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 <Tests/Framework/ScriptCanvasUnitTestFixture.h>
  9. #include <ScriptCanvas/Libraries/Core/EventHandlerTranslationUtility.h>
  10. namespace ScriptCanvasUnitTest
  11. {
  12. using namespace ScriptCanvas;
  13. class ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture
  14. : public ScriptCanvasUnitTestFixture
  15. {
  16. protected:
  17. Nodes::Core::ReceiveScriptEvent* m_receiveScriptEvent;
  18. Nodes::Core::Internal::ScriptEventEntry* m_eventEntry;
  19. void SetUp() override
  20. {
  21. ScriptCanvasUnitTestFixture::SetUp();
  22. m_receiveScriptEvent = new Nodes::Core::ReceiveScriptEvent();
  23. m_eventEntry = new Nodes::Core::Internal::ScriptEventEntry();
  24. };
  25. void TearDown() override
  26. {
  27. delete m_eventEntry;
  28. delete m_receiveScriptEvent;
  29. ScriptCanvasUnitTestFixture::TearDown();
  30. };
  31. };
  32. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetEmptyOutcome_WhenEventEntryHasNoResult)
  33. {
  34. // event without result
  35. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnEvent", ConnectionType::Output));
  36. m_eventEntry->m_eventSlotId = m_receiveScriptEvent->GetSlotByName("OnEvent")->GetId();
  37. m_receiveScriptEvent->m_eventMap.emplace(AZ::Crc32("OnEvent"), *m_eventEntry);
  38. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("OnEvent"), CombinedSlotType::DataIn);
  39. EXPECT_TRUE(outcome.IsSuccess());
  40. EXPECT_EQ(0, outcome.GetValue().size());
  41. }
  42. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetSuccessOutcome_WhenEventEntryHasOneResult)
  43. {
  44. // event with one result
  45. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnEvent", ConnectionType::Output));
  46. m_receiveScriptEvent->AddSlot(DataSlotConfiguration(Data::Type::Boolean(), "Result:Boolean", ConnectionType::Input));
  47. m_eventEntry->m_eventSlotId = m_receiveScriptEvent->GetSlotByName("OnEvent")->GetId();
  48. m_eventEntry->m_resultSlotId = m_receiveScriptEvent->GetSlotByName("Result:Boolean")->GetId();
  49. m_receiveScriptEvent->m_eventMap.emplace(AZ::Crc32("OnEvent"), *m_eventEntry);
  50. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("OnEvent"), CombinedSlotType::DataIn);
  51. EXPECT_TRUE(outcome.IsSuccess());
  52. EXPECT_EQ(1, outcome.GetValue().size());
  53. }
  54. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetEmptyOutcome_WhenEventEntryHasNoParameter)
  55. {
  56. // event without parameter
  57. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnEvent", ConnectionType::Output));
  58. m_eventEntry->m_eventSlotId = m_receiveScriptEvent->GetSlotByName("OnEvent")->GetId();
  59. m_receiveScriptEvent->m_eventMap.emplace(AZ::Crc32("OnEvent"), *m_eventEntry);
  60. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("OnEvent"), CombinedSlotType::DataOut);
  61. EXPECT_TRUE(outcome.IsSuccess());
  62. EXPECT_EQ(0, outcome.GetValue().size());
  63. }
  64. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetSuccessOutcome_WhenEventEntryHasOneParameter)
  65. {
  66. // event with one parameter
  67. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnEvent", ConnectionType::Output));
  68. m_receiveScriptEvent->AddSlot(DataSlotConfiguration(Data::Type::Boolean(), "BooleanParameter", ConnectionType::Output));
  69. m_eventEntry->m_eventSlotId = m_receiveScriptEvent->GetSlotByName("OnEvent")->GetId();
  70. m_eventEntry->m_parameterSlotIds.emplace_back(m_receiveScriptEvent->GetSlotByName("BooleanParameter")->GetId());
  71. m_receiveScriptEvent->m_eventMap.emplace(AZ::Crc32("OnEvent"), *m_eventEntry);
  72. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("OnEvent"), CombinedSlotType::DataOut);
  73. EXPECT_TRUE(outcome.IsSuccess());
  74. EXPECT_EQ(1, outcome.GetValue().size());
  75. }
  76. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetEmptyOutcome_WhenExecutionInSlotIsNotAddressed)
  77. {
  78. // execution in slot (default not addressed)
  79. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("In", ConnectionType::Input));
  80. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("In"), CombinedSlotType::DataIn);
  81. EXPECT_TRUE(outcome.IsSuccess());
  82. EXPECT_EQ(0, outcome.GetValue().size());
  83. }
  84. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetSuccessOutcome_WhenConnectSlotMapsToOnConnectedSlot)
  85. {
  86. // Connect slot -> OnConnected slot
  87. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("Connect", ConnectionType::Input));
  88. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnConnected", ConnectionType::Output));
  89. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("Connect"), CombinedSlotType::ExecutionOut);
  90. EXPECT_TRUE(outcome.IsSuccess());
  91. EXPECT_EQ(1, outcome.GetValue().size());
  92. }
  93. TEST_F(ScriptCanvasEventHandlerTranslationUtilityUnitTestFixture, GetSlotsInExecutionThreadByType_GetSuccessOutcome_WhenDisconnectSlotMapsToOnDisconnectedSlot)
  94. {
  95. // Disconnect slot -> OnDisconnected slot
  96. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("Disconnect", ConnectionType::Input));
  97. m_receiveScriptEvent->AddSlot(ExecutionSlotConfiguration("OnDisconnected", ConnectionType::Output));
  98. auto outcome = Nodes::Core::EventHandlerTranslationHelper::GetSlotsInExecutionThreadByType(*m_receiveScriptEvent, *m_receiveScriptEvent->GetSlotByName("Disconnect"), CombinedSlotType::ExecutionOut);
  99. EXPECT_TRUE(outcome.IsSuccess());
  100. EXPECT_EQ(1, outcome.GetValue().size());
  101. }
  102. }