Ejemplo n.º 1
0
        public async Task Given_nodes_changing_direction_When_execute_Then_will_follow_it_commands()
        {
            var root = new LogicNode()
            {
                Name = "root"
            };
            var childARedirectParent = new TestLogicNode()
            {
                Name     = "nodeA", Parent = root,
                Behavior = () => new ExecutionSuccessAndRedirect(root)
            };

            var childB = new LogicNode()
            {
                Name = "nodeB", Parent = root
            };

            root.Children.Add(childARedirectParent);
            root.Children.Add(childB);

            var nodeAA = new LogicNode()
            {
                Name = "nodeAA", Parent = childARedirectParent
            };

            childARedirectParent.Children.Add(nodeAA);

            var graph = new LogicGraph()
            {
                Root = root, ExecutionFlow = new OrderedExecutionFlow(new TestNodeExecutor())
            };

            var trace = new List <NodeVisitResult>();


            await foreach (var visit in graph.Run())
            {
                trace.Add(visit);
            }

            trace.Select(v => v.Node.Name).Should().Equal("root", "nodeA", "nodeB");
        }
Ejemplo n.º 2
0
        public async Task Given_nodes_stopping_flow_When_execute_Then_will_follow_it_commands()
        {
            var root = new LogicNode()
            {
                Name = "root"
            };
            var childAStop = new TestLogicNode()
            {
                Name     = "nodeA", Parent = root,
                Behavior = () => new ExecutionSuccessAndStop()
                {
                    Result = 1
                }
            };

            var childB = new LogicNode()
            {
                Name = "nodeB", Parent = root
            };

            root.Children.Add(childAStop);
            root.Children.Add(childB);

            var graph = new LogicGraph()
            {
                Root = root, ExecutionFlow = new OrderedExecutionFlow(new TestNodeExecutor())
            };

            var trace = new List <NodeVisitResult>();


            await foreach (var visit in graph.Run())
            {
                trace.Add(visit);
            }

            trace.Select(v => v.Node.Name).Should().Equal("root", "nodeA");

            trace.Last().Result.As <ExecutionSuccessAndStop>().Result.Should().Be(1);
        }