public CoconaCompletionCandidatesMetadata GetMetadata(CommandOptionDescriptor option) { var attr = option.ParameterAttributes.OfType <CompletionCandidatesAttribute>().SingleOrDefault(); if (attr == null) { if (option.OptionType.IsEnum) { return(new CoconaCompletionCandidatesMetadata( CompletionCandidateType.Provider, typeof(EnumCompletionCandidatesProvider), option )); } return(new CoconaCompletionCandidatesMetadata( CompletionCandidateType.Default, typeof(StaticCompletionCandidatesProvider), option )); } else { return(new CoconaCompletionCandidatesMetadata( attr.CandidateType, attr.CandidatesProviderType, option )); } }
public void Option_EnumValues() { var option = new CommandOptionDescriptor( typeof(TestEnum), "test", Array.Empty <char>(), "", CoconaDefaultValue.None, string.Empty, CommandOptionFlags.None, new Attribute[] { } ); var metadata = new CoconaCompletionCandidatesMetadata( CompletionCandidateType.Provider, typeof(EnumCompletionCandidatesProvider), option ); 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); }
public void OnTheFly() { var serviceProvider = new ServiceCollection().BuildServiceProvider(); var activator = new CoconaInstanceActivator(); var option = new CommandOptionDescriptor( typeof(int), "test", Array.Empty <char>(), "", CoconaDefaultValue.None, string.Empty, CommandOptionFlags.None, new Attribute[] { } ); var factory = new CoconaCompletionCandidatesProviderFactory(serviceProvider, activator); var metadata = new CoconaCompletionCandidatesMetadata( CompletionCandidateType.Provider, typeof(TestOnTheFlyProvider), option ); var provider = factory.CreateOnTheFlyProvider(metadata); provider.Should().BeOfType <TestOnTheFlyProvider>(); }
public CoconaCompletionCandidatesMetadata( CompletionCandidateType candidateType, Type candidatesProviderType, CommandOptionDescriptor commandOption ) { CandidateType = candidateType; CandidatesProviderType = candidatesProviderType; ParameterType = commandOption.OptionType; ParameterAttributes = commandOption.ParameterAttributes; CommandOption = commandOption; CommandArgument = null; }
private string BuildParameterLabel(CommandOptionDescriptor option) { return((option.ShortName.Any() ? string.Join(", ", option.ShortName.Select(x => $"-{x}")) + ", " : "") + $"--{option.Name}" + ( option.OptionType == typeof(bool) ? option.DefaultValue.HasValue && option.DefaultValue.Value != null && option.DefaultValue.Value.Equals(true) ? "=<true|false>" : "" : option.IsEnumerableLike ? $" <{option.ValueName}>..." : $" <{option.ValueName}>" )); }
public void GetMetadata_Option_Enum() { var factory = new CoconaCompletionCandidatesMetadataFactory(); var option = new CommandOptionDescriptor( typeof(TestEnum), "test", Array.Empty <char>(), "", CoconaDefaultValue.None, string.Empty, CommandOptionFlags.None, new Attribute[] { } ); var metadata = factory.GetMetadata(option); metadata.CandidateType.Should().Be(CompletionCandidateType.Provider); metadata.CandidatesProviderType.Should().Be <EnumCompletionCandidatesProvider>(); }
public void ResolveOverload_Ambiguous() { var matcher = new CoconaCommandMatcher(); var commandOption0 = new CommandOptionDescriptor(typeof(bool), "foo", new[] { 'm' }, string.Empty, CoconaDefaultValue.None, null, CommandOptionFlags.None, Array.Empty <Attribute>()); var commandOption1 = new CommandOptionDescriptor(typeof(bool), "bar", new[] { 'm' }, string.Empty, CoconaDefaultValue.None, null, CommandOptionFlags.None, Array.Empty <Attribute>()); var command = CreateCommand( "A", new ICommandParameterDescriptor[] { commandOption0, commandOption1 }, new CommandOverloadDescriptor[] { new CommandOverloadDescriptor(commandOption0, null, CreateCommand("A2", Array.Empty <ICommandParameterDescriptor>()), StringComparer.OrdinalIgnoreCase), new CommandOverloadDescriptor(commandOption0, null, CreateCommand("A3", Array.Empty <ICommandParameterDescriptor>()), StringComparer.OrdinalIgnoreCase), }); var parsedCommandLine = new ParsedCommandLine(new CommandOption[] { new CommandOption(commandOption0, "true") }, new CommandArgument[] { }, new string[] { }); Assert.Throws <CoconaException>(() => matcher.ResolveOverload(command, parsedCommandLine)); }
public void ResolveOverload_Overload_1() { var matcher = new CoconaCommandMatcher(); var commandOption = new CommandOptionDescriptor(typeof(string), "mode", new[] { 'm' }, string.Empty, CoconaDefaultValue.None, null, CommandOptionFlags.None, Array.Empty <Attribute>()); var command = CreateCommand( "A", new ICommandParameterDescriptor[] { commandOption }, new CommandOverloadDescriptor[] { new CommandOverloadDescriptor(commandOption, "foo", CreateCommand("A2", Array.Empty <ICommandParameterDescriptor>()), StringComparer.OrdinalIgnoreCase), new CommandOverloadDescriptor(commandOption, "bar", CreateCommand("A3", Array.Empty <ICommandParameterDescriptor>()), StringComparer.OrdinalIgnoreCase), }); var parsedCommandLine = new ParsedCommandLine(new CommandOption[] { }, new CommandArgument[] { }, new string[] { }); var resolved = matcher.ResolveOverload(command, parsedCommandLine); resolved.Should().NotBeNull(); resolved.Name.Should().Be("A"); }
public void Option_Default() { var option = new CommandOptionDescriptor( typeof(int), "test", Array.Empty <char>(), "", CoconaDefaultValue.None, string.Empty, CommandOptionFlags.None, new Attribute[] { } ); var metadata = new CoconaCompletionCandidatesMetadata( CompletionCandidateType.Provider, typeof(StaticCompletionCandidatesProvider), option ); var provider = new EnumCompletionCandidatesProvider(); var candidates = provider.GetCandidates(metadata); candidates.ResultType.Should().Be(CompletionCandidateResultType.Default); }
public StaticCompletionCandidates GetStaticCandidatesFromOption(CommandOptionDescriptor option) { return(new StaticCompletionCandidates(CompletionCandidateResult.Default)); }
public StaticCompletionCandidates GetStaticCandidatesFromOption(CommandOptionDescriptor option) { return(GetStaticCandidatesCore(_completionCandidatesMetadataFactory.GetMetadata(option))); }
private string GetArgumentValues(CommandOptionDescriptor option) { return(GetArgumentValuesCore(_completionCandidates.GetStaticCandidatesFromOption(option), option.Name)); }