public CoconaCompletionCandidatesMetadata GetMetadata(CommandArgumentDescriptor argument)
        {
            var attr = argument.ParameterAttributes.OfType <CompletionCandidatesAttribute>().SingleOrDefault();

            if (attr == null)
            {
                if (argument.ArgumentType.IsEnum)
                {
                    return(new CoconaCompletionCandidatesMetadata(
                               CompletionCandidateType.Provider,
                               typeof(EnumCompletionCandidatesProvider),
                               argument
                               ));
                }

                return(new CoconaCompletionCandidatesMetadata(
                           CompletionCandidateType.Default,
                           typeof(StaticCompletionCandidatesProvider),
                           argument
                           ));
            }
            else
            {
                return(new CoconaCompletionCandidatesMetadata(
                           attr.CandidateType,
                           attr.CandidatesProviderType,
                           argument
                           ));
            }
        }
        public void HasAttribute()
        {
            var argument = new CommandArgumentDescriptor(
                typeof(int),
                "test",
                0,
                "",
                CoconaDefaultValue.None,
                new Attribute[]
            {
                new CompletionCandidatesAttribute(new [] { "Alice", "Karen" }),
            }
                );
            var metadata = new CoconaCompletionCandidatesMetadata(
                CompletionCandidateType.Provider,
                typeof(StaticKeywordsCompletionCandidatesProvider),
                argument
                );

            var provider   = new StaticKeywordsCompletionCandidatesProvider();
            var candidates = provider.GetCandidates(metadata);

            candidates.ResultType.Should().Be(CompletionCandidateResultType.Keywords);
            candidates.Values.Should().HaveCount(2);
            candidates.Values[0].Value.Should().Be("Alice");
            candidates.Values[1].Value.Should().Be("Karen");
        }
示例#3
0
        public void Argument_EnumValues()
        {
            var argument = new CommandArgumentDescriptor(
                typeof(TestEnum),
                "test",
                0,
                "",
                CoconaDefaultValue.None,
                new Attribute[] { }
                );
            var metadata = new CoconaCompletionCandidatesMetadata(
                CompletionCandidateType.Provider,
                typeof(EnumCompletionCandidatesProvider),
                argument
                );

            var provider   = new EnumCompletionCandidatesProvider();
            var candidates = provider.GetCandidates(metadata);

            candidates.ResultType.Should().Be(CompletionCandidateResultType.Keywords);
            candidates.Values.Should().HaveCount(2);
            candidates.Values[0].Value.Should().Be("Alice");
            candidates.Values[0].Description.Should().Be(string.Empty);
            candidates.Values[1].Value.Should().Be("Karen");
            candidates.Values[1].Description.Should().Be(string.Empty);
        }
示例#4
0
 private object?ConvertTo(CommandArgumentDescriptor argument, Type type, string value)
 {
     try
     {
         return(Validate(argument, _valueConverter.ConvertTo(type, value)));
     }
     catch (Exception ex) when(!(ex is ParameterBinderException))
     {
         throw new ParameterBinderException(ParameterBinderResult.TypeNotSupported, $"Argument '{argument.Name}' requires {type.Name} value. '{value}' cannot be converted to {type.Name} value.", argument: argument, innerException: ex);
     }
 }
示例#5
0
 public CoconaCompletionCandidatesMetadata(
     CompletionCandidateType candidateType,
     Type candidatesProviderType,
     CommandArgumentDescriptor commandArgument
     )
 {
     CandidateType          = candidateType;
     CandidatesProviderType = candidatesProviderType;
     ParameterType          = commandArgument.ArgumentType;
     ParameterAttributes    = commandArgument.ParameterAttributes;
     CommandOption          = null;
     CommandArgument        = commandArgument;
 }
示例#6
0
        public void Argument_Default()
        {
            var argument = new CommandArgumentDescriptor(
                typeof(int),
                "test",
                0,
                "",
                CoconaDefaultValue.None,
                new Attribute[] { }
                );
            var metadata = new CoconaCompletionCandidatesMetadata(
                CompletionCandidateType.Provider,
                typeof(EnumCompletionCandidatesProvider),
                argument
                );

            var provider   = new EnumCompletionCandidatesProvider();
            var candidates = provider.GetCandidates(metadata);

            candidates.ResultType.Should().Be(CompletionCandidateResultType.Default);
        }
示例#7
0
 public StaticCompletionCandidates GetStaticCandidatesFromArgument(CommandArgumentDescriptor argument)
 {
     return(new StaticCompletionCandidates(CompletionCandidateResult.Default));
 }
示例#8
0
 public StaticCompletionCandidates GetStaticCandidatesFromArgument(CommandArgumentDescriptor argument)
 {
     return(GetStaticCandidatesCore(_completionCandidatesMetadataFactory.GetMetadata(argument)));
 }
示例#9
0
 private string GetArgumentValues(CommandArgumentDescriptor argument)
 {
     return(GetArgumentValuesCore(_completionCandidates.GetStaticCandidatesFromArgument(argument), argument.Name));
 }