/// <summary>
        /// This pipeline has 2 MockProcessor1's in it, both binding their inputs to the pipeline's 'intValue'.
        /// The pipeline has 2 outputs, one bound to each processor's.
        /// </summary>
        /// <returns></returns>
        public static MockPipeline CreateDoubleMockProcessor1Pipeline()
        {
            Processor processor1 = new MockProcessor1();
            Processor processor2 = new MockProcessor1();
            MockPipeline pipeline = new MockPipeline(
                                    new[] { processor1, processor2 },
                                    new[] { new ProcessorArgument("intValue", typeof(int), new object[0]) },
                                    new[] { new ProcessorArgument("theResult1", typeof(string), new object[0]),
                                            new ProcessorArgument("theResult2", typeof(string), new object[0])}
                                    );

            // Pipeline["intValue"] --> Processor1[0]
            pipeline.BindArgumentToPipelineInput("intValue", processor1.InArguments[0]);

            // Pipeline["intValue"] --> Processor2[0]
            pipeline.BindArgumentToPipelineInput("intValue", processor2.InArguments[0]);

            // Processor1[0] --> Pipeline["theResult1"]
            pipeline.BindArgumentToPipelineOutput(processor1.OutArguments[0], "theResult1");

            // Processor2[0] --> Pipeline["theResult2"]
            pipeline.BindArgumentToPipelineOutput(processor2.OutArguments[0], "theResult2");
            pipeline.Initialize();
            return pipeline;
        }
        /// <summary>
        /// Creates a Pipeline with no actual processor other than binding the pipeline inputs to the
        /// pipeline outputs. 
        /// </summary>
        /// <returns></returns>
        public static MockPipeline CreateEmptyPipeline()
        {
            MockPipeline pipeline = new MockPipeline(
                                    new Processor[0],
                                    new[] { new ProcessorArgument("inValue", typeof(string), new object[0]) },
                                    new[] { new ProcessorArgument("outValue", typeof(string), new object[0]) }
                                    );

            pipeline.BindArgumentToPipelineInput("inValue", pipeline.Processors[1].InArguments[0]);
            pipeline.Initialize();
            return pipeline;
        }
        public void Pipeline_Executes_With_No_Bindings_To_Pipeline()
        {
            MockProcessor1 processor1 = new MockProcessor1();
            MockProcessorEchoString processor2 = new MockProcessorEchoString();
            MockPipeline pipeline = new MockPipeline(
                                        new Processor[] { processor1, processor2 },
                                        Enumerable.Empty<ProcessorArgument>(),
                                        Enumerable.Empty<ProcessorArgument>());
            pipeline.BindArguments(processor1.OutArguments[0], processor2.InArguments[0]);
            pipeline.Initialize();
            ProcessorResult result = pipeline.Execute(new object[0]);
            Assert.IsNotNull(result, "Expected non-null ProcessorResult");
            Assert.IsNotNull(result.Output, "Expected non-null output from unbound pipeline");
            Assert.AreEqual(0, result.Output.Length, "Expected empty array from unbound pipeline");

            // Verify processor1 pushed default(int) through to processor2
            object value = pipeline.Context.ReadInput(processor2.InArguments[0]);
            Assert.IsNotNull(value);
            Assert.AreEqual(default(int).ToString(), value, "Expected default(int) to be passed from processor1 to processor2");
        }
 public void Pipeline_Executes_With_No_Bindings()
 {
     MockProcessor1 processor1 = new MockProcessor1();
     MockProcessorEchoString processor2 = new MockProcessorEchoString();
     MockPipeline pipeline = new MockPipeline(
                                 new Processor[] { processor1, processor2 },
                                 Enumerable.Empty<ProcessorArgument>(),
                                 Enumerable.Empty<ProcessorArgument>());
     pipeline.Initialize();
     ProcessorResult result = pipeline.Execute(new object[0]);
     Assert.IsNotNull(result, "Expected non-null ProcessorResult");
     Assert.IsNotNull(result.Output, "Expected non-null output from unbound pipeline");
     Assert.AreEqual(0, result.Output.Length, "Expected empty array from unbound pipeline");
     Assert.AreEqual(ProcessorStatus.Ok, result.Status, "Expected OK status from pipeline");
 }