diff --git a/src/Spectre.Console.Cli/Help/HelpProvider.cs b/src/Spectre.Console.Cli/Help/HelpProvider.cs index 222b3d4..ca18f0f 100644 --- a/src/Spectre.Console.Cli/Help/HelpProvider.cs +++ b/src/Spectre.Console.Cli/Help/HelpProvider.cs @@ -41,7 +41,7 @@ public class HelpProvider : IHelpProvider public bool Required { get; } public string? Description { get; } - public HelpArgument(string name, int position, bool required, string? description) + private HelpArgument(string name, int position, bool required, string? description) { Name = name; Position = position; @@ -68,7 +68,7 @@ public class HelpProvider : IHelpProvider public string? Description { get; } public object? DefaultValue { get; } - public HelpOption(string? @short, string? @long, string? @value, bool? valueIsOptional, string? description, object? defaultValue) + private HelpOption(string? @short, string? @long, string? @value, bool? valueIsOptional, string? description, object? defaultValue) { Short = @short; Long = @long; @@ -78,17 +78,27 @@ public class HelpProvider : IHelpProvider DefaultValue = defaultValue; } - public static IReadOnlyList Get(ICommandInfo? command, HelpProviderResources resources) + public static IReadOnlyList Get( + ICommandModel model, + ICommandInfo? command, + HelpProviderResources resources) { - var parameters = new List(); - parameters.Add(new HelpOption("h", "help", null, null, resources.PrintHelpDescription, null)); + var parameters = new List + { + new HelpOption("h", "help", null, null, resources.PrintHelpDescription, null), + }; // Version information applies to the entire application // Include the "-v" option in the help when at the root of the command line application // Don't allow the "-v" option if users have specified one or more sub-commands - if ((command == null || command?.Parent == null) && !(command?.IsBranch ?? false)) + if ((command?.Parent == null) && !(command?.IsBranch ?? false)) { - parameters.Add(new HelpOption("v", "version", null, null, resources.PrintVersionDescription, null)); + // Only show the version command if there is an + // application version set. + if (model.ApplicationVersion != null) + { + parameters.Add(new HelpOption("v", "version", null, null, resources.PrintVersionDescription, null)); + } } parameters.AddRange(command?.Parameters.OfType().Where(o => !o.IsHidden).Select(o => @@ -101,11 +111,6 @@ public class HelpProvider : IHelpProvider } } - internal Composer NewComposer() - { - return new Composer(RenderMarkupInline); - } - /// /// Initializes a new instance of the class. /// @@ -383,7 +388,7 @@ public class HelpProvider : IHelpProvider public virtual IEnumerable GetOptions(ICommandModel model, ICommandInfo? command) { // Collect all options into a single structure. - var parameters = HelpOption.Get(command, resources); + var parameters = HelpOption.Get(model, command, resources); if (parameters.Count == 0) { return Array.Empty(); @@ -420,7 +425,7 @@ public class HelpProvider : IHelpProvider if (defaultValueColumn) { - columns.Add(GetOptionDefaultValue(option.DefaultValue)); + columns.Add(GetDefaultValueForOption(option.DefaultValue)); } columns.Add(NewComposer().Text(option.Description?.TrimEnd('.') ?? " ")); @@ -433,60 +438,6 @@ public class HelpProvider : IHelpProvider return result; } - private IRenderable GetOptionParts(HelpOption option) - { - var composer = NewComposer(); - - if (option.Short != null) - { - composer.Text("-").Text(option.Short); - if (option.Long != null) - { - composer.Text(", "); - } - } - else - { - composer.Text(" "); - if (option.Long != null) - { - composer.Text(" "); - } - } - - if (option.Long != null) - { - composer.Text("--").Text(option.Long); - } - - if (option.Value != null) - { - composer.Text(" "); - if (option.ValueIsOptional ?? false) - { - composer.Style(helpStyles?.Options?.OptionalOption ?? Style.Plain, $"[{option.Value}]"); - } - else - { - composer.Style(helpStyles?.Options?.RequiredOption ?? Style.Plain, $"<{option.Value}>"); - } - } - - return composer; - } - - private IRenderable GetOptionDefaultValue(object? defaultValue) - { - return defaultValue switch - { - null => NewComposer().Text(" "), - "" => NewComposer().Text(" "), - Array { Length: 0 } => NewComposer().Text(" "), - Array array => NewComposer().Join(", ", array.Cast().Select(o => NewComposer().Style(helpStyles?.Options?.DefaultValue ?? Style.Plain, o.ToString() ?? string.Empty))), - _ => NewComposer().Style(helpStyles?.Options?.DefaultValue ?? Style.Plain, defaultValue?.ToString() ?? string.Empty), - }; - } - /// /// Gets the commands section of the help information. /// @@ -556,4 +507,63 @@ public class HelpProvider : IHelpProvider { yield break; } + + private Composer NewComposer() + { + return new Composer(RenderMarkupInline); + } + + private IRenderable GetOptionParts(HelpOption option) + { + var composer = NewComposer(); + + if (option.Short != null) + { + composer.Text("-").Text(option.Short); + if (option.Long != null) + { + composer.Text(", "); + } + } + else + { + composer.Text(" "); + if (option.Long != null) + { + composer.Text(" "); + } + } + + if (option.Long != null) + { + composer.Text("--").Text(option.Long); + } + + if (option.Value != null) + { + composer.Text(" "); + if (option.ValueIsOptional ?? false) + { + composer.Style(helpStyles?.Options?.OptionalOption ?? Style.Plain, $"[{option.Value}]"); + } + else + { + composer.Style(helpStyles?.Options?.RequiredOption ?? Style.Plain, $"<{option.Value}>"); + } + } + + return composer; + } + + private Composer GetDefaultValueForOption(object? defaultValue) + { + return defaultValue switch + { + null => NewComposer().Text(" "), + "" => NewComposer().Text(" "), + Array { Length: 0 } => NewComposer().Text(" "), + Array array => NewComposer().Join(", ", array.Cast().Select(o => NewComposer().Style(helpStyles?.Options?.DefaultValue ?? Style.Plain, o.ToString() ?? string.Empty))), + _ => NewComposer().Style(helpStyles?.Options?.DefaultValue ?? Style.Plain, defaultValue?.ToString() ?? string.Empty), + }; + } } \ No newline at end of file diff --git a/src/Spectre.Console.Cli/Help/ICommandModel.cs b/src/Spectre.Console.Cli/Help/ICommandModel.cs index e7fe5f7..2872bf8 100644 --- a/src/Spectre.Console.Cli/Help/ICommandModel.cs +++ b/src/Spectre.Console.Cli/Help/ICommandModel.cs @@ -9,4 +9,9 @@ public interface ICommandModel : ICommandContainer /// Gets the name of the application. /// string ApplicationName { get; } + + /// + /// Gets the version of the application. + /// + string? ApplicationVersion { get; } } diff --git a/src/Spectre.Console.Cli/Internal/CommandExecutor.cs b/src/Spectre.Console.Cli/Internal/CommandExecutor.cs index 2c2b159..22eeb20 100644 --- a/src/Spectre.Console.Cli/Internal/CommandExecutor.cs +++ b/src/Spectre.Console.Cli/Internal/CommandExecutor.cs @@ -39,9 +39,12 @@ internal sealed class CommandExecutor if (firstArgument.Equals("--version", StringComparison.OrdinalIgnoreCase) || firstArgument.Equals("-v", StringComparison.OrdinalIgnoreCase)) { - var console = configuration.Settings.Console.GetConsole(); - console.WriteLine(ResolveApplicationVersion(configuration)); - return 0; + if (configuration.Settings.ApplicationVersion != null) + { + var console = configuration.Settings.Console.GetConsole(); + console.MarkupLine(configuration.Settings.ApplicationVersion); + return 0; + } } } } @@ -126,13 +129,6 @@ internal sealed class CommandExecutor return parsedResult; } - private static string ResolveApplicationVersion(IConfiguration configuration) - { - return - configuration.Settings.ApplicationVersion ?? // potential override - VersionHelper.GetVersion(Assembly.GetEntryAssembly()); - } - private static async Task Execute( CommandTree leaf, CommandTree tree, diff --git a/src/Spectre.Console.Cli/Internal/Modelling/CommandModel.cs b/src/Spectre.Console.Cli/Internal/Modelling/CommandModel.cs index 3da02da..721960b 100644 --- a/src/Spectre.Console.Cli/Internal/Modelling/CommandModel.cs +++ b/src/Spectre.Console.Cli/Internal/Modelling/CommandModel.cs @@ -3,6 +3,7 @@ namespace Spectre.Console.Cli; internal sealed class CommandModel : ICommandContainer, ICommandModel { public string? ApplicationName { get; } + public string? ApplicationVersion { get; } public ParsingMode ParsingMode { get; } public IList Commands { get; } public IList Examples { get; } @@ -20,9 +21,10 @@ internal sealed class CommandModel : ICommandContainer, ICommandModel IEnumerable examples) { ApplicationName = settings.ApplicationName; + ApplicationVersion = settings.ApplicationVersion; ParsingMode = settings.ParsingMode; - Commands = new List(commands ?? Array.Empty()); - Examples = new List(examples ?? Array.Empty()); + Commands = new List(commands); + Examples = new List(examples); } /// diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt index 6e29ed2..9a82776 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt @@ -1,4 +1,4 @@ -USAGE: +USAGE: myapp [QUX] [OPTIONS] ARGUMENTS: @@ -9,5 +9,4 @@ ARGUMENTS: [QUX] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information \ No newline at end of file + -h, --help Prints help information \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt index e4a56cd..f2bd539 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt @@ -1,15 +1,14 @@ --------------------------------------- ---- CUSTOM HELP PROVIDER --- --------------------------------------- - -USAGE: - myapp [OPTIONS] - -OPTIONS: - -h, --help Prints help information - -v, --version Prints version information - -COMMANDS: - dog The dog command - +-------------------------------------- +--- CUSTOM HELP PROVIDER --- +-------------------------------------- + +USAGE: + myapp [OPTIONS] + +OPTIONS: + -h, --help Prints help information + +COMMANDS: + dog The dog command + Version 1.0 \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt index ad99fbb..f2bd539 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt @@ -1,4 +1,4 @@ --------------------------------------- +-------------------------------------- --- CUSTOM HELP PROVIDER --- -------------------------------------- @@ -6,8 +6,7 @@ USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt index aa1978d..b53a06e 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The lion command. USAGE: @@ -10,8 +10,7 @@ ARGUMENTS: OPTIONS: DEFAULT - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt index cd5b1e4..58c2ec5 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The dog command. USAGE: @@ -18,7 +18,6 @@ ARGUMENTS: OPTIONS: -h, --help Prints help information - -v, --version Prints version information -a, --alive Indicates whether or not the animal is alive -n, --name -g, --good-boy \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt index aa1978d..b53a06e 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The lion command. USAGE: @@ -10,8 +10,7 @@ ARGUMENTS: OPTIONS: DEFAULT - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt index ba0602d..8f21e00 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt @@ -1,4 +1,4 @@ -BESCHREIBUNG: +BESCHREIBUNG: The lion command. VERWENDUNG: @@ -14,7 +14,6 @@ ARGUMENTE: OPTIONEN: STANDARDWERT -h, --help Zeigt Hilfe an - -v, --version Zeigt Versionsinformationen an -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt index d4a5933..905156f 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The lion command. USAGE: @@ -13,8 +13,7 @@ ARGUMENTS: OPTIONS: DEFAULT - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt index 126de22..a555c1c 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The lion command. UTILISATION: @@ -13,8 +13,7 @@ ARGUMENTS: OPTIONS: DÉFAUT - -h, --help Affiche l'aide - -v, --version Affiche la version + -h, --help Affiche l'aide -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt index 2292492..45fd6c0 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt @@ -1,4 +1,4 @@ -BESKRIVNING: +BESKRIVNING: The lion command. ANVÄNDING: @@ -14,7 +14,6 @@ ARGUMENT: VAL: STANDARD -h, --help Skriver ut hjälpinformation - -v, --version Skriver ut versionsnummer -a, --alive Indicates whether or not the animal is alive -n, --name --agility 10 The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt index 4bea738..5b0f426 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt @@ -1,4 +1,4 @@ -[bold]DESCRIPTION:[/] +[bold]DESCRIPTION:[/] The lion command. [bold]USAGE:[/] @@ -14,7 +14,6 @@ The lion command. []OPTIONS:[/] []DEFAULT[/] -h, --help Prints help information - -v, --version Prints version information -a, --alive Indicates whether or not the animal is alive -n, --name [][/] --agility [][/] []10[/] The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt index 30421ac..82570d3 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt @@ -1,4 +1,4 @@ -[yellow]DESCRIPTION:[/] +[yellow]DESCRIPTION:[/] The lion command. [yellow]USAGE:[/] @@ -14,7 +14,6 @@ The lion command. [yellow]OPTIONS:[/] [lime]DEFAULT[/] -h, --help Prints help information - -v, --version Prints version information -a, --alive Indicates whether or not the animal is alive -n, --name [silver][/] --agility [silver][/] [bold]10[/] The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt index a0bb7b2..2b92a19 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt @@ -1,4 +1,4 @@ -[]DESCRIPTION:[/] +[]DESCRIPTION:[/] The lion command. []USAGE:[/] @@ -14,7 +14,6 @@ The lion command. []OPTIONS:[/] []DEFAULT[/] -h, --help Prints help information - -v, --version Prints version information -a, --alive Indicates whether or not the animal is alive -n, --name [][/] --agility [][/] []10[/] The agility between 0 and 100 diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt index b53e771..9662e05 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt @@ -1,9 +1,8 @@ -USAGE: +USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command. diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt index 7288aef..b96464b 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt @@ -1,10 +1,9 @@ -USAGE: +USAGE: myapp [OPTIONS] ARGUMENTS: Dummy argument FOO OPTIONS: - -h, --help Prints help information - -v, --version Prints version information - --baz Dummy option BAZ \ No newline at end of file + -h, --help Prints help information + --baz Dummy option BAZ \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt index 6a792da..2122769 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt @@ -1,9 +1,8 @@ -USAGE: +USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt index f214d32..7e3e079 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt @@ -1,9 +1,8 @@ -USAGE: +USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: bar \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt new file mode 100644 index 0000000..9a82776 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt @@ -0,0 +1,12 @@ +USAGE: + myapp [QUX] [OPTIONS] + +ARGUMENTS: + + + + + [QUX] + +OPTIONS: + -h, --help Prints help information \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt index 366b6b3..aa3dcc3 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt @@ -1,9 +1,8 @@ -USAGE: +USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt index c660618..2c6e498 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt @@ -1,4 +1,4 @@ -DESCRIPTION: +DESCRIPTION: The horse command. USAGE: @@ -10,7 +10,6 @@ ARGUMENTS: OPTIONS: DEFAULT -h, --help Prints help information - -v, --version Prints version information -a, --alive Indicates whether or not the animal is alive -n, --name -d, --day diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt index 3488e38..82ba467 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt @@ -1,4 +1,4 @@ -USAGE: +USAGE: myapp [OPTIONS] EXAMPLES: @@ -16,8 +16,7 @@ EXAMPLES: myapp horse --name Spirit OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt index 47e373a..e2b67c8 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt @@ -1,4 +1,4 @@ -USAGE: +USAGE: myapp [OPTIONS] EXAMPLES: @@ -9,8 +9,7 @@ EXAMPLES: myapp dog --name Daisy OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: dog The dog command diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt index 3e5a6d9..7b486e1 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt @@ -1,20 +1,19 @@ -USAGE: - myapp [OPTIONS] - -EXAMPLES: - myapp dog --name Rufus --age 12 --good-boy - myapp dog --name Luna - myapp dog --name Charlie - myapp dog --name Bella - myapp dog --name Daisy - myapp dog --name Milo - myapp horse --name Brutus - myapp horse --name Sugar --IsAlive false - -OPTIONS: - -h, --help Prints help information - -v, --version Prints version information - -COMMANDS: - dog The dog command +USAGE: + myapp [OPTIONS] + +EXAMPLES: + myapp dog --name Rufus --age 12 --good-boy + myapp dog --name Luna + myapp dog --name Charlie + myapp dog --name Bella + myapp dog --name Daisy + myapp dog --name Milo + myapp horse --name Brutus + myapp horse --name Sugar --IsAlive false + +OPTIONS: + -h, --help Prints help information + +COMMANDS: + dog The dog command horse The horse command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt index 3377d2a..2122769 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt @@ -1,10 +1,9 @@ -USAGE: - myapp [OPTIONS] - -OPTIONS: - -h, --help Prints help information - -v, --version Prints version information - -COMMANDS: - dog The dog command +USAGE: + myapp [OPTIONS] + +OPTIONS: + -h, --help Prints help information + +COMMANDS: + dog The dog command horse The horse command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt index 8924b55..82ba467 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt @@ -1,24 +1,23 @@ -USAGE: - myapp [OPTIONS] - -EXAMPLES: - myapp dog --name Rufus --age 12 --good-boy - myapp dog --name Luna - myapp dog --name Charlie - myapp dog --name Bella - myapp dog --name Daisy - myapp dog --name Milo - myapp horse --name Brutus - myapp horse --name Sugar --IsAlive false - myapp horse --name Cash - myapp horse --name Dakota - myapp horse --name Cisco - myapp horse --name Spirit - -OPTIONS: - -h, --help Prints help information - -v, --version Prints version information - -COMMANDS: - dog The dog command +USAGE: + myapp [OPTIONS] + +EXAMPLES: + myapp dog --name Rufus --age 12 --good-boy + myapp dog --name Luna + myapp dog --name Charlie + myapp dog --name Bella + myapp dog --name Daisy + myapp dog --name Milo + myapp horse --name Brutus + myapp horse --name Sugar --IsAlive false + myapp horse --name Cash + myapp horse --name Dakota + myapp horse --name Cisco + myapp horse --name Spirit + +OPTIONS: + -h, --help Prints help information + +COMMANDS: + dog The dog command horse The horse command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt index 8b75361..088dd1b 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt @@ -1,4 +1,4 @@ -USAGE: +USAGE: myapp [OPTIONS] EXAMPLES: @@ -9,8 +9,7 @@ EXAMPLES: myapp animal dog --name Daisy OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: animal The animal command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt index 63bded9..e236c9b 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt @@ -12,8 +12,7 @@ EXAMPLES: myapp animal horse --name Sugar --IsAlive false OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: animal The animal command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt index 53228a0..75de3a1 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt @@ -1,9 +1,8 @@ -USAGE: +USAGE: myapp [OPTIONS] OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: animal The animal command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt index 07178cb..b6b89b6 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt @@ -16,8 +16,7 @@ EXAMPLES: myapp animal horse --name Spirit OPTIONS: - -h, --help Prints help information - -v, --version Prints version information + -h, --help Prints help information COMMANDS: animal The animal command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt new file mode 100644 index 0000000..a07a266 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt @@ -0,0 +1,13 @@ +USAGE: + myapp [QUX] [OPTIONS] + +ARGUMENTS: + + + + + [QUX] + +OPTIONS: + -h, --help Prints help information + -v, --version Prints version information \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs index 3c2b8ca..9ce30cc 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs @@ -950,6 +950,45 @@ public sealed partial class CommandAppTests return Verifier.Verify(result.Output); } + [Fact] + [Expectation("NoVersion")] + public Task Should_Not_Include_Application_Version_If_Not_Set() + { + // Given + var fixture = new CommandAppTester(); + fixture.SetDefaultCommand>(); + fixture.Configure(config => + { + config.SetApplicationName("myapp"); + }); + + // When + var result = fixture.Run("--help"); + + // Then + return Verifier.Verify(result.Output); + } + + [Fact] + [Expectation("Version")] + public Task Should_Include_Application_Version_If_Set() + { + // Given + var fixture = new CommandAppTester(); + fixture.SetDefaultCommand>(); + fixture.Configure(config => + { + config.SetApplicationName("myapp"); + config.SetApplicationVersion("0.49.1"); + }); + + // When + var result = fixture.Run("--help"); + + // Then + return Verifier.Verify(result.Output); + } + [Fact] [Expectation("Hidden_Command_Options")] public Task Should_Not_Show_Hidden_Command_Options() diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs index e9e38dc..e0a48ee 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs @@ -34,6 +34,24 @@ public sealed partial class CommandAppTests result.Output.ShouldBe("1.0"); } + [Fact] + public void Should_Not_Display_Version_If_Not_Specified() + { + // Given + var fixture = new CommandAppTester(); + fixture.Configure(configurator => + { + configurator.AddCommand("empty"); + }); + + // When + var result = fixture.Run("--version"); + + // Then + result.ExitCode.ShouldNotBe(0); + result.Output.ShouldStartWith("Error: Unexpected option 'version'"); + } + [Fact] public void Should_Execute_Command_Not_Output_Application_Version_To_The_Console() { @@ -42,7 +60,6 @@ public sealed partial class CommandAppTests fixture.Configure(configurator => { configurator.SetApplicationVersion("1.0"); - configurator.AddCommand("empty"); }); @@ -81,7 +98,6 @@ public sealed partial class CommandAppTests fixture.Configure(configurator => { configurator.SetApplicationVersion("1.0"); - configurator.AddBranch("branch", branch => { branch.SetDefaultCommand();