コード例 #1
0
        public async Task CanExecuteChanged_RemoveHandler_HandlerIsNotCalled()
        {
            var commandExecuted = false;

            _canExecuteChangedRaised = false;

            var command = new AsyncSimpleRelayCommand(() =>
            {
                // ReSharper disable once AccessToModifiedClosure
                Assert.False(commandExecuted);
                commandExecuted = true;
                return(Task.CompletedTask);
            });

            command.CanExecuteChanged += CommandOnCanExecuteChanged;

            command.Execute(null);

            await Task.Delay(100);

            Assert.True(commandExecuted);
            Assert.True(_canExecuteChangedRaised);

            _canExecuteChangedRaised = false;
            commandExecuted          = false;

            command.CanExecuteChanged -= CommandOnCanExecuteChanged;

            command.Execute(null);

            await Task.Delay(100);

            Assert.True(commandExecuted);
            Assert.False(_canExecuteChangedRaised);
        }
コード例 #2
0
        public async Task Execute_Wait_ActionIsExecuted()
        {
            var commandExecuted         = false;
            var canExecuteChangedRaised = false;

            var command = new AsyncSimpleRelayCommand(() =>
            {
                Assert.False(commandExecuted);
                commandExecuted = true;
                return(Task.CompletedTask);
            });

            command.CanExecuteChanged += (_, _) =>
            {
                Assert.False(canExecuteChangedRaised);
                canExecuteChangedRaised = true;
            };

            command.Execute(null);

            await Task.Delay(100);

            Assert.True(commandExecuted);
            Assert.True(canExecuteChangedRaised);
        }
コード例 #3
0
        public async Task ExecuteAsync_ExceptionInExecute_ErrorHandlerIsCalled()
        {
            Exception handledException = null;

            var errorHandler = A.Fake <IErrorHandler>();

            A.CallTo(() => errorHandler.HandleException(A <Exception> .Ignored)).Invokes(call => handledException = call.Arguments.Get <Exception>(0));

            var command = new AsyncSimpleRelayCommand(() =>
            {
                if (handledException == null)
                {
                    throw new InvalidOperationException();
                }
                return(Task.CompletedTask);
            }, errorHandler);

            command.Execute(null);

            await Task.Delay(100);

            Assert.IsType <InvalidOperationException>(handledException);
        }