Esempio n. 1
0
 private static ButtonBaseClickCommandBehavior GetOrCreateBehavior(ButtonBase buttonBase)
 {
     var behavior = buttonBase.GetValue(clickCommandBehaviorProperty) as ButtonBaseClickCommandBehavior;
     if (behavior == null)
     {
         behavior = new ButtonBaseClickCommandBehavior(buttonBase);
         buttonBase.SetValue(clickCommandBehaviorProperty, behavior);
     }
     return behavior;
 }
        public void ShouldDisableButtonIfCanExecuteFalse()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand() { CanExecuteReturnValue = false };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            Assert.IsTrue(clickableObject.IsEnabled);

            behavior.Command = command;
            Assert.IsFalse(clickableObject.IsEnabled);
        }
        public void ShouldNotThrowWhenCommandSetToNull()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;

            behavior.Command = null;
            clickableObject.RaiseClick();
        }
        public void ShouldObserveClickEvent()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;
            Assert.IsFalse(command.ExecuteCalled);

            clickableObject.RaiseClick();

            Assert.IsTrue(command.ExecuteCalled);
        }
        public void ShouldObserveClickEvent()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;
            Assert.IsFalse(command.ExecuteCalled);

            clickableObject.RaiseClick();

            Assert.IsTrue(command.ExecuteCalled);
        }
        public void ShouldReEnableButtonIfCanExecuteChangedRaises()
        {
            var clickableObject = new MockClickableObject();
            var mockCommand = new MockCommand() { CanExecuteReturnValue = false };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = mockCommand;
            Assert.IsFalse(clickableObject.IsEnabled);

            mockCommand.CanExecuteReturnValue = true;
            mockCommand.RaiseCanExecuteChanged();

            Assert.IsTrue(clickableObject.IsEnabled);
        }
        public void ShouldDisableButtonIfCanExecuteFalse()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand()
            {
                CanExecuteReturnValue = false
            };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            Assert.IsTrue(clickableObject.IsEnabled);

            behavior.Command = command;
            Assert.IsFalse(clickableObject.IsEnabled);
        }
        public void ShouldUpdateEnabledStateIfCanExecuteChangedRaisesOnDelegateCommandAfterCollect()
        {
            var clickableObject = new MockClickableObject();
            var command         = new DelegateCommand <object>(delegate { }, o => true);

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command          = command;
            clickableObject.IsEnabled = false;

            GC.Collect();

            command.RaiseCanExecuteChanged();
            Assert.IsTrue(clickableObject.IsEnabled);
        }
        public void ShouldNotMonitorCanExecuteChangedOnDisconnectedCommand()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;

            behavior.Command = null;

            Assert.IsTrue(clickableObject.IsEnabled);
            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
            Assert.IsTrue(clickableObject.IsEnabled);
        }
        public void ShouldExecuteWithCommandParameter()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();
            var parameter       = new object();
            var behavior        = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command          = command;
            behavior.CommandParameter = parameter;
            Assert.IsNull(command.ExecuteParameter);

            clickableObject.RaiseClick();

            Assert.IsTrue(command.ExecuteCalled);
            Assert.IsNotNull(command.ExecuteParameter);
            Assert.AreSame(parameter, command.ExecuteParameter);
        }
        public void ShouldCallCanExecuteWithParameterWhenSettingCommand()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();
            var parameter       = new object();
            var behavior        = new ButtonBaseClickCommandBehavior(clickableObject);

            command.CanExecuteReturnValue = false;
            behavior.CommandParameter     = parameter;
            Assert.IsNull(command.CanExecuteParameter);
            Assert.IsTrue(clickableObject.IsEnabled);

            behavior.Command = command;

            Assert.IsNotNull(command.CanExecuteParameter);
            Assert.AreSame(parameter, command.CanExecuteParameter);
            Assert.IsFalse(clickableObject.IsEnabled);
        }
        public void DisposedControlDoesNotThrowOnCanExecuteChanged()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;

            WeakReference controlWeakReference = new WeakReference(clickableObject);

            clickableObject = null;
            behavior        = null;
            GC.Collect();

            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
        }
        public void CommandShouldNotKeepButtonAlive()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;

            WeakReference controlWeakReference = new WeakReference(clickableObject);

            clickableObject = null;
            behavior        = null;
            GC.Collect();

            Assert.IsFalse(controlWeakReference.IsAlive);
            GC.KeepAlive(command);
        }
        public void ShouldReEnableButtonIfCanExecuteChangedRaises()
        {
            var clickableObject = new MockClickableObject();
            var mockCommand     = new MockCommand()
            {
                CanExecuteReturnValue = false
            };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = mockCommand;
            Assert.IsFalse(clickableObject.IsEnabled);

            mockCommand.CanExecuteReturnValue = true;
            mockCommand.RaiseCanExecuteChanged();

            Assert.IsTrue(clickableObject.IsEnabled);
        }
        public void ChangingCommandsShouldNotExecuteOldCommand()
        {
            var clickableObject = new MockClickableObject();
            var originalCommand = new MockCommand()
            {
                CanExecuteReturnValue = true
            };
            var newCommand = new MockCommand()
            {
                CanExecuteReturnValue = true
            };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = originalCommand;

            behavior.Command = newCommand;
            clickableObject.RaiseClick();

            Assert.IsFalse(originalCommand.ExecuteCalled);
        }
        public void DisposedControlStopsMonitoringCommandAfterFirstCanExecuteChanged()
        {
            var clickableObject = new MockClickableObject();
            var command         = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);

            behavior.Command = command;

            clickableObject = null;
            WeakReference commandReference = new WeakReference(command);

            GC.Collect();

            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
            command = null;

            GC.Collect();

            Assert.IsFalse(commandReference.IsAlive);
        }
        public void ChangingCommandsShouldExecuteOnNewCommand()
        {
            var clickableObject = new MockClickableObject();
            var originalCommand = new MockCommand() { CanExecuteReturnValue = true };
            var newCommand = new MockCommand() { CanExecuteReturnValue = true };

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = originalCommand;

            clickableObject.RaiseClick();
            Assert.IsFalse(newCommand.ExecuteCalled);

            behavior.Command = newCommand;
            clickableObject.RaiseClick();
            Assert.IsTrue(newCommand.ExecuteCalled);
        }
        public void ShouldNotThrowWhenCommandSetToNull()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;

            behavior.Command = null;
            clickableObject.RaiseClick();
        }
        public void ShouldCallCanExecuteWithParameterWhenSettingCommand()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();
            var parameter = new object();
            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            command.CanExecuteReturnValue = false;
            behavior.CommandParameter = parameter;
            Assert.IsNull(command.CanExecuteParameter);
            Assert.IsTrue(clickableObject.IsEnabled);

            behavior.Command = command;

            Assert.IsNotNull(command.CanExecuteParameter);
            Assert.AreSame(parameter, command.CanExecuteParameter);
            Assert.IsFalse(clickableObject.IsEnabled);
        }
        public void ShouldUpdateEnabledStateIfCanExecuteChangedRaisesOnDelegateCommandAfterCollect()
        {
            var clickableObject = new MockClickableObject();
            var command = new DelegateCommand<object>(delegate { }, o => true);

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;
            clickableObject.IsEnabled = false;

            GC.Collect();

            command.RaiseCanExecuteChanged();
            Assert.IsTrue(clickableObject.IsEnabled);
        }
        public void ShouldExecuteWithCommandParameter()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();
            var parameter = new object();
            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;
            behavior.CommandParameter = parameter;
            Assert.IsNull(command.ExecuteParameter);

            clickableObject.RaiseClick();

            Assert.IsTrue(command.ExecuteCalled);
            Assert.IsNotNull(command.ExecuteParameter);
            Assert.AreSame(parameter, command.ExecuteParameter);
        }
        public void DisposedControlStopsMonitoringCommandAfterFirstCanExecuteChanged()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;

            clickableObject = null;
            WeakReference commandReference = new WeakReference(command);
            GC.Collect();

            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
            command = null;

            GC.Collect();

            Assert.IsFalse(commandReference.IsAlive);
        }
        public void DisposedControlDoesNotThrowOnCanExecuteChanged()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;

            WeakReference controlWeakReference = new WeakReference(clickableObject);
            clickableObject = null;
            behavior = null;
            GC.Collect();

            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
        }
        public void CommandShouldNotKeepButtonAlive()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;

            WeakReference controlWeakReference = new WeakReference(clickableObject);
            clickableObject = null;
            behavior = null;
            GC.Collect();

            Assert.IsFalse(controlWeakReference.IsAlive);
            GC.KeepAlive(command);
        }
        public void ShouldNotMonitorCanExecuteChangedOnDisconnectedCommand()
        {
            var clickableObject = new MockClickableObject();
            var command = new MockCommand();

            var behavior = new ButtonBaseClickCommandBehavior(clickableObject);
            behavior.Command = command;

            behavior.Command = null;

            Assert.IsTrue(clickableObject.IsEnabled);
            command.CanExecuteReturnValue = false;
            command.RaiseCanExecuteChanged();
            Assert.IsTrue(clickableObject.IsEnabled);
        }