예제 #1
0
        public async Task Cancel_CancellationToken_StopsIteration()
        {
            var       payload = new[] { "Test1", "Test2", "Test3" };
            var       result  = new List <string>();
            var       cancellationTokenSource = new CancellationTokenSource();
            const int maxIterations           = 2;

            var chainBuilder = new TestChain <string[]>
            {
                ConfigureRootAction = root => root
                                      .Each(each => each
                                            .TestInspect(onProcess: (input, _) =>
                {
                    result.Add(input);
                    if (result.Count == maxIterations)
                    {
                        cancellationTokenSource.Cancel();
                    }
                }))
            };

            await chainBuilder.BuildAndExecuteAsync(payload, cancellationTokenSource.Token);

            Assert.True(payload.Take(maxIterations).SequenceEqual(result));
        }
예제 #2
0
        public async Task Process_ReceivesInput()
        {
            const string payload = "Test";
            var          result  = new List <string>();

            var chainBuilder = new TestChain <string>
            {
                ConfigureRootAction = root =>
                                      root.TestInspect(onProcess: (input, _) => result.Add(input))
            };

            await chainBuilder.BuildAndExecuteAsync(payload);

            Assert.Single(result, payload);
        }
예제 #3
0
        public async Task Process_StringArray_IteratesItems()
        {
            var payload = new[] { "Test1", "Test2", "Test3" };
            var result  = new List <string>();

            var chainBuilder = new TestChain <string[]>
            {
                ConfigureRootAction = root => root
                                      .Each(each => each
                                            .TestInspect(onProcess: (input, _) => result.Add(input)))
            };

            await chainBuilder.BuildAndExecuteAsync(payload);

            Assert.True(payload.SequenceEqual(result));
        }
예제 #4
0
        public async Task Process_ReturnsMappedValue()
        {
            const string testInput = "SomeString";
            var          result    = 0;

            var chainBuilder = new TestChain <string>
            {
                ConfigureRootAction = root => root
                                      .Map(input => input.Length)
                                      .TestInspect(onProcess: (input, _) => result = input)
            };

            await chainBuilder.BuildAndExecuteAsync(testInput);

            Assert.Equal(testInput.Length, result);
        }
예제 #5
0
        public async Task ChainExecutionStart_NotifiesHandler()
        {
            var eventTracker    = new TestEventTracker <ChainExecutionStartedEvent>();
            var serviceProvider = new TestServiceProvider(
                configureServices: services => services
                .AddSingleton(eventTracker),
                configureDaisy: daisy => daisy
                .AddEventHandlerSingleton <TestEventTrackerHandler <ChainExecutionStartedEvent> >()
                );

            var chainBuilder = new TestChain <Signal>
            {
                ConfigureRootAction = root => root
                                      .Link <NoopLink <Signal>, Signal>()
            };

            await chainBuilder.BuildAndExecuteAsync(Signal.Static, default, serviceProvider);
예제 #6
0
        public async Task Process_SetsResult()
        {
            const string reason = "TestReason";

            var chainBuilder = new TestChain <Signal>
            {
                ConfigureRootAction = root => root
                                      .SubChain(subChain => subChain
                                                .Complete(reason)
                                                )
                                      .Link <ThrowingLink <Signal>, Signal>()
            };

            var result = await chainBuilder.BuildAndExecuteAsync(Signal.Static);

            Assert.Equal(ExecutionResult.Completed, result);
        }
        public async Task Process_ReturnsInput()
        {
            const string payload = "Test";

            var result = new List <string>();

            var chainBuilder = new TestChain <string>
            {
                ConfigureRootAction = root => root
                                      .Conditional(payload.Equals, builder => builder
                                                   .Link <NoopLink <string>, string>()
                                                   )
                                      .TestInspect(onProcess: (input, _) => result.Add(input))
            };

            await chainBuilder.BuildAndExecuteAsync(payload);

            Assert.Single(result, payload);
        }