예제 #1
0
파일: TaskExTests.cs 프로젝트: ganesum/Naru
        public void Retry_return_value_of_a_previously_failing_task_is_propogated_through()
        {
            var currentThreadScheduler = new CurrentThreadTaskScheduler();

            var exceptionOccured = false;

            var triggerToNotThrowException = 2;
            var index = 0;

            Func<Task<int>> taskProvider = () => Task.Factory.StartNew(() =>
                                                                       {
                                                                           index++;
                                                                           if (index <= triggerToNotThrowException)
                                                                           {
                                                                               throw new Exception("Problem");
                                                                           }

                                                                           return index;
                                                                       }, currentThreadScheduler);

            taskProvider()
                .Retry(taskProvider, triggerToNotThrowException + 1, _ => true, currentThreadScheduler)
                .CatchAndHandle(ex => exceptionOccured = true, currentThreadScheduler);

            Assert.That(exceptionOccured, Is.False);
            Assert.That(index, Is.EqualTo(triggerToNotThrowException + 1));
        }
예제 #2
0
        public void Retry_return_value_of_a_previously_failing_task_is_propogated_through()
        {
            var currentThreadScheduler = new CurrentThreadTaskScheduler();

            var exceptionOccured = false;

            var triggerToNotThrowException = 2;
            var index = 0;

            Func <Task <int> > taskProvider = () => Task.Factory.StartNew(() =>
            {
                index++;
                if (index <= triggerToNotThrowException)
                {
                    throw new Exception("Problem");
                }

                return(index);
            }, currentThreadScheduler);

            taskProvider()
            .Retry(taskProvider, triggerToNotThrowException + 1, _ => true, currentThreadScheduler)
            .CatchAndHandle(ex => exceptionOccured = true, currentThreadScheduler);

            Assert.That(exceptionOccured, Is.False);
            Assert.That(index, Is.EqualTo(triggerToNotThrowException + 1));
        }
예제 #3
0
        public void when_no_exception_of_T_is_thrown_then_Catch_is_not_called()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var result = false;

            Task.Factory.StartNew(() => { }, testScheduler)
            .Catch <ArgumentNullException>(ex => result = true);

            Assert.That(result, Is.False);
        }
예제 #4
0
        public void when_an_exception_is_not_thrown_then_Finally_is_called()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var result = false;

            Task.Factory.StartNew(() => { }, testScheduler)
            .Finally(() => result = true, testScheduler);

            Assert.That(result, Is.True);
        }
예제 #5
0
파일: TaskExTests.cs 프로젝트: ganesum/Naru
        public void when_an_exception_is_thrown_then_Finally_is_called()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var result = false;

            Task.Factory.StartNew(() => { throw new ArgumentNullException(); }, testScheduler)
                .Finally(() => result = true, testScheduler);

            Assert.That(result, Is.True);
        }
예제 #6
0
        public void when_event_fires_then_the_action_is_executed()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var result = false;

            EventAsync.FromEvent(eh => stub.NoPayload += eh, eh => stub.NoPayload -= eh)
            .Do(() => result = true, testScheduler);

            stub.FireNoPayloadEvent();

            Assert.That(result, Is.True);
        }
예제 #7
0
        public void when_event_fires_then_the_action_is_executed()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var result = false;

            EventAsync.FromEvent(eh => stub.NoPayload += eh, eh => stub.NoPayload -= eh)
                      .Do(() => result = true, testScheduler);

            stub.FireNoPayloadEvent();

            Assert.That(result, Is.True);
        }
예제 #8
0
        public void when_payload_event_is_fired_twice_then_the_second_time_the_event_is_not_recieved()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var count = 0;

            EventAsync.FromEvent <DataEventArgs <Guid> >(eh => stub.Payload += eh, eh => stub.Payload -= eh)
            .Do(_ => count++, testScheduler);

            stub.FirePayloadEvent(Guid.NewGuid());
            stub.FirePayloadEvent(Guid.NewGuid());

            Assert.That(count, Is.EqualTo(1));
        }
예제 #9
0
        public void when_payload_event_is_fired_twice_then_the_second_time_the_event_is_not_recieved()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var count = 0;

            EventAsync.FromEvent<DataEventArgs<Guid>>(eh => stub.Payload += eh, eh => stub.Payload -= eh)
                      .Do(_ => count++, testScheduler);

            stub.FirePayloadEvent(Guid.NewGuid());
            stub.FirePayloadEvent(Guid.NewGuid());

            Assert.That(count, Is.EqualTo(1));
        }
예제 #10
0
        public void Retry_exception_is_propogated_through()
        {
            var currentThreadScheduler = new CurrentThreadTaskScheduler();

            var exceptionOccured = false;

            Func <Task <int> > taskProvider = () => Task.Factory.StartNew <int>(() =>
            {
                throw new Exception("Problem");
            }, currentThreadScheduler);

            taskProvider()
            .Retry(taskProvider, 3, _ => true, currentThreadScheduler)
            .CatchAndHandle(ex => exceptionOccured = true, currentThreadScheduler);

            Assert.That(exceptionOccured, Is.True);
        }
예제 #11
0
        public void when_payload_event_fires_then_the_action_is_executed_and_the_payload_is_passed_through()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var result = Guid.Empty;

            EventAsync.FromEvent <DataEventArgs <Guid> >(eh => stub.Payload += eh, eh => stub.Payload -= eh)
            .Do(payload => result = payload.Value, testScheduler);

            var expected = Guid.NewGuid();

            stub.FirePayloadEvent(expected);

            Assert.That(result.Equals(expected), Is.True);
        }
예제 #12
0
        public void when_payload_event_fires_then_the_action_is_executed_and_the_payload_is_passed_through()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var stub = new StubClassWithEvent();

            var result = Guid.Empty;

            EventAsync.FromEvent<DataEventArgs<Guid>>(eh => stub.Payload += eh, eh => stub.Payload -= eh)
                      .Do(payload => result = payload.Value, testScheduler);

            var expected = Guid.NewGuid();

            stub.FirePayloadEvent(expected);

            Assert.That(result.Equals(expected), Is.True);
        }
예제 #13
0
파일: TaskExTests.cs 프로젝트: ganesum/Naru
        public void Retry_exception_is_propogated_through()
        {
            var currentThreadScheduler = new CurrentThreadTaskScheduler();

            var exceptionOccured = false;

            Func<Task<int>> taskProvider = () => Task.Factory.StartNew<int>(() =>
                                                                            {
                                                                                throw new Exception("Problem");
                                                                            }, currentThreadScheduler);

            taskProvider()
                .Retry(taskProvider, 3, _ => true, currentThreadScheduler)
                .CatchAndHandle(ex => exceptionOccured = true, currentThreadScheduler);

            Assert.That(exceptionOccured, Is.True);
        }
예제 #14
0
 public TestTaskScheduler()
 {
     TPL = new CurrentThreadTaskScheduler();
     RX  = new TestScheduler();
 }
 public CurrentThreadTaskSchedulerFactory()
 {
     _scheduler = new CurrentThreadTaskScheduler();
 }
예제 #16
0
파일: TaskExTests.cs 프로젝트: ganesum/Naru
        public void when_no_exception_of_T_is_thrown_then_Catch_is_not_called()
        {
            var testScheduler = new CurrentThreadTaskScheduler();

            var result = false;

            Task.Factory.StartNew(() => { }, testScheduler)
                .Catch<ArgumentNullException>(ex => result = true);

            Assert.That(result, Is.False);
        }