Example #1
0
        public void AsyncValueCommand_ChangeCanExecute_Test()
        {
            // Arrange
            var canCommandExecute       = false;
            var didCanExecuteChangeFire = false;

            var command = new AsyncValueCommand(NoParameterTask, commandCanExecute);

            command.CanExecuteChanged += handleCanExecuteChanged;

            bool commandCanExecute(object parameter) => canCommandExecute;

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

            // Act
            canCommandExecute = true;

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

            // Act
#pragma warning disable CS0618 // Type or member is obsolete
            command.ChangeCanExecute();
#pragma warning restore CS0618 // Type or member is obsolete

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

            void handleCanExecuteChanged(object sender, EventArgs e) => didCanExecuteChangeFire = true;
        }
Example #2
0
        public async Task AsyncValueCommand_ChangeCanExecute_Test()
        {
            // Arrange
            var semaphoreSlim = new SemaphoreSlim(1, 1);
            var handleCanExecuteChangedTCS = new TaskCompletionSource <object?>();

            var canCommandExecute       = false;
            var didCanExecuteChangeFire = false;

            var command = new AsyncValueCommand(NoParameterTask, commandCanExecute);

            command.CanExecuteChanged += handleCanExecuteChanged;

            bool commandCanExecute(object?parameter) => canCommandExecute;

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

            // Act
            canCommandExecute = true;

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

            // Act
            command.ChangeCanExecute();
            await handleCanExecuteChangedTCS.Task.ConfigureAwait(false);

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

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

                try
                {
                    command.CanExecuteChanged -= handleCanExecuteChanged;
                    didCanExecuteChangeFire    = true;
                    handleCanExecuteChangedTCS.SetResult(null);
                }
                finally
                {
                    semaphoreSlim.Release();
                }
            }
        }
Example #3
0
        public async Task AsyncValueCommand_ChangeCanExecute_Test()
        {
            // Arrange
            var handleCanExecuteChangedTCS = new TaskCompletionSource <object>();

            var canCommandExecute       = false;
            var didCanExecuteChangeFire = false;

            var command = new AsyncValueCommand(NoParameterTask, commandCanExecute);

            command.CanExecuteChanged += handleCanExecuteChanged;

            bool commandCanExecute(object parameter) => canCommandExecute;

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

            // Act
            canCommandExecute = true;

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

            // Act
#pragma warning disable CS0618 // Type or member is obsolete
            command.ChangeCanExecute();
            await handleCanExecuteChangedTCS.Task;
#pragma warning restore CS0618 // Type or member is obsolete

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

            void handleCanExecuteChanged(object sender, EventArgs e)
            {
                didCanExecuteChangeFire = true;
                handleCanExecuteChangedTCS.SetResult(null);
            }
        }