Example #1
0
        public async Task NoItemsCompletesTask()
        {
            Func <MessageResult, object, Task <bool> > callback = (result, state) =>
            {
                return(TaskAsyncHelper.False);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 0);

            using (subscription)
            {
                await subscription.Work().OrTimeout();
            }
        }
Example #2
0
        public async Task FaultedTaskShouldPropagateAsync()
        {
            Func <MessageResult, object, Task <bool> > callback = async(result, state) =>
            {
                await Task.Delay(500);

                await TaskAsyncHelper.FromError(new Exception());

                return(false);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 1);

            using (subscription)
            {
                Task task = subscription.Work();
                await Assert.ThrowsAsync <Exception>(() => task.OrTimeout());

                Assert.True(task.IsFaulted);
            }
        }
Example #3
0
        public async Task CancelledTaskShouldThrowTaskCancelledAsync()
        {
            Func <MessageResult, object, Task <bool> > callback = async(result, state) =>
            {
                await Task.Yield();

                var tcs = new TaskCompletionSource <bool>();
                tcs.TrySetCanceled();
                return(await tcs.Task);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 1);

            using (subscription)
            {
                Task task = subscription.Work();

                await Assert.ThrowsAsync <TaskCanceledException>(() => task.OrTimeout());

                Assert.True(task.IsCanceled);
            }
        }
Example #4
0
        public void FaultedTaskShouldPropagateSync()
        {
            Func <MessageResult, object, Task <bool> > callback = async(result, state) =>
            {
                await TaskAsyncHelper.FromError(new Exception());

                return(false);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 1);

            using (subscription)
            {
                Task task = null;
                TestUtilities.AssertUnwrappedException <Exception>(() =>
                {
                    task = subscription.Work();
                    task.Wait();
                });

                Assert.True(task.IsFaulted);
            }
        }
Example #5
0
        public void CancelledTaskShouldThrowTaskCancelledSync()
        {
            Func <MessageResult, object, Task <bool> > callback = (result, state) =>
            {
                var tcs = new TaskCompletionSource <bool>();
                tcs.TrySetCanceled();
                return(tcs.Task);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 1);

            using (subscription)
            {
                Task task = null;
                TestUtilities.AssertUnwrappedException <TaskCanceledException>(() =>
                {
                    task = subscription.Work();
                    task.Wait();
                });

                Assert.True(task.IsCanceled);
            }
        }
Example #6
0
        public async Task ReturningFalseFromCallbackCompletesTaskAndDisposesSubscription()
        {
            Func <MessageResult, object, Task <bool> > callback = (result, state) =>
            {
                return(TaskAsyncHelper.False);
            };

            var subscription = new TestSubscription("TestSub", new[] { "a" }, callback, 1);

            var disposableMock = new Mock <IDisposable>();

            subscription.Disposable = disposableMock.Object;
            disposableMock.Setup(m => m.Dispose()).Verifiable();

            using (subscription)
            {
                var task = subscription.Work();
                Assert.True(task.IsCompleted);
                await task.OrTimeout();

                disposableMock.Verify(m => m.Dispose(), Times.Once());
            }
        }