示例#1
0
        public async void Parent_Pipeline_Cancels_Execution_When_Child_Pipeline_Node_Cancelled()
        {
            var testNode1 = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeA1(true, false, true);
            var testNode3 = new SimpleTestNodeA2();

            var innerPipelineNode = new PipelineNode <TestObjectA>();

            innerPipelineNode.AddChild(testNode1);
            innerPipelineNode.AddChild(testNode2);

            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(innerPipelineNode);
            pipelineNode.AddChild(testNode3);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);

            innerPipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode1.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode2.Status.ShouldEqual(NodeRunStatus.NotRun);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode3.Status.ShouldEqual(NodeRunStatus.NotRun);
        }
示例#2
0
        public async Task Pipeline_Overall_Result_Subject_Equals_Last_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();
            var node4 = new SubjectChangingNode1();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);
            pipelineNode.AddChild(node4);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            result.Subject.Should().NotBeSameAs(testObject);
            result.Subject.Should().NotBeSameAs(childResults[1].Subject);
            result.Subject.Should().NotBeSameAs(childResults[2].Subject);
            result.Subject.Should().BeSameAs(childResults[3].Subject);
        }
        public async void Subject_Of_Inherited_Type_Is_Passed_To_Execute()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectASub();

            var result = await testNode.ExecuteAsync(testObject);

            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
        }
        public async Task Successful_Node_Run_Status_Is_Completed_When_Fewer_Subjects_Than_DegreeOfParallelism()
        {
            var testNode = new SimpleTestNodeA1();

            var testObjectList = GetTestObjects(2);

            var result = await testNode.ExecuteManyAsync(testObjectList, new ExecutionOptions { DegreeOfParallelism = 4 });

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            result.Exception.Should().BeNull();
            testNode.Status.Should().Be(NodeRunStatus.Completed);
        }
        public async void Successful_Node_Run_Status_Is_Completed()
        {
            var testNode = new SimpleTestNodeA1();

            var testObjectList = GetTestObjects(100);

            var result = await testNode.ExecuteManyAsync(testObjectList, new ExecutionOptions { DegreeOfParallelism = 4 });

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            result.Exception.ShouldBeNull();
            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
示例#6
0
        public async void Successful_Node_Run_Status_Is_Completed()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
        public async Task ExecutionContext_Based_On_Inherited_Type_Is_Passed_To_Execute()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectASub();

            var context = new ExecutionContext <TestObjectASub>(testObject);

            var result = await testNode.ExecuteAsync(context);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
        public async void ExecutionContext_Based_On_Root_Type_Works_With_Inherited_Type()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectASub();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
        }
示例#9
0
        public async void Node_Is_Not_Run_If_ShouldExecute_False()
        {
            var testNode = new SimpleTestNodeA1(false);

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.Status.ShouldEqual(NodeResultStatus.NotRun);

            context.Subject.TestValueString.ShouldBeNull();
        }
示例#10
0
        public void Node_Specific_Options_Override_Global_Options()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            testNode.LocalOptions = new ExecutionOptions {
                ThrowOnError = true
            };

            testNode.GetEffectiveOptions(context.GlobalOptions).ThrowOnError.ShouldEqual(true);
        }
示例#11
0
        public async void Global_Options_Are_Reflected_In_Effective_Options()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject)
            {
                GlobalOptions = { ThrowOnError = true }
            };

            var result = await testNode.ExecuteAsync(context);

            testNode.GetEffectiveOptions(context.GlobalOptions).ThrowOnError.ShouldEqual(true);
        }
示例#12
0
        public async void Successful_Node_Result_Matches_Expectations()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            result.Exception.ShouldEqual(null);
            result.Id.ShouldEqual(testNode.Id);

            context.Subject.TestValueString.ShouldEqual("Completed");
        }
