public void After_ShouldWorkProperly_WithTypeOfOriginalAndPassedProcessors()
        {
            var processor1 = new TestProcessor();
            var processor2 = new TestProcessor();
            var processor3 = new TestProcessor();

            var configuration = new ChainingModification()
                                .After(typeof(TestProcessor), processor2.ThenProcessor(processor3))
                                .GetConfiguration();

            processor1.ToAnArray().ToPipeline().Modify(configuration)
            .GetProcessors().Should().Equal(processor1, processor2, processor3);
        }
        public void Before_ShouldWorkProperly_WithOriginalInstanceAndPassedProcessors()
        {
            var processor1 = new TestProcessor();
            var processor2 = new TestProcessor();
            var processor3 = new TestProcessor();

            var configuration = Modification.Configure()
                                .Before(processor1, processor2.ThenProcessor(processor3))
                                .GetConfiguration();

            processor1.ToAnArray().ToPipeline().Modify(configuration)
            .GetProcessors().Should().Equal(processor2, processor3, processor1);
        }
        public void Remove_ShouldWorkProperly_WithOriginalInstance()
        {
            var processor1 = new TestProcessor();
            var processor2 = new TestProcessor();
            var processor3 = new TestProcessor();

            var configuration = Modification.Configure()
                                .Remove(processor1)
                                .GetConfiguration();

            processor1.ThenProcessor(processor2).ThenProcessor(processor3).ToPipeline().Modify(configuration)
            .GetProcessors().Should().Equal(processor2, processor3);
        }
        public void Before_ShouldWorkProperly_WithGenericOriginalAndPassedProcessors()
        {
            var processor1 = new TestProcessor();
            var processor2 = new TestProcessor();
            var processor3 = new TestProcessor();

            var configuration = new ChainingModification()
                                .Before <TestProcessor>(processor2.ThenProcessor(processor3))
                                .GetConfiguration();

            processor1.ToAnArray().ToPipeline().Modify(configuration)
            .GetProcessors().Should().Equal(processor2, processor3, processor1);
        }
        public void Insert_ShouldPasteProperlyIntoIndexTwo_WhenInstanceIsPassedIntoNonEmptyPipeline()
        {
            var processor1 = new TestProcessor();
            var processor2 = new TestProcessor();
            var processor3 = new TestProcessor();

            var configuration = Modification.Configure(
                x => x.Insert(2, processor2)
                )
                                .GetConfiguration();

            processor1.ThenProcessor(processor3).ToPipeline().Modify(configuration)
            .GetProcessors().Should().Equal(processor1, processor3, processor2);
        }