예제 #1
0
        public void IncorrectNumberOfSplitsAndCollectorsShouldThrowException()
        {
            // GIVEN
            mLogs.Logs.Clear();
            var injectionProvider = new IoCContainer();

            injectionProvider.RegisterSingle(new List <int>());
            injectionProvider.Register <TestIntSource>();
            Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false);

            PipelineBlueprint blueprintNormal                 = PipelineBlueprint.CreateBlueprint(typeof(int), "Normal");
            PipelineBlueprint blueprintOnlyCollect            = PipelineBlueprint.CreateBlueprint(typeof(int), "OnlyCollect");
            PipelineBlueprint blueprintOnlySplit              = PipelineBlueprint.CreateBlueprint(typeof(int), "OnlySplit");
            PipelineBlueprint blueprintSplitsMoreThanCollects = PipelineBlueprint.CreateBlueprint(typeof(int),
                                                                                                  "SplitsMoreThanCollects");
            PipelineBlueprint blueprintCollectsMoreThanSplits = PipelineBlueprint.CreateBlueprint(typeof(int),
                                                                                                  "CollectsMoreThanSplits");

            // WHEN
            Action createNormal = () => new Pipeline(blueprintNormal
                                                     .Split <TestIntSource>()
                                                     .Collect());

            Action createOnlySplit = () => new Pipeline(blueprintOnlySplit
                                                        .Split <TestIntSource>());

            Action createOnlyCollect = () => new Pipeline(blueprintOnlyCollect
                                                          .Collect());

            Action createSplitsMoreThanCollects = () => new Pipeline(blueprintSplitsMoreThanCollects
                                                                     .Split <TestIntSource>()
                                                                     .Split <TestIntSource>()
                                                                     .Collect());

            Action createCollectsMoreThanSplits = () => new Pipeline(blueprintCollectsMoreThanSplits
                                                                     .Split <TestIntSource>()
                                                                     .Collect()
                                                                     .Collect());


            // THAN
            createNormal.ShouldNotThrow();
            createOnlySplit.ShouldThrow <InvalidSplitCollectException>();
            createOnlyCollect.ShouldThrow <InvalidSplitCollectException>();
            createSplitsMoreThanCollects.ShouldThrow <InvalidSplitCollectException>();
            createCollectsMoreThanSplits.ShouldThrow <InvalidSplitCollectException>();
        }
예제 #2
0
        public void SyncSpitCollectShouldWorksWell()
        {
            // GIVEN
            mLogs.Logs.Clear();

            var ints = new List <int> {
                1, 2, 3
            };

            var injectionProvider = new IoCContainer();

            injectionProvider.RegisterSingle(ints);
            injectionProvider.Register <TestIntSource>();
            injectionProvider.Register <TestMultiplicatorStep>();
            Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false);

            PipelineBlueprint blueprint = PipelineBlueprint.CreateBlueprint(typeof(int), "SyncSplitCollect");

            // WHEN
            var result = blueprint
                         .Split <TestIntSource>()
                         .Apply((int el) => el * 10)
                         .Collect()
                         .Apply((IList <UnitContext> octx) => octx.Select(el => el.GetUnit <int>()));

            TransferingContext tctx = new TransferingContext();

            new Pipeline(result)
            .Process(tctx, 1)
            .Wait();

            // THAN
            tctx.Exception.Should().BeNull();
            tctx.GetResult <IEnumerable <int> >().ShouldBeEquivalentTo(new List <int> {
                10, 20, 30
            });
        }
예제 #3
0
        public void AsyncSpitCollectShouldWorksWell()
        {
            // GIVEN
            mLogs.Logs.Clear();

            var ints = new List <int> {
                1, 2, 3
            };

            var injectionProvider = new IoCContainer();

            injectionProvider.RegisterSingle(ints);
            injectionProvider.Register <TestIntSource>();
            injectionProvider.Register <TestMultiplicatorStep>();
            Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false);

            PipelineBlueprint blueprint         = PipelineBlueprint.CreateBlueprint(typeof(int), "AsyncSplitCollect");
            PipelineBlueprint blueprintOther    = PipelineBlueprint.CreateBlueprint(typeof(int), "OtherAsyncSplitCollect");
            PipelineBlueprint blueprintOneOther = PipelineBlueprint.CreateBlueprint(typeof(int),
                                                                                    "OneOtherAsyncSplitCollect");

            // WHEN
            TransferingContext tctx = new TransferingContext(new Headers {
                { "factor", 10 }
            }.Dict);

            new Pipeline(blueprint
                         .Split <TestIntSource>()
                         .Apply <TestMultiplicatorStep>("multiplybyfactor")
                         .Collect()
                         .Apply((IList <UnitContext> octx) => octx.Select(el => el.GetUnit <int>()).ToList()))
            .Process(tctx, 1)
            .Wait();

            TransferingContext otherTctx = new TransferingContext(new Headers {
                { "factor", 10 }
            }.Dict);

            new Pipeline(blueprintOther
                         .Split <TestIntSource>()
                         .Apply <TestMultiplicatorStep>("multiplybyfactor")
                         .Collect()
                         .Apply <TestMultiplicatorStep>("strip"))
            .Process(otherTctx, 1)
            .Wait();

            TransferingContext oneAnotherTctx = new TransferingContext(new Headers {
                { "factor", 10 }
            }.Dict);

            new Pipeline(blueprintOneOther
                         .Apply <TestMultiplicatorStep>("multiplybyfactor")
                         .Split <TestIntSource>()
                         .Apply <TestMultiplicatorStep>("multiplybyfactor")
                         .Collect()
                         .Apply <TestMultiplicatorStep>("strip"))
            .Process(oneAnotherTctx, 1)
            .Wait();

            // THAN
            tctx.Exception?.InnerException.Should().BeNull();
            tctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> {
                10, 20, 30
            });

            otherTctx.Exception?.InnerException.Should().BeNull();
            otherTctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> {
                10, 20, 30
            });

            oneAnotherTctx.Exception?.InnerException.Should().BeNull();
            oneAnotherTctx.GetResult <List <int> >().ShouldBeEquivalentTo(new List <int> {
                10, 20, 30
            });
        }