From d03c10623c2c0818aedc2f3c63553419740d62e9 Mon Sep 17 00:00:00 2001 From: Frank Ray <52075808+FrankRay78@users.noreply.github.com> Date: Sat, 6 Jan 2024 16:38:33 +0000 Subject: [PATCH] Unit test to reproduce the -v/--version bug --- .../Data/Commands/VersionCommand.cs | 18 +++++++++++++++ .../Data/Settings/VersionSettings.cs | 7 ++++++ .../Unit/CommandAppTests.Parsing.cs | 23 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs create mode 100644 test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs b/test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs new file mode 100644 index 0000000..5518837 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs @@ -0,0 +1,18 @@ +namespace Spectre.Console.Tests.Data; + +public sealed class VersionCommand : Command +{ + private readonly IAnsiConsole _console; + + public VersionCommand(IAnsiConsole console) + { + _console = console; + } + + public override int Execute(CommandContext context, VersionSettings settings) + { + _console.WriteLine($"VersionCommand ran, Version: {settings.Version ?? string.Empty}"); + + return 0; + } +} diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs b/test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs new file mode 100644 index 0000000..2b54e8c --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs @@ -0,0 +1,7 @@ +namespace Spectre.Console.Tests.Data; + +public sealed class VersionSettings : CommandSettings +{ + [CommandOption("-v|--version")] + public string Version { get; set; } +} \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs index e9e0f73..a1636c3 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs @@ -586,5 +586,28 @@ public sealed partial class CommandAppTests result.Output.ShouldBe("Error: Command 'dog' is missing required argument 'AGE'."); } } + + /// + /// -v or --version switches should result in the Version option being set + /// on VersionSettings, and then VersionCommand.Execute(...) being called + /// + [InlineData("-v")] + [InlineData("--version")] + [Theory] + public void Should_Run_Custom_Version_Command(string versionOption) + { + // Given + var app = new CommandAppTester(); + app.Configure(configurator => + { + configurator.AddCommand("CustomVersionCommand"); + }); + + // When + var result = app.Run("CustomVersionCommand", versionOption, "1.2.5"); + + // Then + result.Output.ShouldBe("VersionCommand ran, Version: 1.2.5"); + } } }