public async Task ICommand_NoParameter_CanExecuteChanged_DoesNotAllowMultipleExecutions_Test()
        {
            // Arrange
            var canExecuteChangedCount = 0;

            ICommand command = new AsyncValueCommand(() => IntParameterTask(Delay), allowsMultipleExecutions: false);

            command.CanExecuteChanged += handleCanExecuteChanged;

            void handleCanExecuteChanged(object sender, EventArgs e) => canExecuteChangedCount++;

            // Act
            command.Execute(null);

            // Assert
            Assert.False(command.CanExecute(null));

            // Act
            await IntParameterTask(Delay);
            await IntParameterTask(Delay);

            // Assert
            Assert.True(command.CanExecute(null));
            Assert.Equal(2, canExecuteChangedCount);
        }
        public async Task ICommand_ExecuteAsync_ValueTypeParameter_Test()
        {
            //Arrange
            InvalidCommandParameterException?actualInvalidCommandParameterException   = null;
            InvalidCommandParameterException expectedInvalidCommandParameterException = new InvalidCommandParameterException(typeof(int));


            ICommand command = new AsyncValueCommand <int>(IntParameterTask);

            //Act
            try
            {
                command.Execute(null);
                await NoParameterTask();
                await NoParameterTask();
            }
            catch (InvalidCommandParameterException e)
            {
                actualInvalidCommandParameterException = e;
            }

            //Assert
            Assert.IsNotNull(actualInvalidCommandParameterException);
            Assert.AreEqual(expectedInvalidCommandParameterException.Message, actualInvalidCommandParameterException?.Message);
        }
Ejemplo n.º 3
0
        public async Task ICommand_NoParameter_CanExecuteChanged_AllowsMultipleExecutions_Test()
        {
            // Arrange
            var canExecuteChangedCount = 0;

            ICommand command = new AsyncValueCommand(() => IntParameterTask(Delay));

            command.CanExecuteChanged += handleCanExecuteChanged;

            void handleCanExecuteChanged(object?sender, EventArgs e) => canExecuteChangedCount++;

            // Act
            command.Execute(null);

            // Assert
            Assert.IsTrue(command.CanExecute(null));

            // Act
            await IntParameterTask(Delay).ConfigureAwait(false);
            await IntParameterTask(Delay).ConfigureAwait(false);

            // Assert
            Assert.IsTrue(command.CanExecute(null));
            Assert.AreEqual(0, canExecuteChangedCount);

            command.CanExecuteChanged -= handleCanExecuteChanged;
        }
        public void IAsyncCommand_Execute_InvalidReferenceParameter()
        {
            // Arrange
            IAsyncValueCommand <int, bool> command = new AsyncValueCommand <int, bool>(IntParameterTask, CanExecuteTrue);

            // Act

            // Assert
            Assert.Throws <InvalidCommandParameterException>(() => command.Execute("Hello World"));
        }
        public void IAsyncCommand_Execute_InvalidValueTypeParameter()
        {
            // Arrange
            IAsyncValueCommand <string, bool> command = new AsyncValueCommand <string, bool>(StringParameterTask, CanExecuteTrue);

            // Act

            // Assert
            Assert.Throws <InvalidCommandParameterException>(() => command.Execute(true));
        }
        public async Task ICommand_Execute_StringParameter_Test(string parameter)
        {
            //Arrange
            ICommand command = new AsyncValueCommand <string>(StringParameterTask);

            //Act
            command.Execute(parameter);
            await NoParameterTask();

            //Assert
        }
        public async Task ICommand_Execute_IntParameter_Test(int parameter)
        {
            //Arrange
            ICommand command = new AsyncValueCommand <int>(IntParameterTask);

            //Act
            command.Execute(parameter);
            await NoParameterTask();

            //Assert
        }
Ejemplo n.º 8
0
        public async Task ICommand_NoParameter_CanExecuteChanged_DoesNotAllowMultipleExecutions_Test()
        {
            // Arrange
            var semaphoreSlim              = new SemaphoreSlim(1, 1);
            var canExecuteChangedCount     = 0;
            var handleCanExecuteChangedTCS = new TaskCompletionSource <int>();

            ICommand command = new AsyncValueCommand(() => IntParameterTask(Delay), allowsMultipleExecutions: false);

            command.CanExecuteChanged += handleCanExecuteChanged;

            async void handleCanExecuteChanged(object?sender, EventArgs e)
            {
                await semaphoreSlim.WaitAsync().ConfigureAwait(false);

                try
                {
                    if (++canExecuteChangedCount is 2)
                    {
                        command.CanExecuteChanged -= handleCanExecuteChanged;
                        handleCanExecuteChangedTCS.SetResult(canExecuteChangedCount);
                    }
                }
                finally
                {
                    semaphoreSlim.Release();
                }
            }

            // Act
            command.Execute(null);

            // Assert
            Assert.False(command.CanExecute(null));

            // Act
            var handleCanExecuteChangedResult = await handleCanExecuteChangedTCS.Task.ConfigureAwait(false);

            // Assert
            Assert.IsTrue(command.CanExecute(null));
            Assert.AreEqual(2, canExecuteChangedCount);
            Assert.AreEqual(canExecuteChangedCount, handleCanExecuteChangedResult);
        }
        public async Task ICommand_Execute_InvalidReferenceTypeParameter_Test()
        {
            // Arrange
            InvalidCommandParameterException actualInvalidCommandParameterException = null;
            var expectedInvalidCommandParameterException = new InvalidCommandParameterException(typeof(int), typeof(string));

            ICommand command = new AsyncValueCommand <int>(IntParameterTask);

            // Act
            try
            {
                command.Execute("Hello World");
                await NoParameterTask();
                await NoParameterTask();
            }
            catch (InvalidCommandParameterException e)
            {
                actualInvalidCommandParameterException = e;
            }

            // Assert
            Assert.NotNull(actualInvalidCommandParameterException);
            Assert.Equal(expectedInvalidCommandParameterException.Message, actualInvalidCommandParameterException?.Message);
        }
        public async Task ICommand_Parameter_CanExecuteChanged_AllowsMultipleExecutions_Test()
        {
            // Arrange
            var canExecuteChangedCount = 0;

            ICommand command = new AsyncValueCommand <int>(IntParameterTask);

            command.CanExecuteChanged += handleCanExecuteChanged;

            void handleCanExecuteChanged(object sender, EventArgs e) => canExecuteChangedCount++;

            // Act
            command.Execute(Delay);

            // Assert
            Assert.True(command.CanExecute(null));

            // Act
            await IntParameterTask(Delay);

            // Assert
            Assert.True(command.CanExecute(null));
            Assert.Equal(0, canExecuteChangedCount);
        }
Ejemplo n.º 11
0
        public async Task ICommand_Execute_InvalidValueTypeParameter_Test()
        {
            // Arrange
            InvalidCommandParameterException?actualInvalidCommandParameterException = null;
            var expectedInvalidCommandParameterException = new InvalidCommandParameterException(typeof(string), typeof(int));

            ICommand command = new AsyncValueCommand <string>(StringParameterTask);

            // Act
            try
            {
                command.Execute(Delay);
                await NoParameterTask().ConfigureAwait(false);
                await NoParameterTask().ConfigureAwait(false);
            }
            catch (InvalidCommandParameterException e)
            {
                actualInvalidCommandParameterException = e;
            }

            // Assert
            Assert.IsNotNull(actualInvalidCommandParameterException);
            Assert.AreEqual(expectedInvalidCommandParameterException.Message, actualInvalidCommandParameterException?.Message);
        }