public void SafeContinueWith_DefaultExceptionHandlerSet_HandlesException() { SpecificException specificException = new SpecificException(); Action <Exception> defaultExceptionHandler = new Mock <Action <Exception> >().Object; SafeExecutionHelpers.Initialize(); var mockHelpers = new Mock <ISafeExecutionHelpers>(); //Crux - DefaultHandler returns non-null delegate mockHelpers.SetupGet(h => h.DefaultExceptionHandler).Returns(defaultExceptionHandler); SafeExecutionHelpers.SetImplementation(mockHelpers.Object); var dts = new DeterministicTaskScheduler(shouldThrowExceptions: false); var sut = new SafeTask(); sut.SafeContinueWith <Exception>( Task.Factory.StartNew( () => throw specificException, CancellationToken.None, TaskCreationOptions.None, dts), null, dts); dts.RunTasksUntilIdle(); Assert.Contains(specificException, dts.Exceptions); mockHelpers.Verify(h => h.HandleException <Exception>(specificException, null)); SafeExecutionHelpers.RevertToDefaultImplementation(); }
public void SafeContinueWith_OnExceptionExceptionSet_HandlesException() { SpecificException specificException = new SpecificException(); Action <Exception> onException = new Mock <Action <Exception> >().Object; SafeExecutionHelpers.Initialize(); var mockHelpers = new Mock <ISafeExecutionHelpers>(); SafeExecutionHelpers.SetImplementation(mockHelpers.Object); var dts = new DeterministicTaskScheduler(shouldThrowExceptions: false); var sut = new SafeTask(); sut.SafeContinueWith <Exception>( Task.Factory.StartNew( () => throw specificException, CancellationToken.None, TaskCreationOptions.None, dts), onException, //The crux dts); dts.RunTasksUntilIdle(); Assert.Contains(specificException, dts.Exceptions); mockHelpers.Verify(h => h.HandleException(specificException, onException)); SafeExecutionHelpers.RevertToDefaultImplementation(); }
public void SafeContinueWith_NothingSet_HandleExceptionRuns() { SpecificException specificException = new SpecificException(); SafeExecutionHelpers.RevertToDefaultImplementation(); var mockHelpers = new Mock <ISafeExecutionHelpers>(); SafeExecutionHelpers.Implementation = mockHelpers.Object; var dts = new DeterministicTaskScheduler(shouldThrowExceptions: false); var sut = new SafeTask(); sut.SafeContinueWith <Exception>( Task.Factory.StartNew( () => throw specificException, CancellationToken.None, TaskCreationOptions.None, dts), null, dts); dts.RunTasksUntilIdle(); Assert.Contains(specificException, dts.Exceptions); mockHelpers.Verify(h => h.HandleException <Exception>(specificException, null)); SafeExecutionHelpers.RevertToDefaultImplementation(); }
public void HandleException_SpecificException_SpecificExceptionOnException_Handled() { SafeExecutionHelpers.Initialize(); SafeExecutionHelpers.RemoveDefaultExceptionHandler(); var exception = new SpecificException(); var handler = new Mock <Action <SpecificException> >(); SafeExecutionHelpers.HandleException(exception, handler.Object); handler.Verify(h => h.Invoke(exception)); }
public void HandleException_DefaultHandlerSet_SpecificException_ExceptionOnException__DefaultNotInvoked() { SafeExecutionHelpers.Initialize(); SafeExecutionHelpers.RemoveDefaultExceptionHandler(); var defaultHandler = new Mock <Action <Exception> >(); SafeExecutionHelpers.SetDefaultExceptionHandler(defaultHandler.Object); var exception = new SpecificException(); var handler = new Mock <Action <Exception> >(); SafeExecutionHelpers.HandleException(exception, handler.Object); Assert.Empty(defaultHandler.Invocations); }