示例#13
0
        public async Task Successful_Sync_Node_Run_Status_Is_Completed()
        {
            var testNode = new SimpleTestNodeA1();

            var testObject1 = new TestObjectA();
            var testObject2 = new TestObjectA();

            var testObjectList = new List <TestObjectA> {
                testObject1, testObject2
            };

            var result = await testNode.ExecuteManySeriallyAsync(testObjectList);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            result.Exception.Should().BeNull();
            testNode.Status.Should().Be(NodeRunStatus.Completed);
        }
示例#14
0
        public async Task Can_Add_Base_Type_Nodes_To_Inherited_Type_Pipeline()
        {
            var testNode  = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeASub1();

            var pipeline = new PipelineNode <TestObjectASub>();

            pipeline.AddChild(testNode);
            pipeline.AddChild(testNode2);

            var testObject = new TestObjectASub();

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
示例#15
0
        public async Task ShouldExecuteFunc_On_Test_Object_Is_Evaluated()
        {
            var testNode  = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeASub1();

            testNode2.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueDecimal == 1));

            var pipeline = new PipelineNode <TestObjectASub>();

            pipeline.AddChild(testNode);
            pipeline.AddChild(testNode2);

            var testObject = new TestObjectASub();

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            testNode2.Status.Should().Be(NodeRunStatus.NotRun);
        }
示例#16
0
        public async void When_Cancelling_Pipeline_At_First_Node_Then_Status_Is_NotRun()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1(true, false, true);
            var testNode2 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.NotRun);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            testNode1.Status.ShouldEqual(NodeRunStatus.NotRun);
            testNode2.Status.ShouldEqual(NodeRunStatus.NotRun);
        }
示例#17
0
        public async void Group_Overall_Result_Subject_Equals_Changed_Subject()
        {
            var groupNode = new GroupNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();

            groupNode.AddChild(node1);
            groupNode.AddChild(node2);
            groupNode.AddChild(node3);

            var        testObject = new TestObjectA();
            NodeResult result     = await groupNode.ExecuteAsync(testObject);

            groupNode.Status.ShouldEqual(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            result.Subject.ShouldNotBeSameAs(testObject);
            result.Subject.ShouldBeSameAs(childResults[1].Subject);
        }
示例#18
0
        public async Task When_Cancelling_Pipeline_At_Later_Node_Then_Status_Is_Success()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeA1(true, false, true);
            var testNode3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);
            pipelineNode.AddChild(testNode3);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            testNode1.Status.Should().Be(NodeRunStatus.Completed);
            testNode2.Status.Should().Be(NodeRunStatus.NotRun);
            testNode3.Status.Should().Be(NodeRunStatus.NotRun);
        }
        public async Task Successful_FirstMatch_Node_Runs_Second_Node_When_First_Not_Matched()
        {
            var matchNode = new FirstMatchNode <TestObjectA>();

            var firstNode = new SimpleTestNodeA1(false);

            matchNode.AddChild(firstNode);

            var secondNode = new SimpleTestNodeA2();

            matchNode.AddChild(secondNode);

            var        testObject = new TestObjectA();
            NodeResult result     = await matchNode.ExecuteAsync(testObject);

            matchNode.Status.Should().Be(NodeRunStatus.Completed);
            firstNode.Status.Should().Be(NodeRunStatus.NotRun);
            secondNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);

            testObject.TestValueString.Should().BeNull();
            testObject.TestValueInt.Should().Be(100);
        }
示例#20
0
        public async void Pipeline_Node_Results_Following_Subject_Change_Node_Return_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            childResults[0].Subject.ShouldBeSameAs(testObject);
            childResults[1].Subject.ShouldNotBeSameAs(testObject);
            childResults[2].Subject.ShouldNotBeSameAs(testObject);
            childResults[1].Subject.ShouldEqual(childResults[2].Subject);
        }
示例#21
0
        public void Initial_Node_Run_Status_Is_NotRun()
        {
            var testNode = new SimpleTestNodeA1();

            testNode.Status.ShouldEqual(NodeRunStatus.NotRun);
        }