public void PipelineContext_Ctor_Internal_Null_ContextInfo_Creates()
 {
     Processor processor = new MockProcessor1();
     Pipeline pipeline = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>());
     PipelineContext context = new PipelineContext(pipeline, null);
     Assert.IsNotNull(context.ContextInfo, "Null contextInfo to ctor should have created one");
 }
 public void PipelineContext_Ctor_Internal_Accepts_ContextInfo()
 {
     Processor processor = new MockProcessor1();
     Pipeline pipeline = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>());
     PipelineContextInfo info = new PipelineContextInfo(pipeline);
     PipelineContext context = new PipelineContext(pipeline, info);
     Assert.AreSame(info, context.ContextInfo, "Ctor should have used the ContextInfo we passed int.");
 }
        public void PipelineContext_Ctor_Internal_Reuses_Pipeline_ContextInfo()
        {
            Processor processor = new MockProcessor1();
            Pipeline pipeline = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>());
            PipelineContext context1 = new PipelineContext(pipeline);
            Assert.IsNotNull(context1.ContextInfo, "ContextInfo should have been created");

            PipelineContext context2 = new PipelineContext(pipeline);
            Assert.AreSame(context1.ContextInfo, context2.ContextInfo, "Expected 2nd context to reuse same ContextInfo");
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PipelineContext"/> class.
 /// </summary>
 /// <param name="pipeline">The <see cref="Pipeline"/> that will use this <see cref="PipelineContext"/>.</param>
 public PipelineContext(Pipeline pipeline)
 {
     this.Initialize(pipeline, null);
 }
 internal PipelineContext(Pipeline pipeline, PipelineContextInfo contextInfo)
 {
     this.Initialize(pipeline, contextInfo);
 }
        public void Pipeline_BindArgument_Throws_Null_InArg()
        {
            MockProcessor1 processor = new MockProcessor1();
            Pipeline pipeline = new Pipeline(
                new Processor[] { processor },
                Enumerable.Empty<ProcessorArgument>(),
                Enumerable.Empty<ProcessorArgument>());

            ExceptionAssert.ThrowsArgumentNull(
                "BindArgument with null in should throw",
                "inArgument",
                () => pipeline.BindArguments(processor.OutArguments[0], null)
                );
        }
        private void Initialize(Pipeline pipeline, PipelineContextInfo contextInfo)
        {
            if (pipeline == null)
            {
                throw new ArgumentNullException("pipeline");
            }

            this.Pipeline = pipeline;

            // A null contextInfo indicates we should reuse the one created
            // and retained by the pipeline.  This is the nominal execution
            // path.
            if (contextInfo == null)
            {
                contextInfo = pipeline.ContextInfo;
            }
            else
            {
                Debug.Assert(contextInfo.Pipeline == pipeline, "Cannot use contextInfo from a different pipeline");
            }

            this.ContextInfo = contextInfo;
            this.CurrentProcessorIndex = -1;
        }
        public void Pipeline_UnbindArgument_Throws_After_Initialize()
        {
            MockProcessor1 processor1 = new MockProcessor1();
            MockProcessorEchoString processor2 = new MockProcessorEchoString();
            Pipeline pipeline = new Pipeline(
                new Processor[] { processor1, processor2 },
                Enumerable.Empty<ProcessorArgument>(),
                Enumerable.Empty<ProcessorArgument>());

            pipeline.Initialize();

            ExceptionAssert.ThrowsInvalidOperation(
                "UnbindArgument should throw if called after initialize",
                () => pipeline.UnbindArguments(processor1.OutArguments[0], processor2.InArguments[0])
                );
        }
        public void Pipeline_UnbindArgument_Throws_Null_OutArg()
        {
            MockProcessor1 processor = new MockProcessor1();
            Pipeline pipeline = new Pipeline(
                new Processor[] { processor },
                Enumerable.Empty<ProcessorArgument>(),
                Enumerable.Empty<ProcessorArgument>());

            ExceptionAssert.ThrowsArgumentNull(
                "UnbindArgument with null out should throw",
                "outArgument",
                () => pipeline.UnbindArguments(null, processor.InArguments[0])
                );
        }
        public void Pipeline_Processor_Belongs_To_Only_1_Pipeline()
        {
            Processor processor = new MockProcessor1();
            Pipeline pipeline1 = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>());

            Assert.AreEqual(pipeline1, processor.ContainingCollection.ContainerProcessor, "Processor.Pipeline must be the pipeline we created");

            Pipeline pipeline2;
            ExceptionAssert.ThrowsInvalidOperation(
                "Adding a processor to a 2nd pipeline should throw",
                () => pipeline2 = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>())
                );
        }
        public void Pipeline_UnbindArgument_Succeeds()
        {
            MockProcessor1 processor1 = new MockProcessor1();
            MockProcessorEchoString processor2 = new MockProcessorEchoString();
            Pipeline pipeline = new Pipeline(
                new Processor[] { processor1, processor2 },
                Enumerable.Empty<ProcessorArgument>(),
                Enumerable.Empty<ProcessorArgument>());

            pipeline.BindArguments(processor1.OutArguments[0], processor2.InArguments[0]);
            Assert.IsTrue(
                pipeline.GetBoundToArguments(processor1.OutArguments[0]).Contains(processor2.InArguments[0]),
                "Expected GetBoundTo(out) to show we bound out to in");
            Assert.IsTrue(
                pipeline.GetBoundToArguments(processor2.InArguments[0]).Contains(processor1.OutArguments[0]),
                "Expected GetBoundTo(in) to show we bound out to in");

            pipeline.UnbindArguments(processor1.OutArguments[0], processor2.InArguments[0]);

            Assert.IsFalse(
                pipeline.GetBoundToArguments(processor1.OutArguments[0]).Contains(processor2.InArguments[0]),
                "Expected GetBoundTo(out) to show we unbound out to in");
            Assert.IsFalse(
                pipeline.GetBoundToArguments(processor2.InArguments[0]).Contains(processor1.OutArguments[0]),
                "Expected GetBoundTo(in) to show we unbound out to in");
        }
        public void Pipeline_GetBoundToArguments_Throws_Null_Parameer()
        {
            MockProcessor1 processor = new MockProcessor1();
            Pipeline pipeline = new Pipeline(
                Enumerable.Empty <Processor>(),
                Enumerable.Empty<ProcessorArgument>(),
                Enumerable.Empty<ProcessorArgument>());

            ExceptionAssert.ThrowsArgumentNull(
                "GetBoundToArguments should throw for null parameter",
                "argument",
                () => pipeline.GetBoundToArguments(null)
                );
        }
 public void Pipeline_Ctor_Throws_Null_Processors()
 {
     Pipeline p;
     ExceptionAssert.ThrowsArgumentNull(
         "Pipeline ctor should throw if processor collection is null",
         "processors",
         () => p = new Pipeline(null, Enumerable.Empty<ProcessorArgument>(), Enumerable.Empty<ProcessorArgument>())
         );
 }
 public void Pipeline_Ctor_Throws_Null_OutArguments()
 {
     Processor processor = new MockProcessor1();
     Pipeline p;
     ExceptionAssert.ThrowsArgumentNull(
         "Pipeline ctor should throw if processor collection is null",
         "outArguments",
         () => p = new Pipeline(new[] { processor }, Enumerable.Empty<ProcessorArgument>(), null)
         );
 }
 public PipelineEntryProcessor(Pipeline pipeline)
 {
     this.Pipeline = pipeline;
 }
        public void Initialize()
        {
            var builder = this.Builder;
            if (builder == null)
            {
                builder = new PipelineBuilder();
            }

            this.requestPipeline = builder.Build(this.requestProcessors, GetRequestInArguments(), this.GetRequestOutArguments());
            this.responsePipeline = builder.Build(this.responseProcessors, this.GetResponseInArguments(), Enumerable.Empty<ProcessorArgument>());
        }
 public PipelineExitProcessor(Pipeline pipeline)
 {
     this.Pipeline = pipeline;
 }
 public PipelineContextInfo(Pipeline pipeline)
 {
     Debug.Assert(pipeline != null, "pipeline cannot be null");
     this.Pipeline = pipeline;
     this.Initialize();
 }