Files
o3de/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_Graphs.cpp
T
2021-03-08 14:30:57 -08:00

1022 lines
43 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright EntityRef license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include "precompiled.h"
#include <Tests/ScriptCanvasTestFixture.h>
using namespace ScriptCanvasTests;
TEST_F(ScriptCanvasTestFixture, StringOperations)
{
RETURN_IF_TEST_BODIES_ARE_DISABLED(TEST_BODY_DEFAULT);
using namespace ScriptCanvas;
// Make the graph.
Graph* graph = nullptr;
SystemRequestBus::BroadcastResult(graph, &SystemRequests::MakeGraph);
EXPECT_TRUE(graph != nullptr);
graph->GetEntity()->Init();
const AZ::EntityId& graphEntityId = graph->GetEntityId();
const AZ::EntityId& graphUniqueId = graph->GetUniqueId();
// Make the nodes.
// Start
AZ::Entity* startEntity{ aznew AZ::Entity };
startEntity->Init();
AZ::EntityId startNodeID{ startEntity->GetId() };
SystemRequestBus::Broadcast(&SystemRequests::CreateNodeOnEntity, startNodeID, graphUniqueId, Nodes::Core::Start::TYPEINFO_Uuid());
AZ::Uuid typeID = azrtti_typeid<AZStd::string>();
const AZStd::string string0("abcd");
AZ::EntityId string0NodeID;
auto string0NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string0NodeID);
string0NodePtr->SetInput_UNIT_TEST("Set", string0);
// String 1
const AZStd::string string1("ef");
AZ::EntityId string1NodeID;
auto string1NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string1NodeID);
string1NodePtr->SetInput_UNIT_TEST("Set", string1);
// String 2
const AZStd::string string2(" abcd");
AZ::EntityId string2NodeID;
auto string2NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string2NodeID);
string2NodePtr->SetInput_UNIT_TEST("Set", string2);
// String 3
const AZStd::string string3("abcd ");
AZ::EntityId string3NodeID;
auto string3NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string3NodeID);
string3NodePtr->SetInput_UNIT_TEST("Set", string3);
// String 4
const AZStd::string string4("abcd/ef/ghi");
AZ::EntityId string4NodeID;
auto string4NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string4NodeID);
string4NodePtr->SetInput_UNIT_TEST("Set", string4);
// String 5
const AZStd::string string5("ab");
AZ::EntityId string5NodeID;
auto string5NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string5NodeID);
string5NodePtr->SetInput_UNIT_TEST("Set", string5);
// String 6
const AZStd::string string6("ABCD");
AZ::EntityId string6NodeID;
auto string6NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string6NodeID);
string6NodePtr->SetInput_UNIT_TEST("Set", string6);
// String 7
const AZStd::string string7("/");
AZ::EntityId string7NodeID;
auto string7NodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, string7NodeID);
string7NodePtr->SetInput_UNIT_TEST("Set", string7);
//Int 0
AZ::EntityId int0NodeID;
auto int0NodePtr = CreateTestNode<ScriptCanvas::Nodes::Math::Number>(graphUniqueId, int0NodeID);
int0NodePtr->SetInput_UNIT_TEST("Set", 0);
// Int 1
AZ::EntityId int1NodeID;
auto int1NodePtr = CreateTestNode<ScriptCanvas::Nodes::Math::Number>(graphUniqueId, int1NodeID);
int1NodePtr->SetInput_UNIT_TEST("Set", 2);
// Vector 0
const AZStd::vector<AZStd::string> vector0({ AZStd::string("abcd"), AZStd::string("ef") });
AZ::EntityId vector0NodeID;
auto vector0NodePtr = CreateTestObjectNode(graphUniqueId, vector0NodeID, azrtti_typeid<AZStd::vector<AZStd::string>>());
vector0NodePtr->SetInput_UNIT_TEST("Set", vector0);
// LengthResult
AZ::EntityId lengthResultNodeID;
auto lengthResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Math::Number>(graphUniqueId, lengthResultNodeID);
// FindResult
AZ::EntityId findResultNodeID;
auto findResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Math::Number>(graphUniqueId, findResultNodeID);
// SubstringResult
AZ::EntityId substringResultNodeID;
auto* substringResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, substringResultNodeID);
// ReplaceResult
AZ::EntityId replaceResultNodeID;
auto* replaceResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, replaceResultNodeID);
// ReplaceByIndexResult
AZ::EntityId replaceByIndexResultNodeID;
auto* replaceByIndexResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, replaceByIndexResultNodeID);
// AddResult
AZ::EntityId addResultNodeID;
auto* addResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, addResultNodeID);
// TrimLeftResult
AZ::EntityId trimLeftResultNodeID;
auto* trimLeftResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, trimLeftResultNodeID);
// TrimRightResult
AZ::EntityId trimRightResultNodeID;
auto* trimRightResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, trimRightResultNodeID);
// ToLowerResult
AZ::EntityId toLowerResultNodeID;
auto* toLowerResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, toLowerResultNodeID);
// ToUpperResult
AZ::EntityId toUpperResultNodeID;
auto* toUpperResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, toUpperResultNodeID);
// JoinResult
AZ::EntityId joinResultNodeID;
auto* joinResultNodePtr = CreateTestNode<ScriptCanvas::Nodes::Core::String>(graphUniqueId, joinResultNodeID);
// SplitResult
AZ::EntityId splitResultNodeID;
auto* splitResultNodePtr = CreateTestObjectNode(graphUniqueId, splitResultNodeID, azrtti_typeid<AZStd::vector<AZStd::string>>());
const AZStd::string stringClassName("AZStd::basic_string<char, AZStd::char_traits<char>, allocator>");
// Length
AZ::EntityId lengthNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Length"));
//Find
AZ::EntityId findNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Find"));
//Substring
AZ::EntityId substringNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Substring"));
//Replace
AZ::EntityId replaceNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Replace"));
//ReplaceByIndex
AZ::EntityId replaceByIndexNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("ReplaceByIndex"));
//Add
AZ::EntityId addNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Add"));
//TrimLeft
AZ::EntityId trimLeftNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("TrimLeft"));
//TrimRight
AZ::EntityId trimRightNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("TrimRight"));
//ToLower
AZ::EntityId toLowerNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("ToLower"));
//ToUpper
AZ::EntityId toUpperNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("ToUpper"));
//Join
AZ::EntityId joinNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Join"));
//Split
AZ::EntityId splitNodeID = CreateClassFunctionNode(graphUniqueId, stringClassName, AZStd::string("Split"));
// Flow
ScriptCanvas::SlotId firstSlotId;
ScriptCanvas::SlotId secondSlotId;
NodeRequestBus::EventResult(firstSlotId, startNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, lengthNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(startNodeID, firstSlotId, lengthNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, lengthNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, findNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(lengthNodeID, firstSlotId, findNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, findNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, substringNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(findNodeID, firstSlotId, substringNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, substringNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, addNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(substringNodeID, firstSlotId, addNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, addNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, trimLeftNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(addNodeID, firstSlotId, trimLeftNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, trimLeftNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, trimRightNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimLeftNodeID, firstSlotId, trimRightNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, trimRightNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, toLowerNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimRightNodeID, firstSlotId, toLowerNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, toLowerNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, toUpperNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toLowerNodeID, firstSlotId, toUpperNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, toUpperNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, joinNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toUpperNodeID, firstSlotId, joinNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, joinNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, splitNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(joinNodeID, firstSlotId, splitNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, splitNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, replaceNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(splitNodeID, firstSlotId, replaceNodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceNodeID, &NodeRequests::GetSlotId, "Out");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "In");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceNodeID, firstSlotId, replaceByIndexNodeID, secondSlotId));
// Length
NodeRequestBus::EventResult(firstSlotId, lengthNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(lengthNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, lengthNodeID, &NodeRequests::GetSlotId, "Result: Number");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, lengthResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(lengthNodeID, firstSlotId, lengthResultNodeID, secondSlotId));
// Find
NodeRequestBus::EventResult(firstSlotId, findNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(findNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, findNodeID, &NodeRequests::GetSlotId, "String: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string5NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(findNodeID, firstSlotId, string5NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, findNodeID, &NodeRequests::GetSlotId, "Number: 2");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, int0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(findNodeID, firstSlotId, int0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, findNodeID, &NodeRequests::GetSlotId, "Result: Number");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, findResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(findNodeID, firstSlotId, findResultNodeID, secondSlotId));
// Substring
NodeRequestBus::EventResult(firstSlotId, substringNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(substringNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, substringNodeID, &NodeRequests::GetSlotId, "Number: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, int0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(substringNodeID, firstSlotId, int0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, substringNodeID, &NodeRequests::GetSlotId, "Number: 2");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, int1NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(substringNodeID, firstSlotId, int1NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, substringNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, substringResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(substringNodeID, firstSlotId, substringResultNodeID, secondSlotId));
// Replace
NodeRequestBus::EventResult(firstSlotId, replaceNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceNodeID, &NodeRequests::GetSlotId, "String: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string5NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceNodeID, firstSlotId, string5NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceNodeID, &NodeRequests::GetSlotId, "String: 2");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string1NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceNodeID, firstSlotId, string1NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, replaceResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceNodeID, firstSlotId, replaceResultNodeID, secondSlotId));
//ReplaceByIndex
NodeRequestBus::EventResult(firstSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceByIndexNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "Number: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, int0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceByIndexNodeID, firstSlotId, int0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "Number: 2");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, int1NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceByIndexNodeID, firstSlotId, int1NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "String: 3");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string5NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceByIndexNodeID, firstSlotId, string5NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, replaceByIndexNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, replaceByIndexResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(replaceByIndexNodeID, firstSlotId, replaceByIndexResultNodeID, secondSlotId));
// Add
NodeRequestBus::EventResult(firstSlotId, addNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(addNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, addNodeID, &NodeRequests::GetSlotId, "String: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string1NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(addNodeID, firstSlotId, string1NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, addNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, addResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(addNodeID, firstSlotId, addResultNodeID, secondSlotId));
//TrimLeft
NodeRequestBus::EventResult(firstSlotId, trimLeftNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string2NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimLeftNodeID, firstSlotId, string2NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, trimLeftNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, trimLeftResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimLeftNodeID, firstSlotId, trimLeftResultNodeID, secondSlotId));
// TrimRight
NodeRequestBus::EventResult(firstSlotId, trimRightNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string3NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimRightNodeID, firstSlotId, string3NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, trimRightNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, trimRightResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(trimRightNodeID, firstSlotId, trimRightResultNodeID, secondSlotId));
// ToLower
NodeRequestBus::EventResult(firstSlotId, toLowerNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string6NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toLowerNodeID, firstSlotId, string6NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, toLowerNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, toLowerResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toLowerNodeID, firstSlotId, toLowerResultNodeID, secondSlotId));
// ToUpper
NodeRequestBus::EventResult(firstSlotId, toUpperNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toUpperNodeID, firstSlotId, string0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, toUpperNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, toUpperResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(toUpperNodeID, firstSlotId, toUpperResultNodeID, secondSlotId));
// Join
NodeRequestBus::EventResult(firstSlotId, joinNodeID, &NodeRequests::GetSlotId, "AZStd::vector<AZStd::basic_string<char, AZStd::char_traits<char>, allocator>, allocator>: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, vector0NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(joinNodeID, firstSlotId, vector0NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, joinNodeID, &NodeRequests::GetSlotId, "String: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string7NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(joinNodeID, firstSlotId, string7NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, joinNodeID, &NodeRequests::GetSlotId, "Result: String");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, joinResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(joinNodeID, firstSlotId, joinResultNodeID, secondSlotId));
// Split
NodeRequestBus::EventResult(firstSlotId, splitNodeID, &NodeRequests::GetSlotId, "String: 0");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string4NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(splitNodeID, firstSlotId, string4NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, splitNodeID, &NodeRequests::GetSlotId, "String: 1");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, string7NodeID, &NodeRequests::GetSlotId, "Get");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(splitNodeID, firstSlotId, string7NodeID, secondSlotId));
NodeRequestBus::EventResult(firstSlotId, splitNodeID, &NodeRequests::GetSlotId, "Result: AZStd::vector<AZStd::basic_string<char, AZStd::char_traits<char>, allocator>, allocator>");
EXPECT_TRUE(firstSlotId.IsValid());
NodeRequestBus::EventResult(secondSlotId, splitResultNodeID, &NodeRequests::GetSlotId, "Set");
EXPECT_TRUE(secondSlotId.IsValid());
EXPECT_TRUE(graph->Connect(splitNodeID, firstSlotId, splitResultNodeID, secondSlotId));
graph->SetStartNode(startNodeID);
graph->GetEntity()->Activate();
EXPECT_FALSE(graph->IsInErrorState());
if (lengthResultNodePtr)
{
if (auto result = lengthResultNodePtr->GetInput_UNIT_TEST<int>("Set"))
{
EXPECT_EQ(4, *result);
}
else
{
ADD_FAILURE();
}
}
if (findResultNodePtr)
{
if (auto result = findResultNodePtr->GetInput_UNIT_TEST<int>("Set"))
{
EXPECT_EQ(0, *result);
}
else
{
ADD_FAILURE();
}
}
if (substringResultNodePtr)
{
auto resultValue = substringResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("ab", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (replaceResultNodePtr)
{
auto resultValue = replaceResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("efcd", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (replaceByIndexResultNodePtr)
{
auto resultValue = replaceByIndexResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abd", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (addResultNodePtr)
{
auto resultValue = addResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abcdef", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (trimLeftResultNodePtr)
{
auto resultValue = trimLeftResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abcd", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (trimRightResultNodePtr)
{
auto resultValue = trimRightResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abcd", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (toLowerResultNodePtr)
{
auto resultValue = toLowerResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abcd", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (toUpperResultNodePtr)
{
auto resultValue = toUpperResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("ABCD", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (joinResultNodePtr)
{
auto resultValue = joinResultNodePtr->GetInput_UNIT_TEST<Data::StringType>("Set");
if (resultValue)
{
EXPECT_EQ("abcd/ef", *resultValue);
}
else
{
ADD_FAILURE();
}
}
if (splitResultNodePtr)
{
auto result = splitResultNodePtr->GetInput_UNIT_TEST<AZStd::vector<AZStd::string>>("Set");
if (result)
{
AZStd::vector<AZStd::string> ans = { "abcd", "ef", "ghi" };
EXPECT_EQ(ans, *result);
}
else
{
ADD_FAILURE();
}
}
graph->GetEntity()->Deactivate();
delete graph;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
TEST_F(ScriptCanvasTestFixture, SimplestNotTrue)
{
RETURN_IF_TEST_BODIES_ARE_DISABLED(TEST_BODY_DEFAULT);
using namespace ScriptCanvas;
const bool s_value = true;
Graph* graph = nullptr;
SystemRequestBus::BroadcastResult(graph, &SystemRequests::MakeGraph);
EXPECT_TRUE(graph != nullptr);
AZ::Entity* graphEntity = graph->GetEntity();
graphEntity->Init();
const AZ::EntityId& graphEntityId = graph->GetEntityId();
const AZ::EntityId& graphUniqueId = graph->GetUniqueId();
// Nodes
AZ::EntityId startNodeId;
Nodes::Core::Start* startNode = CreateTestNode<Nodes::Core::Start>(graphUniqueId, startNodeId);
ASSERT_TRUE(startNode != nullptr);
AZ::EntityId booleanNodeId;
Nodes::Logic::Boolean* booleanNode = CreateTestNode<Nodes::Logic::Boolean>(graphUniqueId, booleanNodeId);
ASSERT_TRUE(booleanNode != nullptr);
booleanNode->SetInput_UNIT_TEST("Set", s_value);
AZ::EntityId printNodeId;
Print* printNode = CreateTestNode<Print>(graphUniqueId, printNodeId);
ASSERT_TRUE(printNode != nullptr);
AZ::EntityId notNodeId;
Nodes::Logic::Not* notNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNodeId);
ASSERT_TRUE(notNode != nullptr);
AZ::EntityId notNotNodeId;
Nodes::Logic::Not* notNotNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNotNodeId);
ASSERT_TRUE(notNotNode != nullptr);
AZ::EntityId printNode2Id;
Print* printNode2 = CreateTestNode<Print>(graphUniqueId, printNode2Id);
ASSERT_TRUE(printNode2 != nullptr);
// Start -> Not (false) => Print (true) -> Not (true) => Print
// / \_________________________/
// Boolean /
EXPECT_TRUE(Connect(*graph, startNodeId, "Out", notNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_valueName, booleanNodeId, PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onTrue, printNodeId, "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onFalse, printNodeId, "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_resultName, printNodeId, "Value"));
EXPECT_TRUE(Connect(*graph, printNodeId, "Out", notNotNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_valueName, notNodeId, Nodes::UnaryOperator::k_resultName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onTrue, printNode2Id, "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onFalse, printNode2Id, "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_resultName, printNode2Id, "Value"));
graph->SetStartNode(startNodeId);
graph->GetEntity()->Activate();
EXPECT_FALSE(graph->IsInErrorState());
// Validate results
{
const bool* result = printNode->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, !s_value);
}
else
{
ADD_FAILURE();
}
}
{
const bool* result = printNode2->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, s_value);
}
else
{
ADD_FAILURE();
}
}
graph->GetEntity()->Deactivate();
delete graph->GetEntity();
}
TEST_F(ScriptCanvasTestFixture, SimplestNotFalse)
{
RETURN_IF_TEST_BODIES_ARE_DISABLED(TEST_BODY_DEFAULT);
using namespace ScriptCanvas;
const bool s_value = false;
Graph* graph = nullptr;
SystemRequestBus::BroadcastResult(graph, &SystemRequests::MakeGraph);
EXPECT_TRUE(graph != nullptr);
AZ::Entity* graphEntity = graph->GetEntity();
graphEntity->Init();
const AZ::EntityId& graphEntityId = graph->GetEntityId();
const AZ::EntityId& graphUniqueId = graph->GetUniqueId();
// Nodes
AZ::EntityId startNodeId;
Nodes::Core::Start* startNode = CreateTestNode<Nodes::Core::Start>(graphUniqueId, startNodeId);
ASSERT_TRUE(startNode != nullptr);
AZ::EntityId booleanNodeId;
Nodes::Logic::Boolean* booleanNode = CreateTestNode<Nodes::Logic::Boolean>(graphUniqueId, booleanNodeId);
ASSERT_TRUE(booleanNode != nullptr);
booleanNode->SetInput_UNIT_TEST("Set", s_value);
AZ::EntityId printNodeId;
Print* printNode = CreateTestNode<Print>(graphUniqueId, printNodeId);
ASSERT_TRUE(printNode != nullptr);
AZ::EntityId notNodeId;
Nodes::Logic::Not* notNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNodeId);
ASSERT_TRUE(notNode != nullptr);
AZ::EntityId notNotNodeId;
Nodes::Logic::Not* notNotNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNotNodeId);
ASSERT_TRUE(notNotNode != nullptr);
AZ::EntityId printNode2Id;
Print* printNode2 = CreateTestNode<Print>(graphUniqueId, printNode2Id);
ASSERT_TRUE(printNode2 != nullptr);
// Start -> Not (false) => Print (true) -> Not (true) => Print
// / \_________________________/
// Boolean /
EXPECT_TRUE(Connect(*graph, startNodeId, "Out", notNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_valueName, booleanNodeId, PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onTrue, printNodeId, "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onFalse, printNodeId, "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_resultName, printNodeId, "Value"));
EXPECT_TRUE(Connect(*graph, printNodeId, "Out", notNotNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_valueName, notNodeId, Nodes::UnaryOperator::k_resultName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onTrue, printNode2Id, "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onFalse, printNode2Id, "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_resultName, printNode2Id, "Value"));
graph->SetStartNode(startNodeId);
graph->GetEntity()->Activate();
EXPECT_FALSE(graph->IsInErrorState());
// Validate results
{
const bool* result = printNode->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, !s_value);
}
else
{
ADD_FAILURE();
}
}
{
const bool* result = printNode2->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, s_value);
}
else
{
ADD_FAILURE();
}
}
graph->GetEntity()->Deactivate();
delete graph->GetEntity();
}
TEST_F(ScriptCanvasTestFixture, LogicTest)
{
RETURN_IF_TEST_BODIES_ARE_DISABLED(TEST_BODY_DEFAULT);
using namespace ScriptCanvas;
Graph* graph = nullptr;
SystemRequestBus::BroadcastResult(graph, &SystemRequests::MakeGraph);
EXPECT_TRUE(graph != nullptr);
AZ::Entity* graphEntity = graph->GetEntity();
graphEntity->Init();
const AZ::EntityId& graphEntityId = graph->GetEntityId();
const AZ::EntityId& graphUniqueId = graph->GetUniqueId();
// Nodes
AZ::EntityId startNodeId;
Nodes::Core::Start* startNode = CreateTestNode<Nodes::Core::Start>(graphUniqueId, startNodeId);
enum BooleanNodes
{
False,
True
};
AZ::EntityId booleanNodeIds[2];
Nodes::Logic::Boolean* booleanNodes[2];
booleanNodes[BooleanNodes::False] = CreateTestNode<Nodes::Logic::Boolean>(graphUniqueId, booleanNodeIds[BooleanNodes::False]);
ASSERT_TRUE(booleanNodes[BooleanNodes::False] != nullptr);
booleanNodes[BooleanNodes::False]->SetInput_UNIT_TEST("Set", false);
ASSERT_FALSE(*booleanNodes[BooleanNodes::False]->GetInput_UNIT_TEST<bool>("Set"));
booleanNodes[BooleanNodes::True] = CreateTestNode<Nodes::Logic::Boolean>(graphUniqueId, booleanNodeIds[BooleanNodes::True]);
ASSERT_TRUE(booleanNodes[BooleanNodes::True] != nullptr);
booleanNodes[BooleanNodes::True]->SetInput_UNIT_TEST("Set", true);
ASSERT_TRUE(*booleanNodes[BooleanNodes::True]->GetInput_UNIT_TEST<bool>("Set"));
enum PrintNodes
{
Or,
And,
Not,
NotNot,
Count
};
AZ::EntityId printNodeIds[PrintNodes::Count];
Print* printNodes[PrintNodes::Count];
printNodes[PrintNodes::Or] = CreateTestNode<Print>(graphUniqueId, printNodeIds[Or]);
ASSERT_TRUE(printNodes[PrintNodes::Or] != nullptr);
printNodes[PrintNodes::And] = CreateTestNode<Print>(graphUniqueId, printNodeIds[And]);
ASSERT_TRUE(printNodes[PrintNodes::And] != nullptr);
printNodes[PrintNodes::Not] = CreateTestNode<Print>(graphUniqueId, printNodeIds[Not]);
ASSERT_TRUE(printNodes[PrintNodes::Not] != nullptr);
printNodes[PrintNodes::NotNot] = CreateTestNode<Print>(graphUniqueId, printNodeIds[NotNot]);
ASSERT_TRUE(printNodes[PrintNodes::NotNot] != nullptr);
AZ::EntityId orNodeId;
Nodes::Logic::Or* orNode = CreateTestNode<Nodes::Logic::Or>(graphUniqueId, orNodeId);
AZ::EntityId andNodeId;
Nodes::Logic::And* andNode = CreateTestNode<Nodes::Logic::And>(graphUniqueId, andNodeId);
AZ::EntityId notNodeId;
Nodes::Logic::Not* notNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNodeId);
AZ::EntityId notNotNodeId;
Nodes::Logic::Not* notNotNode = CreateTestNode<Nodes::Logic::Not>(graphUniqueId, notNotNodeId);
// Start ----------------> And --> Print --> Or -> Print -> Not -> Print -> NotNot -> Print
// Boolean (true) _________/_/_____true______/_ /___ true ____/ \__ false ___/ \____true
// Boolean (false) ____________________________/
EXPECT_TRUE(Connect(*graph, startNodeId, "Out", andNodeId, "In"));
EXPECT_TRUE(Connect(*graph, andNodeId, Nodes::BinaryOperator::k_onTrue, printNodeIds[And], "In"));
EXPECT_TRUE(Connect(*graph, andNodeId, Nodes::BinaryOperator::k_onFalse, printNodeIds[And], "In"));
EXPECT_TRUE(Connect(*graph, andNodeId, Nodes::BinaryOperator::k_lhsName, booleanNodeIds[True], PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, andNodeId, Nodes::BinaryOperator::k_rhsName, booleanNodeIds[True], PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, andNodeId, Nodes::BinaryOperator::k_resultName, printNodeIds[And], "Value"));
EXPECT_TRUE(Connect(*graph, printNodeIds[And], "Out", orNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, orNodeId, Nodes::BinaryOperator::k_onTrue, printNodeIds[Or], "In"));
EXPECT_TRUE(Connect(*graph, orNodeId, Nodes::BinaryOperator::k_onFalse, printNodeIds[Or], "In"));
EXPECT_TRUE(Connect(*graph, orNodeId, Nodes::BinaryOperator::k_lhsName, booleanNodeIds[True], PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, orNodeId, Nodes::BinaryOperator::k_rhsName, booleanNodeIds[False], PureData::k_getThis));
EXPECT_TRUE(Connect(*graph, orNodeId, Nodes::BinaryOperator::k_resultName, printNodeIds[Or], "Value"));
EXPECT_TRUE(Connect(*graph, printNodeIds[Or], "Out", notNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onTrue, printNodeIds[Not], "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_onFalse, printNodeIds[Not], "In"));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_valueName, orNodeId, Nodes::BinaryOperator::k_resultName));
EXPECT_TRUE(Connect(*graph, notNodeId, Nodes::UnaryOperator::k_resultName, printNodeIds[Not], "Value"));
EXPECT_TRUE(Connect(*graph, printNodeIds[Not], "Out", notNotNodeId, Nodes::UnaryOperator::k_evaluateName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onTrue, printNodeIds[NotNot], "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_onFalse, printNodeIds[NotNot], "In"));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_valueName, notNotNodeId, Nodes::BinaryOperator::k_resultName));
EXPECT_TRUE(Connect(*graph, notNotNodeId, Nodes::UnaryOperator::k_resultName, printNodeIds[NotNot], "Value"));
graph->SetStartNode(startNodeId);
graph->GetEntity()->Activate();
EXPECT_FALSE(graph->IsInErrorState());
// Validate results
if (printNodes[And])
{
const bool* result = printNodes[And]->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, true);
}
else
{
ADD_FAILURE();
}
}
if (printNodes[Or])
{
const bool* result = printNodes[And]->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, true);
}
else
{
ADD_FAILURE();
}
}
if (printNodes[Not])
{
const bool* result = printNodes[Not]->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, false);
}
else
{
ADD_FAILURE();
}
}
if (printNodes[NotNot])
{
const bool* result = printNodes[NotNot]->GetInput_UNIT_TEST<bool>("Value");
if (result)
{
EXPECT_EQ(*result, true);
}
else
{
ADD_FAILURE();
}
}
graph->GetEntity()->Deactivate();
delete graph->GetEntity();
}