public void Execute_WithNotNullParameter_IgnoresParameter(object parameter)
        {
            var func    = Substitute.For <Action>();
            var command = Command.Create(func);

            command.Execute(parameter);

            func.Received(1).Invoke();
        }
        public void CanExecute_AfterCanExecuteTargetGarbageCollected_ReturnsFalse()
        {
            var command = Command.WithGarbageCollectableCanExecuteTarget(() => { }, () => true);

            GC.Collect();

            var result = command.CanExecute(null);

            Assert.False(result);
        }
        public void CanExecute_AfterCanExecuteTargetGarbageCollected_ReturnsFalse <T>(T parameter)
        {
            var command = Command.WithGarbageCollectableCanExecuteTarget <T>(_ => { }, _ => true);

            GC.Collect();

            var result = command.CanExecute(parameter);

            Assert.False(result);
        }
        public void Execute_AfterCanExecuteTargetGarbageCollected_DoesNotExecute()
        {
            var execute = Substitute.For <Action>();
            var command = Command.WithGarbageCollectableCanExecuteTarget(execute, () => true);

            GC.Collect();

            command.Execute(null);

            execute.DidNotReceive().Invoke();
        }
        public void Execute_AfterCanExecuteTargetGarbageCollected_DoesNotExecute <T>(T parameter)
        {
            var execute = Substitute.For <Action <T> >();
            var command = Command.WithGarbageCollectableCanExecuteTarget(execute, _ => true);

            GC.Collect();

            command.Execute(parameter);

            execute.DidNotReceive().Invoke(Arg.Any <T>());
        }
        public void Execute_WithUnsupportedParameterType_IgnoresParameter <TCommand, TParameter>(
            TCommand commandType,
            TParameter parameter)
        {
            var execute = Substitute.For <Action <TCommand> >();
            var command = Command.Create(execute);

            command.Execute(parameter);

            execute.DidNotReceive().Invoke(Arg.Any <TCommand>());
        }