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(); } }
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); } }
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); } }
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); } }
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); } }
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()); } }