Unity graph tool solution based on different implementation now focused on Unity.Experimental.Graphview
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
9.1 KiB

using System.Linq;
using NUnit.Framework;
using TNode.TNodeCore.Runtime.Models;
using TNodeCore.Editor.Tools.NodeCreator;
using TNodeCore.Runtime;
using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Attributes.Ports;
using TNodeCore.Runtime.Models;
using TNodeCore.Runtime.RuntimeModels;
using UnityEditor.VersionControl;
using UnityEngine;
namespace Tests{
public class StaticGraphTest{
internal class GraphDataForTest:GraphData{
}
[GraphUsage(typeof(GraphDataForTest))]
internal class TestNode : NodeData{
[Input] public object Input{ get; set; }
[Output] public int Output{ get; set; }
}
[GraphUsage(typeof(GraphDataForTest))]
internal class TestConditionalNode : ConditionalNode{
public bool TestCondition = false;
[Input]
public object In{ get; set; }
[Output]
public TransitionCondition Output(){
Debug.Log($"Test Condition is {TestCondition}");
return new TransitionCondition(){
Condition = TestCondition
};
}
}
[Test]
public void TestStaticGraphCreation(){
GraphData graphData = ScriptableObject.CreateInstance<GraphData>();
var node = NodeCreator.InstantiateNodeData<TestNode>();
graphData.NodeDictionary.Add(node.id,node);
Assert.AreEqual(1,graphData.NodeDictionary.Count);
var staticGraph = new StaticGraph(graphData);
Assert.NotNull(staticGraph);
Assert.AreEqual(1,staticGraph.GetRuntimeNodes().Count);
}
[Test]
public void TestStaticGraphAccess(){
GraphData graphData = ScriptableObject.CreateInstance<GraphData>();
var node = NodeCreator.InstantiateNodeData<TestNode>();
graphData.NodeDictionary.Add(node.id,node);
var staticGraph = new StaticGraph(graphData);
Assert.AreEqual(staticGraph.GetRuntimeNodes().First(),staticGraph.CurrentRuntimeNode());
}
[Test]
public void TestStaticGraphBfs(){
GraphData graphData = ScriptableObject.CreateInstance<GraphData>();
var node1 = NodeCreator.InstantiateNodeData<TestNode>();
var node2 = NodeCreator.InstantiateNodeData<TestNode>();
var node3 = NodeCreator.InstantiateNodeData<TestNode>();
var node4 = NodeCreator.InstantiateNodeData<TestNode>();
graphData.NodeDictionary.Add(node1.id,node1);
graphData.NodeDictionary.Add(node2.id,node2);
graphData.NodeDictionary.Add(node3.id,node3);
graphData.NodeDictionary.Add(node4.id,node4);
//Link node1 to node2
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node2.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node1.id
}));
//Link node2 to node4
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node4.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node2.id
}));
//LINK NODE4 TO NODE3
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node3.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node4.id
}));
var staticGraph = new StaticGraph(graphData);
Assert.AreEqual(node1,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node2,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node4,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node3,staticGraph.CurrentNode());
}
[Test]
public void TestStaticConditionalBfs(){
GraphData graphData = ScriptableObject.CreateInstance<GraphData>();
var node1 = NodeCreator.InstantiateNodeData<TestNode>();
var node2 = NodeCreator.InstantiateNodeData<TestNode>();
var node3 = NodeCreator.InstantiateNodeData<TestConditionalNode>();
var node4 = NodeCreator.InstantiateNodeData<TestConditionalNode>();
var node5 = NodeCreator.InstantiateNodeData<TestNode>();
var node6 = NodeCreator.InstantiateNodeData<TestNode>();
graphData.NodeDictionary.Add(node1.id,node1);
graphData.NodeDictionary.Add(node2.id,node2);
graphData.NodeDictionary.Add(node3.id,node3);
graphData.NodeDictionary.Add(node4.id,node4);
graphData.NodeDictionary.Add(node5.id,node5);
graphData.NodeDictionary.Add(node6.id,node6);
//Link node1 to node2
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node2.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node1.id
}));
//Link node2 to node3
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "In",
nodeDataId = node3.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node2.id
}));
//Link node3 to node6
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node6.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node3.id
}));
node3.TestCondition = true;
var staticGraph = new StaticGraph(graphData);
staticGraph.AccessMethod = AccessMethod.Bfs;
Assert.AreEqual(node1,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node4,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node5,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node2,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node3,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node6,staticGraph.CurrentNode());
}
[Test]
public void TestStaticGraphDirectlyNext(){
GraphData graphData = ScriptableObject.CreateInstance<GraphData>();
var node1 = NodeCreator.InstantiateNodeData<TestNode>();
var node2 = NodeCreator.InstantiateNodeData<TestNode>();
var node3 = NodeCreator.InstantiateNodeData<TestConditionalNode>();
var node4 = NodeCreator.InstantiateNodeData<TestConditionalNode>();
var node5 = NodeCreator.InstantiateNodeData<TestNode>();
var node6 = NodeCreator.InstantiateNodeData<TestNode>();
graphData.NodeDictionary.Add(node1.id,node1);
graphData.NodeDictionary.Add(node2.id,node2);
graphData.NodeDictionary.Add(node3.id,node3);
graphData.NodeDictionary.Add(node4.id,node4);
graphData.NodeDictionary.Add(node5.id,node5);
graphData.NodeDictionary.Add(node6.id,node6);
//Link node1 to node2
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node2.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node1.id
}));
//Link node2 to node3
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "In",
nodeDataId = node3.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node2.id
}));
//Link node3 to node6
graphData.NodeLinks.Add(new NodeLink(new PortInfo{
portEntryName = "Input",
nodeDataId = node6.id
},new PortInfo{
portEntryName = "Output",
nodeDataId = node3.id
}));
node3.TestCondition = true;
var staticGraph = new StaticGraph(graphData);
staticGraph.AccessMethod = AccessMethod.StateTransition;
staticGraph.ResetState();
Assert.AreEqual(node1,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node2,staticGraph.CurrentNode());
staticGraph.MoveNext();
Assert.AreEqual(node3,staticGraph.CurrentNode());
staticGraph.MoveNext();
}
}
}