From 6e7742a4f302265d08c7d66a4462344d9c8ea479 Mon Sep 17 00:00:00 2001 From: Alexey Golub Date: Fri, 8 May 2020 16:40:19 +0300 Subject: [PATCH] Show valid values for parameters too --- CliFx.Tests/HelpTextSpecs.Commands.cs | 13 ++++++++----- CliFx.Tests/HelpTextSpecs.cs | 10 ++++++---- CliFx/Domain/HelpTextWriter.cs | 11 +++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/CliFx.Tests/HelpTextSpecs.Commands.cs b/CliFx.Tests/HelpTextSpecs.Commands.cs index 620dff0..bd0bdd9 100644 --- a/CliFx.Tests/HelpTextSpecs.Commands.cs +++ b/CliFx.Tests/HelpTextSpecs.Commands.cs @@ -82,16 +82,19 @@ namespace CliFx.Tests public ValueTask ExecuteAsync(IConsole console) => default; } - [Command("cmd-with-enum-opts")] - private class EnumOptionsCommand : ICommand + [Command("cmd-with-enum-args")] + private class EnumArgumentsCommand : ICommand { - public enum ValuesEnum { Value1, Value2, Value3 }; + public enum TestEnum { Value1, Value2, Value3 }; + + [CommandParameter(0, Name = "value", Description = "Enum parameter.")] + public TestEnum ParamA { get; set; } [CommandOption("value", Description = "Enum option.", IsRequired = true)] - public ValuesEnum Value { get; set; } = ValuesEnum.Value1; + public TestEnum OptionA { get; set; } = TestEnum.Value1; [CommandOption("nullable-value", Description = "Nullable enum option.")] - public ValuesEnum? NullableValue { get; set; } + public TestEnum? OptionB { get; set; } public ValueTask ExecuteAsync(IConsole console) => default; } diff --git a/CliFx.Tests/HelpTextSpecs.cs b/CliFx.Tests/HelpTextSpecs.cs index d0e17db..714bdb5 100644 --- a/CliFx.Tests/HelpTextSpecs.cs +++ b/CliFx.Tests/HelpTextSpecs.cs @@ -239,25 +239,27 @@ namespace CliFx.Tests } [Fact] - public async Task Help_text_shows_usage_format_which_lists_all_valid_values_for_enum_options() + public async Task Help_text_shows_usage_format_which_lists_all_valid_values_for_enum_arguments() { // Arrange await using var stdOut = new MemoryStream(); var console = new VirtualConsole(output: stdOut); var application = new CliApplicationBuilder() - .AddCommand(typeof(EnumOptionsCommand)) + .AddCommand(typeof(EnumArgumentsCommand)) .UseConsole(console) .Build(); // Act - await application.RunAsync(new[] { "cmd-with-enum-opts", "--help" }); + await application.RunAsync(new[] { "cmd-with-enum-args", "--help" }); var stdOutData = console.Output.Encoding.GetString(stdOut.ToArray()).TrimEnd(); // Assert stdOutData.Should().ContainAll( "Usage", - "cmd-with-enum-opts", "[options]", + "cmd-with-enum-args", "[options]", + "Parameters", + "value", "Valid values: Value1, Value2, Value3.", "Options", "* --value", "Enum option.", "Valid values: Value1, Value2, Value3.", "--nullable-value", "Nullable enum option.", "Valid values: Value1, Value2, Value3." diff --git a/CliFx/Domain/HelpTextWriter.cs b/CliFx/Domain/HelpTextWriter.cs index 3be9f95..b50e6eb 100644 --- a/CliFx/Domain/HelpTextWriter.cs +++ b/CliFx/Domain/HelpTextWriter.cs @@ -199,6 +199,15 @@ namespace CliFx.Domain if (!string.IsNullOrWhiteSpace(parameter.Description)) { Render(parameter.Description); + Render(" "); + } + + // Valid values + var validValues = parameter.GetValidValues(); + if (validValues.Any()) + { + Render($"Valid values: {string.Join(", ", validValues)}."); + Render(" "); } RenderNewLine(); @@ -246,12 +255,14 @@ namespace CliFx.Domain RenderColumnIndent(); + // Description if (!string.IsNullOrWhiteSpace(option.Description)) { Render(option.Description); Render(" "); } + // Valid values var validValues = option.GetValidValues(); if (validValues.Any()) {