Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }