public void CanExecute()
        {
            var canExecuteRan = false;
            var cmd           = new DarkCommand(() => { }, () =>
            {
                canExecuteRan = true;
                return(true);
            });

            Assert.True(cmd.CanExecute(null));
            Assert.True(canExecuteRan);
        }
        public void GenericCanExecute()
        {
            string result = null;
            var    cmd    = new DarkCommand <string>(s => { }, s =>
            {
                result = s;
                return(true);
            });

            Assert.True(cmd.CanExecute("Foo"));
            Assert.Equal("Foo", result);
        }
        public void CanExecuteIgnoresParameterIfValueTypeAndSetToNull()
        {
            var command = new DarkCommand <int>(context => { }, context => true);

            Assert.Throws <InvalidCommandParameterException>(() => command.CanExecute(null));
        }
        public void CanExecuteUsesParameterIfNullableAndSetToNull()
        {
            var command = new DarkCommand <int?>(context => { }, context => true);

            Assert.True(command.CanExecute(null), "null is a valid value for a Nullable<int> type");
        }
        public void CanExecuteUsesParameterIfReferenceTypeAndSetToNull()
        {
            var command = new DarkCommand <FakeChildContext>(context => { }, context => true);

            Assert.True(command.CanExecute(null), "null is a valid value for a reference type");
        }
        public void CanExecuteReturnsFalseIfParameterIsWrongValueType()
        {
            var command = new DarkCommand <int>(context => { }, context => true);

            Assert.Throws <InvalidCommandParameterException>(() => command.CanExecute(10.5));
        }
        public void CanExecuteReturnsFalseIfParameterIsWrongReferenceType()
        {
            var command = new DarkCommand <FakeChildContext>(context => { }, context => true);

            Assert.Throws <InvalidCommandParameterException>(() => command.CanExecute(new FakeParentContext()));
        }
        public void Constructor()
        {
            var cmd = new DarkCommand(() => { });

            Assert.True(cmd.CanExecute(null));
        }