public async Task Retry_CompletesAfterMaxRetriesExceeded() { // Arrange var counter = 3; var e = new Exception(); IAsyncOperation OpFactory() { --counter; return(AsyncResult.FromException(e)); } // Act var op = AsyncResult.Retry(OpFactory, 1, 1); try { await op; } catch { } // Assert AssertFaulted(op, e); Assert.Equal(2, counter); }
public async Task ToTask_FailsWhenSourceFails() { // Arrange var op = AsyncResult.FromException(new Exception()); var task = op.ToTask(); // Act/Assert await Assert.ThrowsAsync <Exception>(() => task); }
public void FromException_ReturnsCanceledOperation() { // Arrange var e = new OperationCanceledException(); // Act var op = AsyncResult.FromException(e); // Assert AssertCanceled(op, e); Assert.True(op.CompletedSynchronously); }
public void FromException_ReturnsFailedOperation() { // Arrange var e = new InvalidCastException(); // Act var op = AsyncResult.FromException(e); // Assert AssertFaulted(op, e); Assert.True(op.CompletedSynchronously); }
public async Task ContinueWth_ExecutesOnAntecedentFailure(AsyncContinuationOptions options, bool expectedCalled) { // Arrange var op = AsyncResult.FromException(new Exception()); var continuationCalled = false; var continuationCanceled = false; var continuation = op.ContinueWith(o => continuationCalled = true, options); // Act try { await continuation; } catch (OperationCanceledException) { continuationCanceled = true; } // Assert Assert.Equal(expectedCalled, continuationCalled); Assert.Equal(!expectedCalled, continuationCanceled); }
public async Task Unwrap_FailsIfInnerOperationFails() { // Arrange var expectedException = new Exception(); var actualException = default(Exception); var op1 = AsyncResult.FromException(expectedException); var op2 = AsyncResult.FromResult(op1); var op = op2.Unwrap(); // Act try { await op; } catch (Exception e) { actualException = e; } // Assert Assert.True(op.IsFaulted); Assert.Equal(expectedException, actualException); }
public async Task Retry_CompletesWhenSourceCompletes() { // Arrange var counter = 3; IAsyncOperation OpFactory() { if (--counter > 0) { return(AsyncResult.FromException(new Exception())); } else { return(AsyncResult.Delay(1)); } } // Act var op = AsyncResult.Retry(OpFactory, 1); await op; // Assert AssertCompleted(op); }