예제 #1
0
        public void NullConflictArrayThrows()
        {
            var attribute = new NamedArgumentAttribute(ArgumentFlags.AtMostOnce);

            Action setNull = () => attribute.ConflictsWith = null;

            setNull.ShouldThrow <ArgumentNullException>();
        }
예제 #2
0
        public void NullLongNameIsOkay()
        {
            var attribute = new NamedArgumentAttribute(ArgumentFlags.AtMostOnce)
            {
                LongName = null
            };

            attribute.LongName.Should().BeNull();
        }
예제 #3
0
        public void NonEmptyLongNameIsOkay()
        {
            var attribute = new NamedArgumentAttribute(ArgumentFlags.AtMostOnce)
            {
                LongName = "Xyzzy"
            };

            attribute.LongName.Should().Be("Xyzzy");
        }
예제 #4
0
        public void ParameterlessConstructorDefaults()
        {
            var namedAttribute = new NamedArgumentAttribute();

            namedAttribute.Flags.Should().Be(ArgumentFlags.Optional);

            var positionalAttribute = new PositionalArgumentAttribute();

            positionalAttribute.Flags.Should().Be(ArgumentFlags.Optional);
        }
예제 #5
0
        public void EmptyLongNameThrowsOnRetrieval()
        {
            var attribute = new NamedArgumentAttribute(ArgumentFlags.AtMostOnce);

            Action setEmpty = () => attribute.LongName = string.Empty;

            setEmpty.ShouldNotThrow();

            Action getEmpty = () => { var x = attribute.LongName; };

            getEmpty.ShouldThrow <InvalidArgumentSetException>();
        }
예제 #6
0
        private ArgumentDefinition CreateArg <T>(bool required = false, object defaultValue = null)
        {
            var argSet = new ArgumentSetDefinition();
            var attrib = new NamedArgumentAttribute(required ? ArgumentFlags.Required : ArgumentFlags.Optional);

            if (defaultValue != null)
            {
                attrib.DefaultValue = defaultValue;
            }

            return(new ArgumentDefinition(
                       typeof(TestArguments <T>).GetTypeInfo().GetMember(nameof(TestArguments <T> .Value)).Single(),
                       attrib,
                       argSet));
        }
예제 #7
0
        private void AppendArgHelpText(StringBuilder sb, char argPrefix, NamedArgumentAttribute paramAttrib)
        {
            string s = string.Format(
                "{0}{1}, {0}{0}{2}",
                argPrefix,
                paramAttrib.ShortName,
                paramAttrib.LongName);

            if ((paramAttrib.MetaVar != null) && (paramAttrib.MetaVar != paramAttrib.ShortName.ToString()))
            {
                string format = " <{0}>";

                if (paramAttrib.NumArgs < 1)
                {
                    format = " [<{0}>]";
                }

                s += string.Format(format, paramAttrib.MetaVar);
            }

            sb.Append("    ");
            sb.AppendFormat($"{{0,{-DescriptionDistance}}}{{1}}", s, paramAttrib.Description);
            sb.AppendLine();
        }
예제 #8
0
        void BindNamed(object commando, PropertyInfo property, List <CommandLineParameter> parameters, NamedArgumentAttribute attribute, BindingContext context)
        {
            var name      = attribute.Name;
            var shortHand = attribute.ShortHand;
            var parameter = parameters.Where(p => p is NamedCommandLineParameter)
                            .Cast <NamedCommandLineParameter>()
                            .SingleOrDefault(p => p.Name == name || p.Name == shortHand);

            var value = parameter != null
                            ? Mutate(parameter, property)
                            : attribute.Default != null
                                  ? Mutate(attribute.Default, property)
                                  : null;

            if (value == null)
            {
                context.Report.PropertiesNotBound.Add(property);

                if (!attribute.Required)
                {
                    return;
                }

                throw Ex("Could not find parameter matching required parameter named {0}", name);
            }

            property.SetValue(commando, value, null);

            context.Report.PropertiesBound.Add(property);
        }