From eb38f76a6a988acbda3c955a8f6b72083a622bfb Mon Sep 17 00:00:00 2001 From: BlazeFace Date: Sat, 13 Apr 2024 05:40:12 -0700 Subject: [PATCH 01/57] Fixing #1507 AddDelegate uses an abstract type when used in a branch (#1509) --- .../ConfiguratorExtensions.cs | 9 +++- .../Unit/CommandAppTests.cs | 49 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/Spectre.Console.Cli/ConfiguratorExtensions.cs b/src/Spectre.Console.Cli/ConfiguratorExtensions.cs index c0f1cd8..eb3f1be 100644 --- a/src/Spectre.Console.Cli/ConfiguratorExtensions.cs +++ b/src/Spectre.Console.Cli/ConfiguratorExtensions.cs @@ -324,11 +324,16 @@ public static class ConfiguratorExtensions /// The delegate to execute as part of command execution. /// A command configurator that can be used to configure the command further. public static ICommandConfigurator AddDelegate( - this IConfigurator configurator, + this IConfigurator? configurator, string name, Func func) - where TSettings : CommandSettings + where TSettings : CommandSettings { + if (typeof(TSettings).IsAbstract) + { + AddDelegate(configurator as IConfigurator, name, func); + } + if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs index 76b7581..7004c8f 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs @@ -1136,6 +1136,55 @@ public sealed partial class CommandAppTests data.ShouldBe(2); } + [Fact] + public void Should_Execute_Nested_Delegate_Empty_Command() + { + // Given + var app = new CommandAppTester(); + app.Configure(cfg => + { + cfg.AddBranch("a", d => + { + d.AddDelegate("b", _ => + { + AnsiConsole.MarkupLine("[red]Complete[/]"); + return 0; + }); + }); + }); + + // When + var result = app.Run([ + "a", "b" + ]); + + // Then + result.ExitCode.ShouldBe(0); + } + + [Fact] + public void Should_Execute_Delegate_Empty_Command_At_Root_Level() + { + // Given + var app = new CommandAppTester(); + app.Configure(cfg => + { + cfg.AddDelegate("a", _ => + { + AnsiConsole.MarkupLine("[red]Complete[/]"); + return 0; + }); + }); + + // When + var result = app.Run([ + "a" + ]); + + // Then + result.ExitCode.ShouldBe(0); + } + [Fact] public async void Should_Execute_Async_Delegate_Command_At_Root_Level() { From ff7282ecb89d1fa99662302c148f7bbe98c99692 Mon Sep 17 00:00:00 2001 From: BlazeFace Date: Sun, 7 Apr 2024 09:19:43 -0700 Subject: [PATCH 02/57] Adding test and update render to fix issue with rendering separator when headers are hidden fixing issue 1391. --- .../Widgets/Table/TableRenderer.cs | 4 ++-- ...w_Separators_No_Header.Output.verified.txt | 7 ++++++ .../Unit/Widgets/Table/TableTests.cs | 23 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt diff --git a/src/Spectre.Console/Widgets/Table/TableRenderer.cs b/src/Spectre.Console/Widgets/Table/TableRenderer.cs index 23bff61..0d17166 100644 --- a/src/Spectre.Console/Widgets/Table/TableRenderer.cs +++ b/src/Spectre.Console/Widgets/Table/TableRenderer.cs @@ -150,9 +150,9 @@ internal static class TableRenderer result.Add(Segment.LineBreak); } - // Show row separator? + // Show row separator, if headers are hidden show separator after the first row if (context.Border.SupportsRowSeparator && context.ShowRowSeparators - && !isFirstRow && !isLastRow) + && (!isFirstRow || (isFirstRow && !context.ShowHeaders)) && !isLastRow) { var hasVisibleFootes = context is { ShowFooters: true, HasFooters: true }; var isNextLastLine = index == context.Rows.Count - 2; diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt b/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt new file mode 100644 index 0000000..e296413 --- /dev/null +++ b/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt @@ -0,0 +1,7 @@ +┌────────┬────────┐ +│ Qux │ Corgi │ +├────────┼────────┤ +│ Waldo │ Grault │ +├────────┼────────┤ +│ Garply │ Fred │ +└────────┴────────┘ diff --git a/test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs b/test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs index 9df3038..18379bd 100644 --- a/test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs +++ b/test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs @@ -159,6 +159,29 @@ public sealed class TableTests return Verifier.Verify(console.Output); } + [Fact] + [Expectation("Render_Row_Separators_No_Header")] + public Task Should_Render_Table_With_Row_Separators_No_Header_Correctly() + { + // Given + var console = new TestConsole(); + var table = new Table(); + + table.ShowRowSeparators(); + table.HideHeaders(); + + table.AddColumns("Foo", "Bar"); + table.AddRow("Qux", "Corgi"); + table.AddRow("Waldo", "Grault"); + table.AddRow("Garply", "Fred"); + + // When + console.Write(table); + + // Then + return Verifier.Verify(console.Output); + } + [Fact] [Expectation("Render_EA_Character")] public Task Should_Render_Table_With_EA_Character_Correctly() From a893a9601e083d8e2ef17ded9874db37f83565b2 Mon Sep 17 00:00:00 2001 From: Frank Ray <52075808+FrankRay78@users.noreply.github.com> Date: Sun, 14 Apr 2024 12:47:55 +0100 Subject: [PATCH 03/57] Top Issues GitHub Action (#1488) --- .github/workflows/top-issues-dashboard.yml | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/top-issues-dashboard.yml diff --git a/.github/workflows/top-issues-dashboard.yml b/.github/workflows/top-issues-dashboard.yml new file mode 100644 index 0000000..56a04ab --- /dev/null +++ b/.github/workflows/top-issues-dashboard.yml @@ -0,0 +1,24 @@ +name: Top issues action. +on: + schedule: + - cron: '0 0 */1 * *' + +jobs: + ShowAndLabelTopIssues: + name: Display and label top issues. + runs-on: ubuntu-latest + steps: + - name: Top Issues action + uses: rickstaa/top-issues-action@v1.3.99 + env: + github_token: ${{ secrets.GITHUB_TOKEN }} + with: + top_list_size: 10 + label: true + dashboard: true + dashboard_show_total_reactions: true + top_issues: true + top_bugs: true + top_features: true + feature_label: feature + top_pull_requests: true \ No newline at end of file From ecdfdd4b858dcb4505c8e3282e85f5193df9f798 Mon Sep 17 00:00:00 2001 From: Frank Ray <52075808+FrankRay78@users.noreply.github.com> Date: Tue, 16 Apr 2024 08:43:29 +0100 Subject: [PATCH 04/57] Please upvote :+1: if you are interested in it (#1491) --- .github/ISSUE_TEMPLATE/bug_report.md | 3 +++ .github/ISSUE_TEMPLATE/feature_request.md | 3 +++ .github/pull_request_template.md | 3 +++ README.md | 23 +++++++++++++---------- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b12a8fe..224a1d3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,3 +26,6 @@ If applicable, add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. + +--- +Please upvote :+1: this issue if you are interested in it. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index dc6ee2f..dd40949 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -18,3 +18,6 @@ A clear and concise description of any alternative solutions or features you've **Additional context** Add any other context or screenshots about the feature request here. + +--- +Please upvote :+1: this issue if you are interested in it. \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e93dabf..8604355 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -17,3 +17,6 @@ fixes # ## Changes + +--- +Please upvote :+1: this pull request if you are interested in it. \ No newline at end of file diff --git a/README.md b/README.md index fd01732..85a6e1f 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ _[![Spectre.Console NuGet Version](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_ _[![Spectre.Console CLI NuGet Version](https://img.shields.io/nuget/v/spectre.console.cli.svg?style=flat&label=NuGet%3A%20Spectre.Console.Cli)](https://www.nuget.org/packages/spectre.console.cli)_ [![Netlify Status](https://api.netlify.com/api/v1/badges/1eaf215a-eb9c-45e4-8c64-c90b62963149/deploy-status)](https://app.netlify.com/sites/spectreconsole/deploys) A .NET library that makes it easier to create beautiful, cross platform, console applications. -It is heavily inspired by the excellent [Rich library](https://github.com/willmcgugan/rich) -for Python. For detailed usage instructions, [please refer to the documentation at https://spectreconsole.net/.](https://spectreconsole.net/) +It is heavily inspired by the excellent Python library, [Rich](https://github.com/willmcgugan/rich). Detailed instructions for using `Spectre.Console` are located on the project website, https://spectreconsole.net ## Table of Contents @@ -19,18 +18,22 @@ for Python. For detailed usage instructions, [please refer to the documentation ## Features -* Written with unit testing in mind. -* Supports tables, grids, panels, and a [rich](https://github.com/willmcgugan/rich) inspired markup language. +* Supports tables, grids, panels, and a [Rich](https://github.com/willmcgugan/rich) inspired markup language. * Supports the most common SRG parameters when it comes to text styling such as bold, dim, italic, underline, strikethrough, and blinking text. * Supports 3/4/8/24-bit colors in the terminal. The library will detect the capabilities of the current terminal - and downgrade colors as needed. - + and downgrade colors as needed. +* Written with unit testing in mind. ![Example](docs/input/assets/images/example.png) +## Important Notices + +> [!IMPORTANT]\ +> We use the [Top Issues Dashboard](https://github.com/spectreconsole/spectre.console/issues/1517) for tracking community demand. Please upvote :+1: the issues and pull requests you are interested in. + ## Installing The fastest way of getting started using `Spectre.Console` is to install the NuGet package. @@ -42,7 +45,7 @@ dotnet add package Spectre.Console ## Documentation The documentation for `Spectre.Console` can be found at -https://spectreconsole.net/ +https://spectreconsole.net ## Examples @@ -69,7 +72,7 @@ And to run an example: ## Sponsors The following people are [sponsoring](https://github.com/sponsors/patriksvensson) -Spectre.Console to show their support and to ensure the longevity of the project. +`Spectre.Console` to show their support and to ensure the longevity of the project. * [Rodney Littles II](https://github.com/RLittlesII) * [Martin Björkström](https://github.com/bjorkstromm) @@ -99,6 +102,6 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org) Copyright © Patrik Svensson, Phil Scott, Nils Andresen -Spectre.Console is provided as-is under the MIT license. For more information see LICENSE. +`Spectre.Console` is provided as-is under the MIT license. For more information see LICENSE. -* SixLabors.ImageSharp, a library which Spectre.Console relies upon, is licensed under Apache 2.0 when distributed as part of Spectre.Console. The Six Labors Split License covers all other usage, see: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE +* SixLabors.ImageSharp, a library which `Spectre.Console` relies upon, is licensed under Apache 2.0 when distributed as part of `Spectre.Console`. The Six Labors Split License covers all other usage, see: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE From de04619f889c9feddb22361ac1c6582069ae0313 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 07:44:13 +0000 Subject: [PATCH 05/57] chore: Update dependency Roslynator.Analyzers to v4.12.1 --- src/Directory.Build.props | 2 +- test/Directory.Build.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 02a3947..06d4157 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -38,7 +38,7 @@ All - + All diff --git a/test/Directory.Build.props b/test/Directory.Build.props index f84f33a..7e58591 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -9,7 +9,7 @@ All - + All From 95bff47b85c556b009c0636e4b9ec50551dc0003 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Sat, 20 Apr 2024 14:11:03 +0200 Subject: [PATCH 06/57] Expose raw arguments on the command context --- src/Spectre.Console.Cli/CommandContext.cs | 13 ++++++++++- .../IRemainingArguments.cs | 1 + .../Internal/CommandExecutor.cs | 20 ++++++++-------- .../Extensions/EnumerableExtensions.cs | 14 +++++++++++ .../Spectre.Console.ImageSharp.csproj | 2 +- .../Unit/CommandAppTests.Context.cs | 23 +++++++++++++++++++ 6 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 src/Spectre.Console.Cli/Internal/Extensions/EnumerableExtensions.cs create mode 100644 test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs diff --git a/src/Spectre.Console.Cli/CommandContext.cs b/src/Spectre.Console.Cli/CommandContext.cs index c175ec4..89a2876 100644 --- a/src/Spectre.Console.Cli/CommandContext.cs +++ b/src/Spectre.Console.Cli/CommandContext.cs @@ -13,6 +13,11 @@ public sealed class CommandContext /// public IRemainingArguments Remaining { get; } + /// + /// Gets all the arguments that were passed to the applicaton. + /// + public IReadOnlyList Arguments { get; } + /// /// Gets the name of the command. /// @@ -32,11 +37,17 @@ public sealed class CommandContext /// /// Initializes a new instance of the class. /// + /// All arguments that were passed to the application. /// The remaining arguments. /// The command name. /// The command data. - public CommandContext(IRemainingArguments remaining, string name, object? data) + public CommandContext( + IEnumerable arguments, + IRemainingArguments remaining, + string name, + object? data) { + Arguments = arguments.ToSafeReadOnlyList(); Remaining = remaining ?? throw new System.ArgumentNullException(nameof(remaining)); Name = name ?? throw new System.ArgumentNullException(nameof(name)); Data = data; diff --git a/src/Spectre.Console.Cli/IRemainingArguments.cs b/src/Spectre.Console.Cli/IRemainingArguments.cs index 8127416..acd3b60 100644 --- a/src/Spectre.Console.Cli/IRemainingArguments.cs +++ b/src/Spectre.Console.Cli/IRemainingArguments.cs @@ -12,6 +12,7 @@ public interface IRemainingArguments /// /// Gets the raw, non-parsed remaining arguments. + /// This is normally everything after the `--` delimiter. /// IReadOnlyList Raw { get; } } \ No newline at end of file diff --git a/src/Spectre.Console.Cli/Internal/CommandExecutor.cs b/src/Spectre.Console.Cli/Internal/CommandExecutor.cs index 0c34da5..2c2b159 100644 --- a/src/Spectre.Console.Cli/Internal/CommandExecutor.cs +++ b/src/Spectre.Console.Cli/Internal/CommandExecutor.cs @@ -17,7 +17,7 @@ internal sealed class CommandExecutor throw new ArgumentNullException(nameof(configuration)); } - args ??= new List(); + var arguments = args.ToSafeReadOnlyList(); _registrar.RegisterInstance(typeof(IConfiguration), configuration); _registrar.RegisterLazy(typeof(IAnsiConsole), () => configuration.Settings.Console.GetConsole()); @@ -31,7 +31,7 @@ internal sealed class CommandExecutor if (model.DefaultCommand == null) { // Got at least one argument? - var firstArgument = args.FirstOrDefault(); + var firstArgument = arguments.FirstOrDefault(); if (firstArgument != null) { // Asking for version? Kind of a hack, but it's alright. @@ -47,7 +47,7 @@ internal sealed class CommandExecutor } // Parse and map the model against the arguments. - var parsedResult = ParseCommandLineArguments(model, configuration.Settings, args); + var parsedResult = ParseCommandLineArguments(model, configuration.Settings, arguments); // Register the arguments with the container. _registrar.RegisterInstance(typeof(CommandTreeParserResult), parsedResult); @@ -79,7 +79,7 @@ internal sealed class CommandExecutor } // Is this the default and is it called without arguments when there are required arguments? - if (leaf.Command.IsDefaultCommand && args.Count() == 0 && leaf.Command.Parameters.Any(p => p.Required)) + if (leaf.Command.IsDefaultCommand && arguments.Count == 0 && leaf.Command.Parameters.Any(p => p.Required)) { // Display help for default command. configuration.Settings.Console.SafeRender(helpProvider.Write(model, leaf.Command)); @@ -87,15 +87,18 @@ internal sealed class CommandExecutor } // Create the content. - var context = new CommandContext(parsedResult.Remaining, leaf.Command.Name, leaf.Command.Data); + var context = new CommandContext( + arguments, + parsedResult.Remaining, + leaf.Command.Name, + leaf.Command.Data); // Execute the command tree. return await Execute(leaf, parsedResult.Tree, context, resolver, configuration).ConfigureAwait(false); } } -#pragma warning disable CS8603 // Possible null reference return. - private CommandTreeParserResult ParseCommandLineArguments(CommandModel model, CommandAppSettings settings, IEnumerable args) + private CommandTreeParserResult ParseCommandLineArguments(CommandModel model, CommandAppSettings settings, IReadOnlyList args) { var parser = new CommandTreeParser(model, settings.CaseSensitivity, settings.ParsingMode, settings.ConvertFlagsToRemainingArguments); @@ -103,7 +106,7 @@ internal sealed class CommandExecutor var tokenizerResult = CommandTreeTokenizer.Tokenize(args); var parsedResult = parser.Parse(parserContext, tokenizerResult); - var lastParsedLeaf = parsedResult?.Tree?.GetLeafCommand(); + var lastParsedLeaf = parsedResult.Tree?.GetLeafCommand(); var lastParsedCommand = lastParsedLeaf?.Command; if (lastParsedLeaf != null && lastParsedCommand != null && lastParsedCommand.IsBranch && !lastParsedLeaf.ShowHelp && @@ -122,7 +125,6 @@ internal sealed class CommandExecutor return parsedResult; } -#pragma warning restore CS8603 // Possible null reference return. private static string ResolveApplicationVersion(IConfiguration configuration) { diff --git a/src/Spectre.Console.Cli/Internal/Extensions/EnumerableExtensions.cs b/src/Spectre.Console.Cli/Internal/Extensions/EnumerableExtensions.cs new file mode 100644 index 0000000..ea775cf --- /dev/null +++ b/src/Spectre.Console.Cli/Internal/Extensions/EnumerableExtensions.cs @@ -0,0 +1,14 @@ +namespace Spectre.Console.Cli; + +internal static class EnumerableExtensions +{ + public static IReadOnlyList ToSafeReadOnlyList(this IEnumerable source) + { + return source switch + { + null => new List(), + IReadOnlyList list => list, + _ => source.ToList(), + }; + } +} \ No newline at end of file diff --git a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj b/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj index e74335a..69ba6c2 100644 --- a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj +++ b/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj @@ -13,7 +13,7 @@ - + diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs new file mode 100644 index 0000000..ec88fd1 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs @@ -0,0 +1,23 @@ +namespace Spectre.Console.Tests.Unit.Cli; + +public sealed partial class CommandAppTests +{ + [Fact] + [Expectation("Should_Expose_Raw_Arguments")] + public void Should_Return_Correct_Text_When_Command_Is_Unknown() + { + // Given + var app = new CommandAppTester(); + app.Configure(config => + { + config.AddCommand("test"); + }); + + // When + var result = app.Run("test", "--foo", "32", "--lol"); + + // Then + result.Context.ShouldNotBeNull(); + result.Context.Arguments.ShouldBe(new[] { "test", "--foo", "32", "--lol" }); + } +} \ No newline at end of file From 71f762f6460da7dd972528794cb1e09171530cbc Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Tue, 23 Apr 2024 14:04:00 +0200 Subject: [PATCH 07/57] Add token representation to remaining arguments Before, when adding parsed information to the IRemainingArguments.Parsed, we used the name of the parsed option ('foo') instead of it's representation ('--foo'). This commit fixes that. --- .../Internal/Parsing/CommandTreeParser.cs | 14 +++++--------- .../Internal/Parsing/CommandTreeTokenizer.cs | 4 ++-- .../Unit/CommandAppTests.Branches.cs | 2 +- .../Unit/CommandAppTests.Remaining.cs | 14 +++++++------- .../Unit/CommandAppTests.Version.cs | 4 ++-- .../Unit/CommandAppTests.cs | 10 +++++----- 6 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs index 54152a0..e4fad73 100644 --- a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs +++ b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs @@ -302,11 +302,7 @@ internal class CommandTreeParser var valueToken = stream.Peek(); if (valueToken?.TokenKind == CommandTreeToken.Kind.String) { - var parseValue = true; - if (token.TokenKind == CommandTreeToken.Kind.ShortOption && token.IsGrouped) - { - parseValue = false; - } + bool parseValue = token is not { TokenKind: CommandTreeToken.Kind.ShortOption, IsGrouped: true }; if (context.State == State.Normal && parseValue) { @@ -333,7 +329,7 @@ internal class CommandTreeParser { value = stream.Consume(CommandTreeToken.Kind.String)?.Value; - context.AddRemainingArgument(token.Value, value); + context.AddRemainingArgument(token.Representation, value); // Prevent the option and it's non-boolean value from being added to // mapped parameters (otherwise an exception will be thrown later @@ -364,14 +360,14 @@ internal class CommandTreeParser // In relaxed parsing mode? if (context.ParsingMode == ParsingMode.Relaxed) { - context.AddRemainingArgument(token.Value, value); + context.AddRemainingArgument(token.Representation, value); } } } } else { - context.AddRemainingArgument(token.Value, parseValue ? valueToken.Value : null); + context.AddRemainingArgument(token.Representation, parseValue ? valueToken.Value : null); } } else @@ -379,7 +375,7 @@ internal class CommandTreeParser if (parameter == null && // Only add tokens which have not been matched to a command parameter (context.State == State.Remaining || context.ParsingMode == ParsingMode.Relaxed)) { - context.AddRemainingArgument(token.Value, null); + context.AddRemainingArgument(token.Representation, null); } } diff --git a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs index 78f01eb..27e6edb 100644 --- a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs +++ b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs @@ -171,7 +171,7 @@ internal static class CommandTreeTokenizer } // Encountered a separator? - if (current == '=' || current == ':') + if (current is '=' or ':') { break; } @@ -184,7 +184,7 @@ internal static class CommandTreeTokenizer var value = current.ToString(CultureInfo.InvariantCulture); result.Add(result.Count == 0 ? new CommandTreeToken(CommandTreeToken.Kind.ShortOption, position, value, $"-{value}") - : new CommandTreeToken(CommandTreeToken.Kind.ShortOption, position + result.Count, value, value)); + : new CommandTreeToken(CommandTreeToken.Kind.ShortOption, position + result.Count, value, $"-{value}")); } else if (result.Count == 0 && char.IsDigit(current)) { diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs index 716bd31..4080c6e 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs @@ -89,7 +89,7 @@ public sealed partial class CommandAppTests //cat.Name.ShouldBe("Kitty"); //<-- Should normally be correct, but instead name will be added to the remaining arguments (see below). }); result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("name", values: new[] { "Kitty", }); + result.Context.ShouldHaveRemainingArgument("--name", values: new[] { "Kitty", }); } [Fact] diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs index 92febae..378ec16 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs @@ -56,7 +56,7 @@ public sealed partial class CommandAppTests // Then result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument(unknownFlag.TrimStart('-'), values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument(unknownFlag, values: new[] { (string)null }); result.Context.Remaining.Raw.Count.ShouldBe(0); } @@ -80,7 +80,7 @@ public sealed partial class CommandAppTests // Then result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("r", values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("-r", values: new[] { (string)null }); result.Context.Remaining.Raw.Count.ShouldBe(0); } @@ -189,10 +189,10 @@ public sealed partial class CommandAppTests // Then result.Context.Remaining.Parsed.Count.ShouldBe(4); - result.Context.ShouldHaveRemainingArgument("foo", values: new[] { "bar", "baz" }); - result.Context.ShouldHaveRemainingArgument("b", values: new[] { (string)null }); - result.Context.ShouldHaveRemainingArgument("a", values: new[] { (string)null }); - result.Context.ShouldHaveRemainingArgument("r", values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("--foo", values: new[] { "bar", "baz" }); + result.Context.ShouldHaveRemainingArgument("-b", values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("-a", values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("-r", values: new[] { (string)null }); } [Fact] @@ -280,7 +280,7 @@ public sealed partial class CommandAppTests // Then result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("good-boy", values: new[] { "Please be good Rufus!" }); + result.Context.ShouldHaveRemainingArgument("--good-boy", values: new[] { "Please be good Rufus!" }); result.Context.Remaining.Raw.Count.ShouldBe(0); // nb. there are no "raw" remaining arguments on the command line } diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs index 6064bb5..e9e38dc 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs @@ -51,7 +51,7 @@ public sealed partial class CommandAppTests // Then result.Output.ShouldBe(string.Empty); - result.Context.ShouldHaveRemainingArgument("version", new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("--version", new[] { (string)null }); } [Fact] @@ -70,7 +70,7 @@ public sealed partial class CommandAppTests // Then result.Output.ShouldBe(string.Empty); - result.Context.ShouldHaveRemainingArgument("version", new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("--version", new[] { (string)null }); } [Fact] diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs index 7004c8f..082ca66 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs @@ -215,7 +215,7 @@ public sealed partial class CommandAppTests dog.Name.ShouldBe("\" -Rufus --' "); }); result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("order-by", values: new[] { "\"-size\"", " ", string.Empty }); + result.Context.ShouldHaveRemainingArgument("--order-by", values: new[] { "\"-size\"", " ", string.Empty }); } [Fact] @@ -844,7 +844,7 @@ public sealed partial class CommandAppTests // Then result.Context.ShouldNotBeNull(); result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("foo", values: new[] { "bar" }); + result.Context.ShouldHaveRemainingArgument("--foo", values: new[] { "bar" }); } [Fact] @@ -875,8 +875,8 @@ public sealed partial class CommandAppTests // Then result.Context.ShouldNotBeNull(); result.Context.Remaining.Parsed.Count.ShouldBe(2); - result.Context.ShouldHaveRemainingArgument("foo", values: new[] { "bar" }); - result.Context.ShouldHaveRemainingArgument("f", values: new[] { "baz" }); + result.Context.ShouldHaveRemainingArgument("--foo", values: new[] { "bar" }); + result.Context.ShouldHaveRemainingArgument("-f", values: new[] { "baz" }); result.Context.Remaining.Raw.Count.ShouldBe(5); result.Context.Remaining.Raw.ShouldBe(new[] { @@ -909,7 +909,7 @@ public sealed partial class CommandAppTests // Then result.Context.ShouldNotBeNull(); result.Context.Remaining.Parsed.Count.ShouldBe(1); - result.Context.ShouldHaveRemainingArgument("foo", values: new[] { (string)null }); + result.Context.ShouldHaveRemainingArgument("--foo", values: new[] { (string)null }); } [Fact] From 2ead17740439977dd3270a67143c6ff862e051e9 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Tue, 23 Apr 2024 15:18:42 +0200 Subject: [PATCH 08/57] Update social card to show .NET 8.0 --- docs/src/SocialCards/index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/SocialCards/index.cshtml b/docs/src/SocialCards/index.cshtml index 749052f..15f66ab 100644 --- a/docs/src/SocialCards/index.cshtml +++ b/docs/src/SocialCards/index.cshtml @@ -15,7 +15,7 @@
-
╭─ ~/spectre.console .NET 7.0  main
+
╭─ ~/spectre.console .NET 8.0  main
╰─ dotnet run
╭────────────────────────────────────────────────────────╮
From c5e11626b521c47c45339d90ae7dcebc736a3224 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Tue, 23 Apr 2024 15:18:52 +0200 Subject: [PATCH 09/57] Add blog post for 0.49 release --- ...024-04-23-spectre-console-0.49-released.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/input/blog/posts/2024-04-23-spectre-console-0.49-released.md diff --git a/docs/input/blog/posts/2024-04-23-spectre-console-0.49-released.md b/docs/input/blog/posts/2024-04-23-spectre-console-0.49-released.md new file mode 100644 index 0000000..f6b856e --- /dev/null +++ b/docs/input/blog/posts/2024-04-23-spectre-console-0.49-released.md @@ -0,0 +1,55 @@ +Title: Spectre.Console 0.49 released! +Description: Bug fixes, bug fixes, bug fixes +Published: 2024-04-23 +Category: Release Notes +Excluded: false +--- + +Version 0.49 of Spectre.Console has been released! + +## New Contributors +* @baronfel made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1425 +* @DarqueWarrior made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1431 +* @tonycknight made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1435 +* @caesay made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1439 +* @jsheely made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1414 +* @danielcweber made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1456 +* @martincostello made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1477 +* @slang25 made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1289 +* @thomhurst made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1250 +* @gerardog made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1489 +* @yenneferofvengerberg made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1503 +* @BlazeFace made their first contribution in https://github.com/spectreconsole/spectre.console/pull/1509 + +## Changes + +* Cleanup line endings by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1381 +* Added Spectre.Console.Cli to quick-start. by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1413 +* Fix rendering of ListPrompt for odd pageSizes by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1365 +* Remove mandelbrot example due to conflicting license by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1426 +* Allow specifying a property to ignore the use of build-time packages for versioning and analysis by @baronfel in https://github.com/spectreconsole/spectre.console/pull/1425 +* Add the possibility to register multiple interceptors by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1412 +* Added the ITypeResolver to the ExceptionHandler by @nils-a in https://github.com/spectreconsole/spectre.console/pull/1411 +* Updated typo in commandApp.md by @DarqueWarrior in https://github.com/spectreconsole/spectre.console/pull/1431 +* Command with -v displays app version instead of executing the command by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1427 +* HelpProvider colors should be configurable by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1408 +* Direct contributors to the current CONTRIBUTING.md by @tonycknight in https://github.com/spectreconsole/spectre.console/pull/1435 +* Fix deadlock when cancelling prompts by @caesay in https://github.com/spectreconsole/spectre.console/pull/1439 +* Add progress bar value formatter by @jsheely in https://github.com/spectreconsole/spectre.console/pull/1414 +* Update dependencies and do some clean-up by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1440 +* Delete [UsesVerify], which has become obsolete through the latest update. by @danielcweber in https://github.com/spectreconsole/spectre.console/pull/1456 +* Don't erase secret prompt text upon backspace when mask is null by @danielcweber in https://github.com/spectreconsole/spectre.console/pull/1458 +* Update dependencies to the latest version by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1459 +* Automatically register command settings by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1463 +* Remove [DebuggerDisplay] from Paragraph by @martincostello in https://github.com/spectreconsole/spectre.console/pull/1477 +* Selection Prompt Search by @slang25 in https://github.com/spectreconsole/spectre.console/pull/1289 +* Update dependency SixLabors.ImageSharp to v3.1.3 by @renovate in https://github.com/spectreconsole/spectre.console/pull/1486 +* Positioned Progress Tasks - Before or After Other Tasks by @thomhurst in https://github.com/spectreconsole/spectre.console/pull/1250 +* Added NoStackTrace to ExceptionFormats by @gerardog in https://github.com/spectreconsole/spectre.console/pull/1489 +* Pipe character for listing options (issue 1434) by @FrankRay78 in https://github.com/spectreconsole/spectre.console/pull/1498 +* Improve XmlDoc output by @yenneferofvengerberg in https://github.com/spectreconsole/spectre.console/pull/1503 +* Revert 71a5d830 to undo flickering regression by @phil-scott-78 in https://github.com/spectreconsole/spectre.console/pull/1504 +* AddDelegate uses an abstract type when used in a branch by @BlazeFace in https://github.com/spectreconsole/spectre.console/pull/1509 +* Missing Separator When Headers are Hidden by @BlazeFace in https://github.com/spectreconsole/spectre.console/pull/1513 +* Expose raw arguments on the command context by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1523 +* Add token representation to remaining arguments by @patriksvensson in https://github.com/spectreconsole/spectre.console/pull/1525 \ No newline at end of file From 88515b7d7fac8202593debe356cd774e18c7454b Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Thu, 25 Apr 2024 19:33:54 +0200 Subject: [PATCH 10/57] Add Verify.Tool dotnet tool --- dotnet-tools.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dotnet-tools.json b/dotnet-tools.json index b0036d8..a7f9d03 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -13,6 +13,12 @@ "commands": [ "dotnet-example" ] + }, + "verify.tool": { + "version": "0.6.0", + "commands": [ + "dotnet-verify" + ] } } } \ No newline at end of file From 3acc90e47ca1855a35d53ffe85558d1734e559a0 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Thu, 25 Apr 2024 19:34:07 +0200 Subject: [PATCH 11/57] Make `-v|--version` opt-in We added an automatic version option in 0.49. We did this with good intentions, but forgot that people might already use --version as an option for a root command. This commit makes -v|--version completely opt-in. --- src/Spectre.Console.Cli/Help/HelpProvider.cs | 146 ++++++++++-------- src/Spectre.Console.Cli/Help/ICommandModel.cs | 5 + .../Internal/CommandExecutor.cs | 16 +- .../Internal/Modelling/CommandModel.cs | 6 +- .../Help/ArgumentOrder.Output.verified.txt | 5 +- ...Configured_By_Instance.Output.verified.txt | 27 ++-- ...Registered_By_Instance.Output.verified.txt | 5 +- .../Help/Default.Output.verified.txt | 5 +- .../Help/Default_Examples.Output.verified.txt | 3 +- .../Default_Without_Args.Output.verified.txt | 5 +- ...out_Args_Additional.Output_DE.verified.txt | 3 +- ...out_Args_Additional.Output_EN.verified.txt | 5 +- ...out_Args_Additional.Output_FR.verified.txt | 5 +- ...out_Args_Additional.Output_SV.verified.txt | 3 +- ...nal_Style_BoldHeadings.Output.verified.txt | 3 +- ...ditional_Style_Default.Output.verified.txt | 3 +- ..._Additional_Style_None.Output.verified.txt | 3 +- ...ion_No_Trailing_Period.Output.verified.txt | 5 +- ...Hidden_Command_Options.Output.verified.txt | 7 +- .../Help/Hidden_Commands.Output.verified.txt | 5 +- .../Help/NoDescription.Output.verified.txt | 5 +- .../Help/NoVersion.Output.verified.txt | 12 ++ .../Help/Root.Output.verified.txt | 5 +- .../Help/Root_Command.Output.verified.txt | 3 +- .../Help/Root_Examples.Output.verified.txt | 5 +- ...Root_Examples_Children.Output.verified.txt | 5 +- ...xamples_Children_Eight.Output.verified.txt | 37 +++-- ...Examples_Children_None.Output.verified.txt | 17 +- ...amples_Children_Twelve.Output.verified.txt | 45 +++--- .../Root_Examples_Leafs.Output.verified.txt | 5 +- ...t_Examples_Leafs_Eight.Output.verified.txt | 3 +- ...ot_Examples_Leafs_None.Output.verified.txt | 5 +- ..._Examples_Leafs_Twelve.Output.verified.txt | 3 +- .../Help/Version.Output.verified.txt | 13 ++ .../Unit/CommandAppTests.Help.cs | 39 +++++ .../Unit/CommandAppTests.Version.cs | 20 ++- 36 files changed, 276 insertions(+), 211 deletions(-) create mode 100644 test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt create mode 100644 test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt 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(); From 5d4b2c88e53f538b4ade5fba6207a25b0af80a66 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Thu, 25 Apr 2024 19:51:05 +0200 Subject: [PATCH 12/57] Add extension method to use automatic application version --- .../ConfiguratorExtensions.cs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Spectre.Console.Cli/ConfiguratorExtensions.cs b/src/Spectre.Console.Cli/ConfiguratorExtensions.cs index eb3f1be..80895e3 100644 --- a/src/Spectre.Console.Cli/ConfiguratorExtensions.cs +++ b/src/Spectre.Console.Cli/ConfiguratorExtensions.cs @@ -82,7 +82,7 @@ public static class ConfiguratorExtensions } /// - /// Overrides the auto-detected version of the application. + /// Sets the version of the application. /// /// The configurator. /// The version of application. @@ -98,6 +98,25 @@ public static class ConfiguratorExtensions return configurator; } + /// + /// Uses the version retrieved from the + /// as the application's version. + /// + /// The configurator. + /// A configurator that can be used to configure the application further. + public static IConfigurator UseAssemblyInformationalVersion(this IConfigurator configurator) + { + if (configurator == null) + { + throw new ArgumentNullException(nameof(configurator)); + } + + configurator.Settings.ApplicationVersion = + VersionHelper.GetVersion(Assembly.GetEntryAssembly()); + + return configurator; + } + /// /// Hides the DEFAULT column that lists default values coming from the /// in the options help text. From b1b50a21f70da50e27611104befec3f165e87069 Mon Sep 17 00:00:00 2001 From: Sean Fausett Date: Sat, 27 Apr 2024 09:24:09 +1200 Subject: [PATCH 13/57] Remove redundant explain settings ctor --- .../Internal/Commands/ExplainCommand.cs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/Spectre.Console.Cli/Internal/Commands/ExplainCommand.cs b/src/Spectre.Console.Cli/Internal/Commands/ExplainCommand.cs index 832872d..c2b1e59 100644 --- a/src/Spectre.Console.Cli/Internal/Commands/ExplainCommand.cs +++ b/src/Spectre.Console.Cli/Internal/Commands/ExplainCommand.cs @@ -15,23 +15,16 @@ internal sealed class ExplainCommand : Command public sealed class Settings : CommandSettings { - public Settings(string[]? commands, bool? detailed, bool includeHidden) - { - Commands = commands; - Detailed = detailed; - IncludeHidden = includeHidden; - } - [CommandArgument(0, "[command]")] - public string[]? Commands { get; } + public string[]? Commands { get; set; } [Description("Include detailed information about the commands.")] [CommandOption("-d|--detailed")] - public bool? Detailed { get; } + public bool? Detailed { get; set; } [Description("Include hidden commands and options.")] [CommandOption("--hidden")] - public bool IncludeHidden { get; } + public bool IncludeHidden { get; set; } } public override int Execute(CommandContext context, Settings settings) From 43b5ac99f996e7ecfb17de498bef7e153a8a9af9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Apr 2024 06:58:29 +0000 Subject: [PATCH 14/57] chore: Update dependency dotnet-sdk to v8.0.204 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index c2d29de..af3eb74 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "$schema": "http://json.schemastore.org/global", "sdk": { - "version": "8.0.200", + "version": "8.0.204", "rollForward": "latestFeature" } } From 68b28b57f221770fcfbd4dc2799f689cc0be1029 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Apr 2024 09:35:21 +0000 Subject: [PATCH 15/57] chore: Update dependency Roslynator.Analyzers to v4.12.2 --- src/Directory.Build.props | 2 +- test/Directory.Build.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 06d4157..d8f66ca 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -38,7 +38,7 @@ All - + All diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 7e58591..ade3951 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -9,7 +9,7 @@ All - + All From e5a6459c52b5c355be23ee273fe59d57d8a1952b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Apr 2024 09:35:24 +0000 Subject: [PATCH 16/57] chore: Update rickstaa/top-issues-action action to v1.3.100 --- .github/workflows/top-issues-dashboard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/top-issues-dashboard.yml b/.github/workflows/top-issues-dashboard.yml index 56a04ab..5a3ac5f 100644 --- a/.github/workflows/top-issues-dashboard.yml +++ b/.github/workflows/top-issues-dashboard.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Top Issues action - uses: rickstaa/top-issues-action@v1.3.99 + uses: rickstaa/top-issues-action@v1.3.100 env: github_token: ${{ secrets.GITHUB_TOKEN }} with: From 7b13148773fe048276958222be543da7dc3f5c06 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 17 May 2024 14:48:02 +0200 Subject: [PATCH 17/57] Trim trailing comma in settings --- docs/input/cli/settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/input/cli/settings.md b/docs/input/cli/settings.md index b063831..ba44d70 100644 --- a/docs/input/cli/settings.md +++ b/docs/input/cli/settings.md @@ -105,7 +105,7 @@ A `CommandOption` can be defined as an array like the following: ```csharp [CommandOption("-n|--name ")] -public string[] Names { get; set; }, +public string[] Names { get; set; } ``` This would allow the user to run `app.exe --name Dwayne --name Elizondo --name "Mountain Dew" --name Herbert --name Camacho` and would result in a 5 element array consisting of Dwayne, Elizondo, Mountain Dew, Herbert and Camacho. From 0e2ed511a5cfa303ba99c97ebb3f36c50cfa526f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 16:03:54 +0000 Subject: [PATCH 18/57] chore: Update dependency Microsoft.NET.Test.Sdk to v17.10.0 --- .../Spectre.Console.Analyzer.Tests.csproj | 2 +- test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj | 2 +- test/Spectre.Console.Tests/Spectre.Console.Tests.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj b/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj index b33f08a..19011e7 100644 --- a/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj +++ b/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj @@ -13,7 +13,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj b/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj index db78e3a..fede880 100644 --- a/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj +++ b/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj b/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj index f36509d..1004369 100644 --- a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj +++ b/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj @@ -18,7 +18,7 @@ - + From 5c87d7fa04424faadf54686f92709af277ec28b3 Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Fri, 17 May 2024 18:08:29 -0300 Subject: [PATCH 19/57] Allow using -? as a shorthand for -h Given that it's quite a common switch and extremely unlikely to be already in use for something else, we can just consider it to be the same as having entered `-h` as an arg. This adds the `?` as a valid option character name. Fixes #1547 --- .../Internal/Configuration/TemplateParser.cs | 2 +- .../Internal/Parsing/CommandTreeParser.cs | 2 +- .../Internal/Parsing/CommandTreeTokenizer.cs | 2 +- .../Help/Root.QuestionMark.verified.txt | 10 +++++ .../Root_Command.QuestionMark.verified.txt | 17 ++++++++ .../Unit/CommandAppTests.Help.cs | 42 +++++++++++++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt create mode 100644 test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt diff --git a/src/Spectre.Console.Cli/Internal/Configuration/TemplateParser.cs b/src/Spectre.Console.Cli/Internal/Configuration/TemplateParser.cs index d7eef9b..1259472 100644 --- a/src/Spectre.Console.Cli/Internal/Configuration/TemplateParser.cs +++ b/src/Spectre.Console.Cli/Internal/Configuration/TemplateParser.cs @@ -86,7 +86,7 @@ internal static class TemplateParser foreach (var character in token.Value) { - if (!char.IsLetterOrDigit(character) && character != '-' && character != '_') + if (!char.IsLetterOrDigit(character) && character != '-' && character != '_' && character != '?') { throw CommandTemplateException.InvalidCharacterInOptionName(template, token, character); } diff --git a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs index e4fad73..d985dcb 100644 --- a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs +++ b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeParser.cs @@ -21,7 +21,7 @@ internal class CommandTreeParser { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _parsingMode = parsingMode ?? _configuration.ParsingMode; - _help = new CommandOptionAttribute("-h|--help"); + _help = new CommandOptionAttribute("-?|-h|--help"); _convertFlagsToRemainingArguments = convertFlagsToRemainingArguments ?? false; CaseSensitivity = caseSensitivity; diff --git a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs index 27e6edb..840b072 100644 --- a/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs +++ b/src/Spectre.Console.Cli/Internal/Parsing/CommandTreeTokenizer.cs @@ -176,7 +176,7 @@ internal static class CommandTreeTokenizer break; } - if (char.IsLetter(current)) + if (char.IsLetter(current) || current is '?') { context.AddRemaining(current); reader.Read(); // Consume diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt new file mode 100644 index 0000000..0432fe4 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt @@ -0,0 +1,10 @@ +USAGE: + myapp [OPTIONS] + +OPTIONS: + -h, --help Prints help information + +COMMANDS: + dog The dog command + horse The horse command + giraffe The giraffe command \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt new file mode 100644 index 0000000..03c6875 --- /dev/null +++ b/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt @@ -0,0 +1,17 @@ +DESCRIPTION: +The horse command. + +USAGE: + myapp horse [LEGS] [OPTIONS] + +ARGUMENTS: + [LEGS] The number of legs + +OPTIONS: + DEFAULT + -h, --help Prints help information + -a, --alive Indicates whether or not the animal is alive + -n, --name + -d, --day + --file food.txt + --directory \ 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 9ce30cc..8d3af80 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs +++ b/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs @@ -28,6 +28,27 @@ public sealed partial class CommandAppTests return Verifier.Verify(result.Output); } + [Fact] + [Expectation("Root", "QuestionMark")] + public Task Should_Output_Root_Correctly_QuestionMark() + { + // Given + var fixture = new CommandAppTester(); + fixture.Configure(configurator => + { + configurator.SetApplicationName("myapp"); + configurator.AddCommand("dog"); + configurator.AddCommand("horse"); + configurator.AddCommand("giraffe"); + }); + + // When + var result = fixture.Run("-?"); + + // Then + return Verifier.Verify(result.Output); + } + [Fact] [Expectation("Root_Command")] public Task Should_Output_Root_Command_Correctly() @@ -49,6 +70,27 @@ public sealed partial class CommandAppTests return Verifier.Verify(result.Output); } + [Fact] + [Expectation("Root_Command", "QuestionMark")] + public Task Should_Output_Root_Command_Correctly_QuestionMark() + { + // Given + var fixture = new CommandAppTester(); + fixture.Configure(configurator => + { + configurator.SetApplicationName("myapp"); + configurator.AddCommand("dog"); + configurator.AddCommand("horse"); + configurator.AddCommand("giraffe"); + }); + + // When + var result = fixture.Run("horse", "-?"); + + // Then + return Verifier.Verify(result.Output); + } + [Fact] [Expectation("Hidden_Commands")] public Task Should_Skip_Hidden_Commands() From f6bcf67cbe922b21158263a513137c36826dc837 Mon Sep 17 00:00:00 2001 From: Jan Klass Date: Sun, 23 Jun 2024 14:06:48 +0200 Subject: [PATCH 20/57] Update MSDN link to learn.microsoft.com --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2316734..1893f72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,7 +39,7 @@ What is generally considered trivial: ### Code style Normal .NET coding guidelines apply. -See the [Framework Design Guidelines](https://msdn.microsoft.com/en-us/library/ms229042%28v=vs.110%29.aspx) for more information. +See the [Framework Design Guidelines](https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/) for more information. ### Dependencies @@ -158,4 +158,4 @@ Harder for us roughly translates to a longer SLA for your pull request. ## Acknowledgement This contribution guide was taken from the [Chocolatey project](https://chocolatey.org/) -with permission and was edited to follow Spectre.Console's conventions and processes. \ No newline at end of file +with permission and was edited to follow Spectre.Console's conventions and processes. From ca441dbe7ae011d12f0ed02c1720ddae15ad5e41 Mon Sep 17 00:00:00 2001 From: Jan Klass Date: Sun, 23 Jun 2024 14:14:36 +0200 Subject: [PATCH 21/57] Fix outdated issue label reference 'up for grabs' -> 'good first issue' --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1893f72..4c95b29 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,7 @@ Any new code should also have reasonable unit test coverage. information and a link back to the discussion. * Once you get a nod from someone in the Spectre.Console Team, you can start on the feature. * Alternatively, if a feature is on the issues list with the - [Up For Grabs](https://github.com/spectreconsole/spectre.console/labels/up-for-grabs) label, + [good first issue](https://github.com/spectreconsole/spectre.console/labels/good%20first%20issue) label, it is open for a community member (contributor) to patch. You should comment that you are signing up for it on the issue so someone else doesn't also sign up for the work. From b61fff042bc2e089a9f69709a5171c5f36802921 Mon Sep 17 00:00:00 2001 From: Jan Klass Date: Sun, 23 Jun 2024 13:59:46 +0200 Subject: [PATCH 22/57] Make method reference to Markup.Escape more obvious best-practices refers and links to the `Markup.Escape` method but labeled it `EscapeMarkup`. I got quite confused trying to find EscapeMarkup. Using the typical *class dot method* pattern seems preferable. It also matches what you write in code. --- docs/input/best-practices.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/input/best-practices.md b/docs/input/best-practices.md index 7d7c13c..20dc867 100644 --- a/docs/input/best-practices.md +++ b/docs/input/best-practices.md @@ -60,7 +60,7 @@ Spectre.Console will tell your terminal to use the color that is configured in t If you are using an 8 or 24-bit color for the foreground text, it is recommended that you also set an appropriate background color to match. -**Do** escape data when outputting any user input or any external data via Markup using the [`EscapeMarkup`](xref:M:Spectre.Console.Markup.Escape(System.String)) method on the data. Any user input containing `[` or `]` will likely cause a runtime error while rendering otherwise. +**Do** escape data when outputting any user input or any external data via Markup using the [`Markup.Escape`](xref:M:Spectre.Console.Markup.Escape(System.String)) method on the data. Any user input containing `[` or `]` will likely cause a runtime error while rendering otherwise. **Consider** replacing `Markup` and `MarkupLine` with [`MarkupInterpolated`](xref:M:Spectre.Console.AnsiConsole.MarkupInterpolated(System.FormattableString)) and [`MarkupLineInterpolated`](xref:M:Spectre.Console.AnsiConsole.MarkupLineInterpolated(System.FormattableString)). Both these methods will automatically escape all data in the interpolated string holes. When working with widgets such as the Table and Tree, consider using [`Markup.FromInterpolated`](xref:M:Spectre.Console.Markup.FromInterpolated(System.FormattableString,Spectre.Console.Style)) to generate an `IRenderable` from an interpolated string. @@ -119,4 +119,4 @@ For cmd.exe, the following steps are required to enable Unicode and Emoji suppor 5. Reboot. You will also need to ensure that your Console application is configured to use a font that supports Unicode and Emoji, -such as Cascadia Code. \ No newline at end of file +such as Cascadia Code. From a19c84e25ab0b534f4ade5768ffd5e2d344044b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:43:43 +0000 Subject: [PATCH 23/57] chore: Update dependency SixLabors.ImageSharp to v3.1.5 [SECURITY] --- .../Spectre.Console.ImageSharp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj b/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj index 69ba6c2..73a306d 100644 --- a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj +++ b/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj @@ -13,7 +13,7 @@ - + From 64b9ef582d27057954e7c38009353d66e7593f42 Mon Sep 17 00:00:00 2001 From: ymqn <168128663+yymqn@users.noreply.github.com> Date: Thu, 25 Jul 2024 22:43:55 +0200 Subject: [PATCH 24/57] Fixed incorrect decoration check from Bold to Italic in HtmlEncoder.BuildCss --- src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs b/src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs index 31f36a0..0343f39 100644 --- a/src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs +++ b/src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs @@ -98,7 +98,7 @@ internal sealed class HtmlEncoder : IAnsiConsoleEncoder css.Add("font-weight: bold"); } - if ((style.Decoration & Decoration.Bold) != 0) + if ((style.Decoration & Decoration.Italic) != 0) { css.Add("font-style: italic"); } From d79e6adc5f8e637fb35c88f987023ffda6707243 Mon Sep 17 00:00:00 2001 From: ymqn <168128663+yymqn@users.noreply.github.com> Date: Thu, 25 Jul 2024 22:45:10 +0200 Subject: [PATCH 25/57] Updated test expectations to match changes in HtmlEncoder --- .../Expectations/Widgets/Recorder/Html.Output.verified.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt b/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt index 84a882e..ee7fd0c 100644 --- a/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt +++ b/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt @@ -1,8 +1,8 @@
 ┌─────────────────┬───────┬─────┐
- Foo              Bar    Qux 
+ Foo              Bar    Qux 
 ├─────────────────┼───────┼─────┤
- Corgi            Waldo  Zap 
+ Corgi            Waldo  Zap 
  ─────────────             
   Hello World              
  ─────────────             

From bb72b44d607a5a2f407e910f6dc21f2a33c1b89a Mon Sep 17 00:00:00 2001
From: tonwin618 
Date: Thu, 1 Aug 2024 13:55:09 +0800
Subject: [PATCH 26/57] Delete based on character width when pressing
 Backspace.

---
 .../Extensions/AnsiConsoleExtensions.Input.cs          | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs b/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs
index 7769e33..2d6a4cb 100644
--- a/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs
+++ b/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs
@@ -52,11 +52,19 @@ public static partial class AnsiConsoleExtensions
             {
                 if (text.Length > 0)
                 {
+                    var lastChar = text.Last();
                     text = text.Substring(0, text.Length - 1);
 
                     if (mask != null)
                     {
-                        console.Write("\b \b");
+                        if (UnicodeCalculator.GetWidth(lastChar) == 1)
+                        {
+                            console.Write("\b \b");
+                        }
+                        else if (UnicodeCalculator.GetWidth(lastChar) == 2)
+                        {
+                            console.Write("\b \b\b \b");
+                        }
                     }
                 }
 

From 42fd801876398aea555dc93fcfe4bc0525bd2df4 Mon Sep 17 00:00:00 2001
From: Patrik Svensson 
Date: Mon, 5 Aug 2024 20:41:45 +0200
Subject: [PATCH 27/57] Preparations for the 1.0 release

* Less cluttered solution layout.
* Move examples to a repository of its own.
* Move Roslyn analyzer to a repository of its own.
* Enable central package management.
* Clean up csproj files.
* Add README file to NuGet packages.
---
 README.fa.md                                  |  23 +-
 README.md                                     |  23 +-
 README.pt-BR.md                               |  22 +-
 README.zh.md                                  |  21 +-
 build.cake                                    |  53 +-
 examples/Cli/Delegates/BarSettings.cs         |  15 -
 examples/Cli/Delegates/Delegates.csproj       |  17 -
 examples/Cli/Delegates/Program.cs             |  61 --
 .../Demo/Commands/Add/AddPackageCommand.cs    |  46 --
 .../Demo/Commands/Add/AddReferenceCommand.cs  |  29 -
 examples/Cli/Demo/Commands/Add/AddSettings.cs |  11 -
 examples/Cli/Demo/Commands/Run/RunCommand.cs  |  69 --
 .../Cli/Demo/Commands/Serve/ServeCommand.cs   |  40 --
 examples/Cli/Demo/Demo.csproj                 |  17 -
 examples/Cli/Demo/Program.cs                  |  39 --
 examples/Cli/Demo/Utilities/SettingsDumper.cs |  28 -
 examples/Cli/Demo/Verbosity.cs                |  53 --
 examples/Cli/Dynamic/Dynamic.csproj           |  17 -
 examples/Cli/Dynamic/MyCommand.cs             |  20 -
 examples/Cli/Dynamic/Program.cs               |  23 -
 examples/Cli/Help/CustomHelpProvider.cs       |  30 -
 examples/Cli/Help/DefaultCommand.cs           |  20 -
 examples/Cli/Help/Help.csproj                 |  18 -
 examples/Cli/Help/Program.cs                  |  23 -
 .../Cli/Injection/Commands/DefaultCommand.cs  |  29 -
 examples/Cli/Injection/IGreeter.cs            |  16 -
 .../Injection/Infrastructure/TypeRegistrar.cs |  40 --
 .../Injection/Infrastructure/TypeResolver.cs  |  32 -
 examples/Cli/Injection/Injection.csproj       |  21 -
 examples/Cli/Injection/Program.cs             |  23 -
 examples/Cli/Logging/Commands/HelloCommand.cs |  34 -
 .../Logging/Commands/LogCommandSettings.cs    |  55 --
 .../Logging/Infrastructure/LogInterceptor.cs  |  19 -
 .../Logging/Infrastructure/LoggingEnricher.cs |  37 --
 .../Logging/Infrastructure/TypeRegistrar.cs   |  40 --
 .../Logging/Infrastructure/TypeResolver.cs    |  24 -
 examples/Cli/Logging/Logging.csproj           |  26 -
 examples/Cli/Logging/Program.cs               |  54 --
 .../AlternateScreen/AlternateScreen.csproj    |  15 -
 examples/Console/AlternateScreen/Program.cs   |  26 -
 examples/Console/Borders/Borders.csproj       |  15 -
 examples/Console/Borders/Program.cs           |  86 ---
 examples/Console/Calendars/Calendars.csproj   |  15 -
 examples/Console/Calendars/Program.cs         |  18 -
 examples/Console/Canvas/Canvas.csproj         |  22 -
 examples/Console/Canvas/Program.cs            |  43 --
 examples/Console/Canvas/cake.png              | Bin 52832 -> 0 bytes
 examples/Console/Charts/Charts.csproj         |  15 -
 examples/Console/Charts/Program.cs            |  42 --
 examples/Console/Colors/Colors.csproj         |  15 -
 examples/Console/Colors/Program.cs            | 105 ---
 examples/Console/Columns/Columns.csproj       |  19 -
 examples/Console/Columns/Program.cs           |  30 -
 examples/Console/Columns/User.cs              |  88 ---
 examples/Console/Cursor/Cursor.csproj         |  15 -
 examples/Console/Cursor/Program.cs            |  19 -
 .../Console/Decorations/Decorations.csproj    |  15 -
 examples/Console/Decorations/Program.cs       |  29 -
 examples/Console/Emojis/Emojis.csproj         |  15 -
 examples/Console/Emojis/Program.cs            |  23 -
 examples/Console/Exceptions/Exceptions.csproj |  15 -
 examples/Console/Exceptions/Program.cs        | 101 ---
 examples/Console/Figlet/Figlet.csproj         |  15 -
 examples/Console/Figlet/Program.cs            |  13 -
 examples/Console/Grids/Grids.csproj           |  15 -
 examples/Console/Grids/Program.cs             |  23 -
 examples/Console/Info/Info.csproj             |  15 -
 examples/Console/Info/Program.cs              |  33 -
 examples/Console/Json/Json.csproj             |  16 -
 examples/Console/Json/Program.cs              |  36 --
 examples/Console/Layout/Layout.csproj         |  15 -
 examples/Console/Layout/Program.cs            |  60 --
 examples/Console/Links/Links.csproj           |  15 -
 examples/Console/Links/Program.cs             |  20 -
 examples/Console/Live/Live.csproj             |  15 -
 examples/Console/Live/Program.cs              |  81 ---
 examples/Console/LiveTable/LiveTable.csproj   |  15 -
 examples/Console/LiveTable/Program.cs         |  86 ---
 examples/Console/Minimal/GlobalUsings.cs      |   2 -
 examples/Console/Minimal/Minimal.csproj       |  16 -
 examples/Console/Minimal/Program.cs           |  12 -
 examples/Console/Panels/Panels.csproj         |  15 -
 examples/Console/Panels/Program.cs            |  41 --
 examples/Console/Paths/Paths.csproj           |  15 -
 examples/Console/Paths/Program.cs             |  67 --
 .../Console/Progress/DescriptionGenerator.cs  |  44 --
 examples/Console/Progress/Program.cs          | 121 ----
 examples/Console/Progress/Progress.csproj     |  19 -
 examples/Console/Prompt/Program.cs            | 182 ------
 examples/Console/Prompt/Prompt.csproj         |  16 -
 examples/Console/Rules/Program.cs             |  42 --
 examples/Console/Rules/Rules.csproj           |  15 -
 .../Console/Showcase/ExceptionGenerator.cs    |  29 -
 examples/Console/Showcase/Program.cs          | 154 -----
 examples/Console/Showcase/Showcase.csproj     |  15 -
 examples/Console/Status/Program.cs            |  69 --
 examples/Console/Status/Status.csproj         |  19 -
 examples/Console/Tables/Program.cs            |  46 --
 examples/Console/Tables/Tables.csproj         |  15 -
 examples/Console/Trees/Program.cs             |  44 --
 examples/Console/Trees/Trees.csproj           |  15 -
 examples/Directory.Build.props                |   5 -
 examples/Examples.sln                         | 600 ------------------
 examples/Shared/ColorBox.cs                   | 123 ----
 examples/Shared/Extensions/ColorExtensions.cs |  14 -
 examples/Shared/Shared.csproj                 |  14 -
 resources/nuget/Spectre.Console.Cli.md        |   5 +
 resources/nuget/Spectre.Console.ImageSharp.md |   5 +
 resources/nuget/Spectre.Console.Json.md       |   5 +
 resources/nuget/Spectre.Console.Testing.md    |   5 +
 resources/nuget/Spectre.Console.md            |   5 +
 resources/nuget/logo.png                      | Bin 0 -> 9754 bytes
 resources/scripts/Generator/Generator.csproj  |  12 +-
 resources/scripts/Generator/Generator.sln     |   4 +-
 src/.editorconfig                             |   5 +-
 src/Directory.Build.props                     |  30 +-
 src/Directory.Packages.props                  |  30 +
 .../Spectre.Console.ImageSharp/CanvasImage.cs |   0
 .../CanvasImageExtensions.cs                  |   0
 .../Spectre.Console.ImageSharp.csproj         |  17 +
 .../Spectre.Console.Json/IJsonParser.cs       |   0
 .../Spectre.Console.Json/JsonBuilder.cs       |   0
 .../Spectre.Console.Json/JsonParser.cs        |   0
 .../Spectre.Console.Json/JsonText.cs          |   0
 .../JsonTextExtensions.cs                     |   0
 .../Spectre.Console.Json/JsonTextStyles.cs    |   0
 .../Spectre.Console.Json/JsonToken.cs         |   0
 .../Spectre.Console.Json/JsonTokenReader.cs   |   0
 .../Spectre.Console.Json/JsonTokenType.cs     |   0
 .../Spectre.Console.Json/JsonTokenizer.cs     |   0
 .../Spectre.Console.Json/Properties/Usings.cs |   0
 .../Spectre.Console.Json.csproj               |  20 +
 .../Spectre.Console.Json/Syntax/JsonArray.cs  |   0
 .../Syntax/JsonBoolean.cs                     |   0
 .../Spectre.Console.Json/Syntax/JsonMember.cs |   0
 .../Spectre.Console.Json/Syntax/JsonNull.cs   |   0
 .../Spectre.Console.Json/Syntax/JsonNumber.cs |   0
 .../Spectre.Console.Json/Syntax/JsonObject.cs |   0
 .../Spectre.Console.Json/Syntax/JsonString.cs |   0
 .../Spectre.Console.Json/Syntax/JsonSyntax.cs |   0
 .../Syntax/JsonSyntaxVisitor.cs               |   0
 .../Program.cs                                |  15 -
 .../Spectre.Console.Analyzer.Sandbox.csproj   |  15 -
 src/Spectre.Console.Analyzer.sln              |  79 ---
 ...pectre.Console.Analyzer.v3.ncrunchsolution |   6 -
 ...orInstanceAnsiConsoleOverStaticAnalyzer.cs |  90 ---
 .../NoConcurrentLiveRenderablesAnalyzer.cs    |  74 ---
 .../NoPromptsDuringLiveRenderablesAnalyzer.cs |  80 ---
 .../Analyzers/SpectreAnalyzer.cs              |  22 -
 ...seSpectreInsteadOfSystemConsoleAnalyzer.cs |  61 --
 src/Spectre.Console.Analyzer/Constants.cs     |  14 -
 src/Spectre.Console.Analyzer/Descriptors.cs   |  76 ---
 .../CodeActions/SwitchToAnsiConsoleAction.cs  | 202 ------
 .../StaticAnsiConsoleToInstanceFix.cs         |  35 -
 .../SystemConsoleToAnsiConsoleFix.cs          |  35 -
 src/Spectre.Console.Analyzer/Fixes/Syntax.cs  |   8 -
 .../Properties/Usings.cs                      |  14 -
 .../Spectre.Console.Analyzer.csproj           |  33 -
 .../Spectre.Console.Cli.csproj                |  14 +-
 .../Spectre.Console.ImageSharp.csproj         |  23 -
 .../Spectre.Console.Json.csproj               |  26 -
 .../Spectre.Console.Testing.csproj            |   8 +-
 src/Spectre.Console.sln                       |  22 +-
 src/Spectre.Console.sln.DotSettings           |   2 -
 src/Spectre.Console.v3.ncrunchsolution        |   6 -
 src/Spectre.Console/Spectre.Console.csproj    |  33 +-
 {test => src/Tests}/.editorconfig             |   0
 src/Tests/Directory.Build.props               |  11 +
 .../Spectre.Console.Cli.Tests/Constants.cs    |   0
 .../Data/Commands/AnimalCommand.cs            |   0
 .../Data/Commands/AsynchronousCommand.cs      |   0
 .../Data/Commands/CatCommand.cs               |   0
 .../Data/Commands/DogCommand.cs               |   0
 .../Data/Commands/DumpRemainingCommand.cs     |   0
 .../Data/Commands/EmptyCommand.cs             |   0
 .../Data/Commands/GenericCommand.cs           |   0
 .../Data/Commands/GiraffeCommand.cs           |   0
 .../Data/Commands/GreeterCommand.cs           |   0
 .../Data/Commands/HiddenOptionsCommand.cs     |   0
 .../Data/Commands/HorseCommand.cs             |   0
 .../Data/Commands/InvalidCommand.cs           |   0
 .../Data/Commands/LionCommand.cs              |   0
 .../Data/Commands/NoDescriptionCommand.cs     |   0
 .../Data/Commands/OptionVectorCommand.cs      |   0
 .../Data/Commands/ThrowingCommand.cs          |   0
 .../Data/Commands/TurtleCommand.cs            |   0
 .../Data/Commands/VersionCommand.cs           |   0
 .../Data/Converters/CatAgilityConverter.cs    |   0
 .../Converters/StringToIntegerConverter.cs    |   0
 .../Data/Help/CustomHelpProvider.cs           |   0
 .../Data/Help/RedirectHelpProvider.cs         |   0
 .../Data/Help/RenderMarkupHelpProvider.cs     |   0
 .../Data/Settings/AnimalSettings.cs           |   0
 .../Data/Settings/ArgumentOrderSettings.cs    |   0
 .../Data/Settings/ArgumentVectorSettings.cs   |   0
 .../Settings/AsynchronousCommandSettings.cs   |   0
 .../Data/Settings/BarCommandSettings.cs       |   0
 .../Data/Settings/CatSettings.cs              |   0
 .../Data/Settings/DogSettings.cs              |   0
 .../Data/Settings/FooSettings.cs              |   0
 .../Data/Settings/GiraffeSettings.cs          |   0
 .../Data/Settings/HiddenOptionSettings.cs     |   0
 .../Data/Settings/HorseSettings.cs            |   0
 .../Data/Settings/InvalidSettings.cs          |   0
 .../Data/Settings/LionSettings.cs             |   0
 .../Data/Settings/MammalSettings.cs           |   0
 .../MultipleArgumentVectorSettings.cs         |   0
 .../Data/Settings/OptionVectorSettings.cs     |   0
 ...ptionalArgumentWithDefaultValueSettings.cs |   0
 .../Data/Settings/ReptileSettings.cs          |   0
 .../Data/Settings/StringOptionSettings.cs     |   0
 .../Data/Settings/ThrowingCommandSettings.cs  |   0
 .../Data/Settings/TurtleSettings.cs           |   0
 .../Data/Settings/VersionSettings.cs          |   0
 .../EvenNumberValidatorAttribute.cs           |   0
 .../PositiveNumberValidatorAttribute.cs       |   0
 ...ntCannotContainOptions.Output.verified.txt |   0
 ...dCharacterInOptionName.Output.verified.txt |   0
 ...idCharacterInValueName.Output.verified.txt |   0
 ...veMoreThanOneCharacter.Output.verified.txt |   0
 ...issingLongAndShortName.Output.verified.txt |   0
 ...nValuesAreNotSupported.Output.verified.txt |   0
 ...eValuesAreNotSupported.Output.verified.txt |   0
 ...esCannotStartWithDigit.Output.verified.txt |   0
 .../OptionsMustHaveName.Output.verified.txt   |   0
 ...MustOnlyBeOneCharacter.Output.verified.txt |   0
 .../UnexpectedCharacter.Output.verified.txt   |   0
 .../UnterminatedValueName.Output.verified.txt |   0
 .../ValuesMustHaveName.Output.verified.txt    |   0
 .../Help/ArgumentOrder.Output.verified.txt    |   0
 .../Help/Branch.Output.verified.txt           |   0
 ...ch_Called_Without_Help.Output.verified.txt |   0
 ...Branch_Default_Greeter.Output.verified.txt |   0
 .../Help/Branch_Examples.Output.verified.txt  |   0
 .../Command_Hide_Default.Output.verified.txt  |   0
 ...Configured_By_Instance.Output.verified.txt |   0
 ...elp_Configured_By_Type.Output.verified.txt |   0
 ...Registered_By_Instance.Output.verified.txt |   0
 ...elp_Registered_By_Type.Output.verified.txt |   0
 .../Help/Default.Output.verified.txt          |   0
 ...t_Custom_Help_Provider.Output.verified.txt |  28 +-
 .../Help/Default_Examples.Output.verified.txt |   0
 .../Help/Default_Greeter.Output.verified.txt  |   0
 .../Default_Without_Args.Output.verified.txt  |   0
 ...out_Args_Additional.Output_DE.verified.txt |   0
 ...out_Args_Additional.Output_EN.verified.txt |   0
 ...out_Args_Additional.Output_FR.verified.txt |   0
 ...out_Args_Additional.Output_SV.verified.txt |   0
 ...nal_Style_BoldHeadings.Output.verified.txt |   0
 ...ditional_Style_Default.Output.verified.txt |   0
 ..._Additional_Style_None.Output.verified.txt |   0
 ...ion_No_Trailing_Period.Output.verified.txt |   0
 ...Hidden_Command_Options.Output.verified.txt |   0
 .../Help/Hidden_Commands.Output.verified.txt  |   0
 .../Help/Leaf.Output.verified.txt             |   0
 .../Help/NoDescription.Output.verified.txt    |   0
 .../Help/NoVersion.Output.verified.txt        |   0
 .../Help/Root.Output.verified.txt             |   0
 .../Help/Root.QuestionMark.verified.txt       |   0
 .../Help/Root_Command.Output.verified.txt     |   0
 .../Root_Command.QuestionMark.verified.txt    |   0
 .../Help/Root_Examples.Output.verified.txt    |   0
 ...Root_Examples_Children.Output.verified.txt |   0
 ...xamples_Children_Eight.Output.verified.txt |   0
 ...Examples_Children_None.Output.verified.txt |   0
 ...amples_Children_Twelve.Output.verified.txt |   0
 .../Root_Examples_Leafs.Output.verified.txt   |   0
 ...t_Examples_Leafs_Eight.Output.verified.txt |   0
 ...ot_Examples_Leafs_None.Output.verified.txt |   0
 ..._Examples_Leafs_Twelve.Output.verified.txt |   0
 .../Help/Version.Output.verified.txt          |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_3.Output.verified.txt                |   0
 .../Test_4.Output.verified.txt                |   0
 .../Test_5.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../UnknownCommand/Test_1.Output.verified.txt |   0
 .../UnknownCommand/Test_2.Output.verified.txt |   0
 .../UnknownCommand/Test_3.Output.verified.txt |   0
 .../UnknownCommand/Test_4.Output.verified.txt |   0
 .../UnknownCommand/Test_5.Output.verified.txt |   0
 .../UnknownCommand/Test_6.Output.verified.txt |   0
 .../UnknownCommand/Test_7.Output.verified.txt |   0
 .../UnknownCommand/Test_8.Output.verified.txt |   0
 .../UnknownOption/Test_1.Output.verified.txt  |   0
 .../UnknownOption/Test_2.Output.verified.txt  |   0
 ...Hidden_Command_Options.Output.verified.txt |   0
 .../Xml/Test_1.Output.verified.txt            |   0
 .../Xml/Test_10.Output.verified.txt           |   0
 .../Xml/Test_2.Output.verified.txt            |   0
 .../Xml/Test_3.Output.verified.txt            |   0
 .../Xml/Test_4.Output.verified.txt            |   0
 .../Xml/Test_5.Output.verified.txt            |   0
 .../Xml/Test_6.Output.verified.txt            |   0
 .../Xml/Test_7.Output.verified.txt            |   0
 .../Xml/Test_8.Output.verified.txt            |   0
 .../Xml/Test_9.Output.verified.txt            |   0
 .../Properties/Usings.cs                      |   0
 .../Spectre.Console.Cli.Tests.csproj          |  27 +
 ...CommandArgumentAttributeTests.Rendering.cs |   0
 .../CommandArgumentAttributeTests.cs          |   0
 .../CommandOptionAttributeTests.Rendering.cs  |   0
 .../CommandOptionAttributeTests.cs            |   0
 .../Unit/CommandAppTests.Async.cs             |   6 +-
 .../Unit/CommandAppTests.Branches.cs          |   0
 .../Unit/CommandAppTests.Constructor.cs       |   0
 .../Unit/CommandAppTests.Context.cs           |   0
 .../Unit/CommandAppTests.Exceptions.cs        |   0
 .../Unit/CommandAppTests.FlagValues.cs        |   0
 .../Unit/CommandAppTests.Help.cs              |   0
 .../CommandAppTests.Injection.Settings.cs     |   0
 .../Unit/CommandAppTests.Injection.cs         |   0
 .../Unit/CommandAppTests.Interceptor.cs       |   0
 .../Unit/CommandAppTests.Pairs.cs             |   0
 .../Unit/CommandAppTests.Parsing.cs           |   0
 .../Unit/CommandAppTests.Remaining.cs         |   0
 .../Unit/CommandAppTests.Sensitivity.cs       |   0
 .../Unit/CommandAppTests.Settings.cs          |   0
 .../Unit/CommandAppTests.TypeConverters.cs    |   0
 .../Unit/CommandAppTests.Unsafe.cs            |   0
 .../Unit/CommandAppTests.Validation.cs        |   0
 .../Unit/CommandAppTests.ValueProviders.cs    |   0
 .../Unit/CommandAppTests.Vectors.cs           |   0
 .../Unit/CommandAppTests.Version.cs           |   0
 .../Unit/CommandAppTests.Xml.cs               |   0
 .../Unit/CommandAppTests.cs                   |  16 +-
 .../Unit/DefaultTypeRegistrarTests.cs         |   0
 .../Unit/Parsing/CommandTreeTokenizerTests.cs |   0
 .../Unit/Testing/FakeTypeRegistrarTests.cs    |   0
 .../Utilities/CommandContextExtensions.cs     |   0
 .../Utilities/ModuleInitializerAttribute.cs   |   0
 .../VerifyConfiguration.cs                    |   0
 .../Spectre.Console.Tests/Data/Exceptions.cs  |   0
 .../Spectre.Console.Tests/Data/example.json   |   0
 .../Spectre.Console.Tests/Data/poison.flf     |   0
 .../Spectre.Console.Tests/Data/starwars.flf   |   0
 .../AlternateScreen/Show.Output.verified.txt  |   0
 ...ntCannotContainOptions.Output.verified.txt |   0
 ...dCharacterInOptionName.Output.verified.txt |   0
 ...idCharacterInValueName.Output.verified.txt |   0
 ...veMoreThanOneCharacter.Output.verified.txt |   0
 ...issingLongAndShortName.Output.verified.txt |   0
 ...nValuesAreNotSupported.Output.verified.txt |   0
 ...eValuesAreNotSupported.Output.verified.txt |   0
 ...esCannotStartWithDigit.Output.verified.txt |   0
 .../OptionsMustHaveName.Output.verified.txt   |   0
 ...MustOnlyBeOneCharacter.Output.verified.txt |   0
 .../UnexpectedCharacter.Output.verified.txt   |   0
 .../UnterminatedValueName.Output.verified.txt |   0
 .../ValuesMustHaveName.Output.verified.txt    |   0
 .../Help/ArgumentOrder.Output.verified.txt    |   0
 .../Cli/Help/Command.Output.verified.txt      |   0
 .../Help/CommandExamples.Output.verified.txt  |   0
 .../Cli/Help/Default.Output.verified.txt      |   0
 .../Help/DefaultExamples.Output.verified.txt  |   0
 ...Hidden_Command_Options.Output.verified.txt |   0
 .../Help/Hidden_Commands.Output.verified.txt  |   0
 .../Cli/Help/Leaf.Output.verified.txt         |   0
 .../Help/NoDescription.Output.verified.txt    |   0
 .../Cli/Help/Root.Output.verified.txt         |   0
 .../Cli/Help/RootExamples.Output.verified.txt |   0
 .../RootExamples_Children.Output.verified.txt |   0
 .../RootExamples_Leafs.Output.verified.txt    |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../Test_3.Output.verified.txt                |   0
 .../Test_4.Output.verified.txt                |   0
 .../Test_5.Output.verified.txt                |   0
 .../Test_1.Output.verified.txt                |   0
 .../Test_2.Output.verified.txt                |   0
 .../UnknownCommand/Test_1.Output.verified.txt |   0
 .../UnknownCommand/Test_2.Output.verified.txt |   0
 .../UnknownCommand/Test_3.Output.verified.txt |   0
 .../UnknownCommand/Test_4.Output.verified.txt |   0
 .../UnknownCommand/Test_5.Output.verified.txt |   0
 .../UnknownCommand/Test_6.Output.verified.txt |   0
 .../UnknownCommand/Test_7.Output.verified.txt |   0
 .../UnknownCommand/Test_8.Output.verified.txt |   0
 .../UnknownOption/Test_1.Output.verified.txt  |   0
 .../UnknownOption/Test_2.Output.verified.txt  |   0
 ...Hidden_Command_Options.Output.verified.txt |   0
 .../Cli/Xml/Test_1.Output.verified.txt        |   0
 .../Cli/Xml/Test_2.Output.verified.txt        |   0
 .../Cli/Xml/Test_3.Output.verified.txt        |   0
 .../Cli/Xml/Test_4.Output.verified.txt        |   0
 .../Cli/Xml/Test_5.Output.verified.txt        |   0
 .../Cli/Xml/Test_6.Output.verified.txt        |   0
 .../Exception/CallSite.Output.verified.txt    |   0
 .../Exception/Default.Output.verified.txt     |   0
 .../InnerException.Output.verified.txt        |   0
 .../NoStackTrace.Output.verified.txt          |   0
 .../Exception/OutParam.Output.verified.txt    |   0
 .../ShortenedMethods.Output.verified.txt      |   0
 .../ShortenedTypes.Output.verified.txt        |   0
 .../Exception/Tuple.Output.verified.txt       |   0
 .../Render_ReduceWidth.Output.verified.txt    |   0
 .../Live/Status/Render.Output.verified.txt    |   0
 .../Text/AcceptChoice.Output.verified.txt     |   0
 ...AutoComplete_BestMatch.Output.verified.txt |   0
 .../AutoComplete_Empty.Output.verified.txt    |   0
 ...utoComplete_NextChoice.Output.verified.txt |   0
 ...omplete_PreviousChoice.Output.verified.txt |   0
 .../ChoicesStyleNotSet.Output.verified.txt    |   0
 .../Text/ChoicesStyleSet.Output.verified.txt  |   0
 .../Text/ConversionError.Output.verified.txt  |   0
 .../Text/CustomConverter.Output.verified.txt  |   0
 .../Text/CustomValidation.Output.verified.txt |   0
 .../Text/DefaultValue.Output.verified.txt     |   0
 ...efaultValueStyleNotSet.Output.verified.txt |   0
 .../DefaultValueStyleSet.Output.verified.txt  |   0
 .../Text/InvalidChoice.Output.verified.txt    |   0
 .../Prompts/Text/NoSuffix.Output.verified.txt |   0
 .../SecretDefaultValue.Output.verified.txt    |   0
 ...DefaultValueCustomMask.Output.verified.txt |   0
 ...etDefaultValueNullMask.Output.verified.txt |   0
 ...ValueBackspaceNullMask.Output.verified.txt |   0
 .../Box/AsciiBorder.Output.verified.txt       |   0
 .../Box/DoubleBorder.Output.verified.txt      |   0
 .../Box/HeavyBorder.Output.verified.txt       |   0
 .../Borders/Box/NoBorder.Output.verified.txt  |   0
 .../NoBorder_With_Header.Output.verified.txt  |   0
 .../Box/RoundedBorder.Output.verified.txt     |   0
 .../Box/SquareBorder.Output.verified.txt      |   0
 .../Table/Ascii2Border.Output.verified.txt    |   0
 .../Table/AsciiBorder.Output.verified.txt     |   0
 .../AsciiDoubleHeadBorder.Output.verified.txt |   0
 .../Table/DoubleBorder.Output.verified.txt    |   0
 .../DoubleEdgeBorder.Output.verified.txt      |   0
 .../Table/HeavyBorder.Output.verified.txt     |   0
 .../Table/HeavyEdgeBorder.Output.verified.txt |   0
 .../Table/HeavyHeadBorder.Output.verified.txt |   0
 .../HorizontalBorder.Output.verified.txt      |   0
 .../Table/MarkdownBorder.Output.verified.txt  |   0
 ...arkdownBorder_Centered.Output.verified.txt |   0
 ...downBorder_LeftAligned.Output.verified.txt |   0
 ...ownBorder_RightAligned.Output.verified.txt |   0
 .../Table/MinimalBorder.Output.verified.txt   |   0
 ...inimalDoubleHeadBorder.Output.verified.txt |   0
 ...MinimalHeavyHeadBorder.Output.verified.txt |   0
 .../Table/NoBorder.Output.verified.txt        |   0
 .../Table/RoundedBorder.Output.verified.txt   |   0
 .../Table/SimpleBorder.Output.verified.txt    |   0
 .../SimpleHeavyBorder.Output.verified.txt     |   0
 .../Table/SquareBorder.Output.verified.txt    |   0
 ...pdateMethod.Should_Update_Row.verified.txt |   0
 ...ld_Update_Row_With_Renderable.verified.txt |   0
 ...Should_Update_Row_With_String.verified.txt |   0
 .../Align/Center_Bottom.Output.verified.txt   |   0
 .../Align/Center_Middle.Output.verified.txt   |   0
 .../Align/Center_Top.Output.verified.txt      |   0
 .../Align/Left_Bottom.Output.verified.txt     |   0
 .../Align/Left_Middle.Output.verified.txt     |   0
 .../Align/Left_Top.Output.verified.txt        |   0
 .../Align/Right_Bottom.Output.verified.txt    |   0
 .../Align/Right_Middle.Output.verified.txt    |   0
 .../Align/Right_Top.Output.verified.txt       |   0
 .../Fixed_Max_Value.Output.verified.txt       |   0
 .../BarChart/Render.Output.verified.txt       |   0
 .../BarChart/Zero_Value.Output.verified.txt   |   0
 .../BreakdownChart/Ansi.Output.verified.txt   |   0
 .../Culture.Output.verified.txt               |   0
 .../Default.Output.verified.txt               |   0
 .../FullSize.Output.verified.txt              |   0
 .../HideTagValues.Output.verified.txt         |   0
 .../HideTags.Output.verified.txt              |   0
 .../TagFormat.Output.verified.txt             |   0
 .../ValueColor.Output.verified.txt            |   0
 .../BreakdownChart/Width.Output.verified.txt  |   0
 .../Calendar/Centered.Output.verified.txt     |   0
 .../Calendar/Culture.Output.verified.txt      |   0
 .../Calendar/LeftAligned.Output.verified.txt  |   0
 .../Calendar/Render.Output.verified.txt       |   0
 .../Calendar/RightAligned.Output.verified.txt |   0
 .../Widgets/Canvas/Render.Output.verified.txt |   0
 .../Render_MaxWidth.Output.verified.txt       |   0
 .../Render_NarrowTerminal.Output.verified.txt |   0
 .../Canvas/Render_Nested.Output.verified.txt  |   0
 .../Columns/Render.Output.verified.txt        |   0
 ...am.Output_fontfile=poison.flf.verified.txt |   0
 ....Output_fontfile=starwars.flf.verified.txt |   0
 .../Widgets/Figlet/Render.Output.verified.txt |   0
 .../Render_Centered.Output.verified.txt       |   0
 .../Render_LeftAligned.Output.verified.txt    |   0
 .../Render_RightAligned.Output.verified.txt   |   0
 .../Figlet/Render_Wrapped.Output.verified.txt |   0
 .../AddEmptyRow/Render.Output.verified.txt    |   0
 .../Widgets/Grid/Render.Output.verified.txt   |   0
 .../Widgets/Grid/Render_2.Output.verified.txt |   0
 .../Grid/Render_Alignment.Output.verified.txt |   0
 ...Render_ExplicitPadding.Output.verified.txt |   0
 .../Grid/Render_Padding.Output.verified.txt   |   0
 .../Json/Render_Json.Output.verified.txt      |   0
 .../Render_Empty_Layout.Output.verified.txt   |   0
 ...Render_Fallback_Layout.Output.verified.txt |   0
 .../Layout/Render_Layout.Output.verified.txt  |   0
 ...er_Layout_With_Columns.Output.verified.txt |   0
 ...ut_With_Nested_Columns.Output.verified.txt |   0
 ...ayout_With_Nested_Rows.Output.verified.txt |   0
 ...ested_Rows_And_Columns.Output.verified.txt |   0
 ...espect_To_Minimum_Size.Output.verified.txt |   0
 ..._With_Respect_To_Ratio.Output.verified.txt |   0
 ...t_With_Respect_To_Size.Output.verified.txt |   0
 ...ender_Layout_With_Rows.Output.verified.txt |   0
 ...out_Invisible_Children.Output.verified.txt |   0
 .../Widgets/Padder/Render.Output.verified.txt |   0
 .../Render_Expanded.Output.verified.txt       |   0
 .../Padder/Render_Nested.Output.verified.txt  |   0
 .../Widgets/Panel/Render.Output.verified.txt  |   0
 .../Panel/Render_CJK.Output.verified.txt      |   0
 .../Render_Child_Centered.Output.verified.txt |   0
 .../Render_Child_Panel.Output.verified.txt    |   0
 ...der_Child_RightAligned.Output.verified.txt |   0
 .../Panel/Render_Expand.Output.verified.txt   |   0
 .../Panel/Render_Header.Output.verified.txt   |   0
 ...Render_Header_Centered.Output.verified.txt |   0
 ...Render_Header_Collapse.Output.verified.txt |   0
 ...der_Header_LeftAligned.Output.verified.txt |   0
 ...er_Header_RightAligned.Output.verified.txt |   0
 .../Panel/Render_Height.Output.verified.txt   |   0
 .../Render_LineEndings.Output.verified.txt    |   0
 .../Render_Multiline.Output.verified.txt      |   0
 .../Panel/Render_Padding.Output.verified.txt  |   0
 .../Panel/Render_Unicode.Output.verified.txt  |   0
 .../Panel/Render_Width.Output.verified.txt    |   0
 .../Render_Width_Height.Output.verified.txt   |   0
 .../Render_Width_MaxWidth.Output.verified.txt |   0
 .../Panel/Render_Wrap.Output.verified.txt     |   0
 .../Render_ZeroPadding.Output.verified.txt    |   0
 .../ProgressBar/Formatted.Output.verified.txt |   0
 .../ProgressBar/Render.Output.verified.txt    |   0
 .../Widgets/Recorder/Html.Output.verified.txt |   0
 .../Widgets/Recorder/Text.Output.verified.txt |   0
 .../Rows/GH-1188-Rows.Output.verified.txt     |   0
 .../Widgets/Rows/Render.Output.verified.txt   |   0
 .../Rows/Render_Empty.Output.verified.txt     |   0
 ...er_Expanded_And_Nested.Output.verified.txt |   0
 .../Rows/Render_Nested.Output.verified.txt    |   0
 .../Widgets/Rule/Render.Output.verified.txt   |   0
 .../Render_Border_Header.Output.verified.txt  |   0
 ...Render_Border_NoHeader.Output.verified.txt |   0
 ...eader_DefaultAlignment.Output.verified.txt |   0
 ...der_Header_LeftAligned.Output.verified.txt |   0
 ...er_Header_RightAligned.Output.verified.txt |   0
 .../Render_Linebreaks.Output.verified.txt     |   0
 .../Rule/Render_Truncate.Output.verified.txt  |   0
 .../Table/AddEmptyRow.Output.verified.txt     |   0
 .../Widgets/Table/Render.Output.verified.txt  |   0
 .../Render_CellPadding.Output.verified.txt    |   0
 .../Render_Centered.Align_Widget.verified.txt |   0
 .../Table/Render_Centered.Output.verified.txt |   0
 ...er_ColumnJustification.Output.verified.txt |   0
 .../Render_EA_Character.Output.verified.txt   |   0
 .../Render_Empty_Column.Output.verified.txt   |   0
 .../Table/Render_Expand.Output.verified.txt   |   0
 .../Table/Render_Fold.Output.verified.txt     |   0
 .../Table/Render_Footers.Output.verified.txt  |   0
 .../Render_Impossible.Output.verified.txt     |   0
 ...nder_LeftAligned.Align_Widget.verified.txt |   0
 .../Render_LeftAligned.Output.verified.txt    |   0
 .../Render_Multiline.Output.verified.txt      |   0
 .../Table/Render_Nested.Output.verified.txt   |   0
 .../Table/Render_NoRows.Output.verified.txt   |   0
 ...der_RightAligned.Align_Widget.verified.txt |   0
 .../Render_RightAligned.Output.verified.txt   |   0
 .../Render_Row_Separators.Output.verified.txt |   0
 ...w_Separators_No_Header.Output.verified.txt |   0
 .../Render_Title_Caption.Output.verified.txt  |   0
 ...Title_Caption_Centered.Output.verified.txt |   0
 ...le_Caption_LeftAligned.Output.verified.txt |   0
 ...itle_Caption_LowerCase.Output.verified.txt |   0
 ...e_Caption_RightAligned.Output.verified.txt |   0
 .../Table/Rows/Add.Output.verified.txt        |   0
 .../Extensions/Add.Renderables.verified.txt   |   0
 .../Rows/Extensions/Add.Strings.verified.txt  |   0
 .../Insert.Renderables.verified.txt           |   0
 .../Extensions/Insert.Strings.verified.txt    |   0
 .../Extensions/Remove.Output.verified.txt     |   0
 .../Table/Rows/Insert.Output.verified.txt     |   0
 .../Table/Rows/Remove.Output.verified.txt     |   0
 .../TextPath/GH-1307.Output.verified.txt      |   0
 .../Widgets/Tree/Render.Output.verified.txt   |   0
 .../Render_NoChildren.Output.verified.txt     |   0
 .../Extensions/ConsoleKeyExtensions.cs        |   0
 .../Extensions/StreamExtensions.cs            |   0
 .../Properties/Usings.cs                      |   0
 .../Spectre.Console.Tests.csproj              |  35 +
 .../Unit/AlternateScreenTests.cs              |   0
 .../Unit/AnsiConsoleTests.Advanced.cs         |   0
 .../Unit/AnsiConsoleTests.Colors.cs           |   0
 .../Unit/AnsiConsoleTests.Cursor.cs           |   0
 .../Unit/AnsiConsoleTests.Markup.cs           |   0
 .../AnsiConsoleTests.MarkupInterpolated.cs    |   0
 .../Unit/AnsiConsoleTests.Prompt.cs           |   0
 .../Unit/AnsiConsoleTests.Style.cs            |   0
 .../Unit/AnsiConsoleTests.cs                  |   0
 .../Unit/ColorSystemTests.cs                  |   0
 .../Spectre.Console.Tests/Unit/ColorTests.cs  |   0
 .../Spectre.Console.Tests/Unit/EmojiTests.cs  |   0
 .../Unit/ExceptionTests.cs                    |   0
 .../Unit/HighlightTests.cs                    |   0
 .../Live/Progress/DownloadedColumnTests.cs    |   0
 .../Live/Progress/ProgressColumnFixture.cs    |   0
 .../Unit/Live/Progress/ProgressTests.cs       |   0
 .../Unit/Live/StatusTests.cs                  |   0
 .../Unit/Prompts/ListPromptStateTests.cs      |   0
 .../Unit/Prompts/MultiSelectionPromptTests.cs |   0
 .../Unit/Prompts/SelectionPromptTests.cs      |   0
 .../Unit/Prompts/TextPromptTests.cs           |   0
 .../Unit/RecorderTests.cs                     |   0
 .../Unit/Rendering/Borders/BoxBorderTests.cs  |   0
 .../Rendering/Borders/TableBorderTests.cs     |   0
 .../Unit/Rendering/RenderHookTests.cs         |   0
 .../Unit/Rendering/SegmentTests.cs            |   0
 .../Spectre.Console.Tests/Unit/StyleTests.cs  |   0
 .../Unit/Widgets/AlignTests.cs                |   0
 .../Unit/Widgets/BarChartTests.cs             |   0
 .../Unit/Widgets/BreakdownChartTests.cs       |   0
 .../Unit/Widgets/CalendarTests.cs             |   0
 .../Unit/Widgets/CanvasTests.cs               |   0
 .../Unit/Widgets/ColumnsTests.cs              |   0
 .../Unit/Widgets/FigletTests.cs               |   0
 .../Unit/Widgets/GridTests.cs                 |   0
 .../Unit/Widgets/JsonTextTests.cs             |   0
 .../Unit/Widgets/LayoutTests.cs               |   0
 .../Unit/Widgets/MarkupTests.cs               |   0
 .../Unit/Widgets/PadderTests.cs               |   0
 .../Unit/Widgets/PanelTests.cs                |   0
 .../Unit/Widgets/ProgressBarTests.cs          |   0
 .../Unit/Widgets/RowsTests.cs                 |   0
 .../Unit/Widgets/RuleTests.cs                 |   0
 .../TableRowCollectionExtensionsTests.cs      |   0
 .../Widgets/Table/TableRowCollectionTests.cs  |   0
 .../Unit/Widgets/Table/TableTests.cs          |   0
 .../Unit/Widgets/TextPathTests.cs             |   0
 .../Unit/Widgets/TextTests.cs                 |   0
 .../Unit/Widgets/TreeTests.cs                 |   0
 .../Utilities/EmbeddedResourceReader.cs       |   0
 .../Utilities/GitHubIssueAttribute.cs         |   0
 .../Utilities/ModuleInitializerAttribute.cs   |   0
 .../Utilities/TestConsoleExtensions.cs        |   0
 .../VerifyConfiguration.cs                    |   0
 test/Directory.Build.props                    |  16 -
 .../CodeAnalyzerHelper.cs                     |  12 -
 .../CodeFixProviderDiscovery.cs               |  44 --
 .../Properties/Usings.cs                      |  15 -
 .../Spectre.Console.Analyzer.Tests.csproj     |  29 -
 .../SpectreAnalyzerVerifier.cs                |  62 --
 .../NoConcurrentLiveRenderablesTests.cs       |  72 ---
 .../NoPromptsDuringLiveRenderablesTests.cs    |  94 ---
 .../Analyzers/UseInstanceAnsiConsoleTests.cs  |  88 ---
 ...ctreInsteadOfSystemConsoleAnalyzerTests.cs |  59 --
 .../UseInstanceOfStaticAnsiConsoleTests.cs    | 146 -----
 ...seSpectreInsteadOfSystemConsoleFixTests.cs | 324 ----------
 .../Spectre.Console.Cli.Tests.csproj          |  31 -
 .../Spectre.Console.Tests.csproj              |  39 --
 677 files changed, 272 insertions(+), 6214 deletions(-)
 delete mode 100644 examples/Cli/Delegates/BarSettings.cs
 delete mode 100644 examples/Cli/Delegates/Delegates.csproj
 delete mode 100644 examples/Cli/Delegates/Program.cs
 delete mode 100644 examples/Cli/Demo/Commands/Add/AddPackageCommand.cs
 delete mode 100644 examples/Cli/Demo/Commands/Add/AddReferenceCommand.cs
 delete mode 100644 examples/Cli/Demo/Commands/Add/AddSettings.cs
 delete mode 100644 examples/Cli/Demo/Commands/Run/RunCommand.cs
 delete mode 100644 examples/Cli/Demo/Commands/Serve/ServeCommand.cs
 delete mode 100644 examples/Cli/Demo/Demo.csproj
 delete mode 100644 examples/Cli/Demo/Program.cs
 delete mode 100644 examples/Cli/Demo/Utilities/SettingsDumper.cs
 delete mode 100644 examples/Cli/Demo/Verbosity.cs
 delete mode 100644 examples/Cli/Dynamic/Dynamic.csproj
 delete mode 100644 examples/Cli/Dynamic/MyCommand.cs
 delete mode 100644 examples/Cli/Dynamic/Program.cs
 delete mode 100644 examples/Cli/Help/CustomHelpProvider.cs
 delete mode 100644 examples/Cli/Help/DefaultCommand.cs
 delete mode 100644 examples/Cli/Help/Help.csproj
 delete mode 100644 examples/Cli/Help/Program.cs
 delete mode 100644 examples/Cli/Injection/Commands/DefaultCommand.cs
 delete mode 100644 examples/Cli/Injection/IGreeter.cs
 delete mode 100644 examples/Cli/Injection/Infrastructure/TypeRegistrar.cs
 delete mode 100644 examples/Cli/Injection/Infrastructure/TypeResolver.cs
 delete mode 100644 examples/Cli/Injection/Injection.csproj
 delete mode 100644 examples/Cli/Injection/Program.cs
 delete mode 100644 examples/Cli/Logging/Commands/HelloCommand.cs
 delete mode 100644 examples/Cli/Logging/Commands/LogCommandSettings.cs
 delete mode 100644 examples/Cli/Logging/Infrastructure/LogInterceptor.cs
 delete mode 100644 examples/Cli/Logging/Infrastructure/LoggingEnricher.cs
 delete mode 100644 examples/Cli/Logging/Infrastructure/TypeRegistrar.cs
 delete mode 100644 examples/Cli/Logging/Infrastructure/TypeResolver.cs
 delete mode 100644 examples/Cli/Logging/Logging.csproj
 delete mode 100644 examples/Cli/Logging/Program.cs
 delete mode 100644 examples/Console/AlternateScreen/AlternateScreen.csproj
 delete mode 100644 examples/Console/AlternateScreen/Program.cs
 delete mode 100644 examples/Console/Borders/Borders.csproj
 delete mode 100644 examples/Console/Borders/Program.cs
 delete mode 100644 examples/Console/Calendars/Calendars.csproj
 delete mode 100644 examples/Console/Calendars/Program.cs
 delete mode 100644 examples/Console/Canvas/Canvas.csproj
 delete mode 100644 examples/Console/Canvas/Program.cs
 delete mode 100644 examples/Console/Canvas/cake.png
 delete mode 100644 examples/Console/Charts/Charts.csproj
 delete mode 100644 examples/Console/Charts/Program.cs
 delete mode 100644 examples/Console/Colors/Colors.csproj
 delete mode 100644 examples/Console/Colors/Program.cs
 delete mode 100644 examples/Console/Columns/Columns.csproj
 delete mode 100644 examples/Console/Columns/Program.cs
 delete mode 100644 examples/Console/Columns/User.cs
 delete mode 100644 examples/Console/Cursor/Cursor.csproj
 delete mode 100644 examples/Console/Cursor/Program.cs
 delete mode 100644 examples/Console/Decorations/Decorations.csproj
 delete mode 100644 examples/Console/Decorations/Program.cs
 delete mode 100644 examples/Console/Emojis/Emojis.csproj
 delete mode 100644 examples/Console/Emojis/Program.cs
 delete mode 100644 examples/Console/Exceptions/Exceptions.csproj
 delete mode 100644 examples/Console/Exceptions/Program.cs
 delete mode 100644 examples/Console/Figlet/Figlet.csproj
 delete mode 100644 examples/Console/Figlet/Program.cs
 delete mode 100644 examples/Console/Grids/Grids.csproj
 delete mode 100644 examples/Console/Grids/Program.cs
 delete mode 100644 examples/Console/Info/Info.csproj
 delete mode 100644 examples/Console/Info/Program.cs
 delete mode 100644 examples/Console/Json/Json.csproj
 delete mode 100644 examples/Console/Json/Program.cs
 delete mode 100644 examples/Console/Layout/Layout.csproj
 delete mode 100644 examples/Console/Layout/Program.cs
 delete mode 100644 examples/Console/Links/Links.csproj
 delete mode 100644 examples/Console/Links/Program.cs
 delete mode 100644 examples/Console/Live/Live.csproj
 delete mode 100644 examples/Console/Live/Program.cs
 delete mode 100644 examples/Console/LiveTable/LiveTable.csproj
 delete mode 100644 examples/Console/LiveTable/Program.cs
 delete mode 100644 examples/Console/Minimal/GlobalUsings.cs
 delete mode 100644 examples/Console/Minimal/Minimal.csproj
 delete mode 100644 examples/Console/Minimal/Program.cs
 delete mode 100644 examples/Console/Panels/Panels.csproj
 delete mode 100644 examples/Console/Panels/Program.cs
 delete mode 100644 examples/Console/Paths/Paths.csproj
 delete mode 100644 examples/Console/Paths/Program.cs
 delete mode 100644 examples/Console/Progress/DescriptionGenerator.cs
 delete mode 100644 examples/Console/Progress/Program.cs
 delete mode 100644 examples/Console/Progress/Progress.csproj
 delete mode 100644 examples/Console/Prompt/Program.cs
 delete mode 100644 examples/Console/Prompt/Prompt.csproj
 delete mode 100644 examples/Console/Rules/Program.cs
 delete mode 100644 examples/Console/Rules/Rules.csproj
 delete mode 100644 examples/Console/Showcase/ExceptionGenerator.cs
 delete mode 100644 examples/Console/Showcase/Program.cs
 delete mode 100644 examples/Console/Showcase/Showcase.csproj
 delete mode 100644 examples/Console/Status/Program.cs
 delete mode 100644 examples/Console/Status/Status.csproj
 delete mode 100644 examples/Console/Tables/Program.cs
 delete mode 100644 examples/Console/Tables/Tables.csproj
 delete mode 100644 examples/Console/Trees/Program.cs
 delete mode 100644 examples/Console/Trees/Trees.csproj
 delete mode 100644 examples/Directory.Build.props
 delete mode 100644 examples/Examples.sln
 delete mode 100644 examples/Shared/ColorBox.cs
 delete mode 100644 examples/Shared/Extensions/ColorExtensions.cs
 delete mode 100644 examples/Shared/Shared.csproj
 create mode 100644 resources/nuget/Spectre.Console.Cli.md
 create mode 100644 resources/nuget/Spectre.Console.ImageSharp.md
 create mode 100644 resources/nuget/Spectre.Console.Json.md
 create mode 100644 resources/nuget/Spectre.Console.Testing.md
 create mode 100644 resources/nuget/Spectre.Console.md
 create mode 100644 resources/nuget/logo.png
 create mode 100644 src/Directory.Packages.props
 rename src/{ => Extensions}/Spectre.Console.ImageSharp/CanvasImage.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.ImageSharp/CanvasImageExtensions.cs (100%)
 create mode 100644 src/Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj
 rename src/{ => Extensions}/Spectre.Console.Json/IJsonParser.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonBuilder.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonParser.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonText.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonTextExtensions.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonTextStyles.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonToken.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonTokenReader.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonTokenType.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/JsonTokenizer.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Properties/Usings.cs (100%)
 create mode 100644 src/Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonArray.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonBoolean.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonMember.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonNull.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonNumber.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonObject.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonString.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonSyntax.cs (100%)
 rename src/{ => Extensions}/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs (100%)
 delete mode 100644 src/Spectre.Console.Analyzer.Sandbox/Program.cs
 delete mode 100644 src/Spectre.Console.Analyzer.Sandbox/Spectre.Console.Analyzer.Sandbox.csproj
 delete mode 100644 src/Spectre.Console.Analyzer.sln
 delete mode 100644 src/Spectre.Console.Analyzer.v3.ncrunchsolution
 delete mode 100644 src/Spectre.Console.Analyzer/Analyzers/FavorInstanceAnsiConsoleOverStaticAnalyzer.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Analyzers/NoConcurrentLiveRenderablesAnalyzer.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Analyzers/NoPromptsDuringLiveRenderablesAnalyzer.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Analyzers/SpectreAnalyzer.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzer.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Constants.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Descriptors.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Fixes/CodeActions/SwitchToAnsiConsoleAction.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Fixes/FixProviders/StaticAnsiConsoleToInstanceFix.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Fixes/FixProviders/SystemConsoleToAnsiConsoleFix.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Fixes/Syntax.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Properties/Usings.cs
 delete mode 100644 src/Spectre.Console.Analyzer/Spectre.Console.Analyzer.csproj
 delete mode 100644 src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj
 delete mode 100644 src/Spectre.Console.Json/Spectre.Console.Json.csproj
 delete mode 100644 src/Spectre.Console.sln.DotSettings
 delete mode 100644 src/Spectre.Console.v3.ncrunchsolution
 rename {test => src/Tests}/.editorconfig (100%)
 create mode 100644 src/Tests/Directory.Build.props
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Constants.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/AnimalCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/AsynchronousCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/CatCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/DogCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/DumpRemainingCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/EmptyCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/GenericCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/GiraffeCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/GreeterCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/HiddenOptionsCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/HorseCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/InvalidCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/LionCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/NoDescriptionCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/OptionVectorCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/ThrowingCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/TurtleCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Converters/CatAgilityConverter.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Converters/StringToIntegerConverter.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Help/CustomHelpProvider.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Help/RedirectHelpProvider.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Help/RenderMarkupHelpProvider.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/AnimalSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/ArgumentOrderSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/ArgumentVectorSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/AsynchronousCommandSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/BarCommandSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/CatSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/DogSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/FooSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/GiraffeSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/HiddenOptionSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/HorseSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/InvalidSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/LionSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/MammalSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/MultipleArgumentVectorSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/OptionVectorSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/ReptileSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/StringOptionSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/ThrowingCommandSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/TurtleSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Validators/EvenNumberValidatorAttribute.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Data/Validators/PositiveNumberValidatorAttribute.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/ArgumentCannotContainOptions.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInOptionName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInValueName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/MissingLongAndShortName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleValuesAreNotSupported.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionsMustHaveName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/UnexpectedCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/UnterminatedValueName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Arguments/ValuesMustHaveName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Branch.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Called_Without_Help.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Default_Greeter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Examples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Command_Hide_Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Type.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Type.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt (95%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Greeter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Leaf.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/NoMatchingArgument/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_6.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_7.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_8.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Hidden_Command_Options.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Properties/Usings.cs (100%)
 create mode 100644 src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.Rendering.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.Rendering.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs (90%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Constructor.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Exceptions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.FlagValues.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.Settings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Interceptor.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Pairs.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Sensitivity.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Settings.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.TypeConverters.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Unsafe.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Validation.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.ValueProviders.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Vectors.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Xml.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs (98%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/DefaultTypeRegistrarTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Parsing/CommandTreeTokenizerTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Unit/Testing/FakeTypeRegistrarTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Utilities/CommandContextExtensions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/Utilities/ModuleInitializerAttribute.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Cli.Tests/VerifyConfiguration.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Data/Exceptions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Data/example.json (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Data/poison.flf (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Data/starwars.flf (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Extensions/StreamExtensions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Properties/Usings.cs (100%)
 create mode 100644 src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AlternateScreenTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Advanced.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/ColorSystemTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/ColorTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/EmojiTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/ExceptionTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/HighlightTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Live/StatusTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/RecorderTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/StyleTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/GridTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/TextTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs (100%)
 rename {test => src/Tests}/Spectre.Console.Tests/VerifyConfiguration.cs (100%)
 delete mode 100644 test/Directory.Build.props
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/CodeAnalyzerHelper.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/CodeFixProviderDiscovery.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Properties/Usings.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/SpectreAnalyzerVerifier.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoConcurrentLiveRenderablesTests.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoPromptsDuringLiveRenderablesTests.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseInstanceAnsiConsoleTests.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzerTests.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseInstanceOfStaticAnsiConsoleTests.cs
 delete mode 100644 test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseSpectreInsteadOfSystemConsoleFixTests.cs
 delete mode 100644 test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj
 delete mode 100644 test/Spectre.Console.Tests/Spectre.Console.Tests.csproj

diff --git a/README.fa.md b/README.fa.md
index 9eec6ed..3ebcd93 100644
--- a/README.fa.md
+++ b/README.fa.md
@@ -44,30 +44,13 @@ https://spectreconsole.net/
 
 

مثال‌ها

-برای بررسی `Spectre.Console` در عمل، ابزار سراسری -[dotnet-example](https://github.com/patriksvensson/dotnet-example) -را نصب کنید. - -
-> dotnet tool restore
-
- -حالا شما می‌توانید مثال‌های موجود در این مخزن را لیست کنید: - -
-> dotnet example
-
- -و برای اجرای مثال: - -
-> dotnet example tables
-
+To see `Spectre.Console` in action, please see the +[examples repository](https://github.com/spectreconsole/examples).

مجوز

-Copyright © Patrik Svensson, Phil Scott +Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray
همانطور که Spectre.Console تحت مجوز MIT ارائه شده است؛ برای کسب اطلاعات بیشتر به مجوز مراجعه کنید. diff --git a/README.md b/README.md index 85a6e1f..9724aaa 100644 --- a/README.md +++ b/README.md @@ -49,25 +49,8 @@ https://spectreconsole.net ## Examples -To see `Spectre.Console` in action, install the -[dotnet-example](https://github.com/patriksvensson/dotnet-example) -global tool. - -``` -> dotnet tool restore -``` - -Now you can list available examples in this repository: - -``` -> dotnet example -``` - -And to run an example: - -``` -> dotnet example tables -``` +To see `Spectre.Console` in action, please see the +[examples repository](https://github.com/spectreconsole/examples). ## Sponsors @@ -100,7 +83,7 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org) ## License -Copyright © Patrik Svensson, Phil Scott, Nils Andresen +Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray `Spectre.Console` is provided as-is under the MIT license. For more information see LICENSE. diff --git a/README.pt-BR.md b/README.pt-BR.md index f88a3e7..267dab1 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -43,24 +43,8 @@ https://spectreconsole.net/ ## Exemplos -Para ver o `Spectre.Console` em ação, instale a ferramenta global -[dotnet-example](https://github.com/patriksvensson/dotnet-example). - -``` -> dotnet tool restore -``` - -Agora você pode listar os exemplos disponíveis neste repositório: - -``` -> dotnet example -``` - -E para executar um exemplo: - -``` -> dotnet example tables -``` +To see `Spectre.Console` in action, please see the +[examples repository](https://github.com/spectreconsole/examples). ## Patrocinadores @@ -83,7 +67,7 @@ Eu estou muito agradecido. ## Licença -Copyright © Patrik Svensson, Phil Scott, Nils Andresen +Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray Spectre.Console é fornecido no estado em que se encontra sob a licença do MIT. Para obter mais informações, consulte o arquivo [LICENSE](LICENSE.md). diff --git a/README.zh.md b/README.zh.md index 981bb5b..f629873 100644 --- a/README.zh.md +++ b/README.zh.md @@ -39,23 +39,8 @@ https://spectreconsole.net/ ## 例子 -如果想直接运行`Spectre.Console`的例子,则需要安装[dotnet-example](https://github.com/patriksvensson/dotnet-example)工具。 - -``` -> dotnet tool restore -``` - -然后你可以列出仓库里的所有例子: - -``` -> dotnet example -``` - -跑一个看看效果: - -``` -> dotnet example tables -``` +To see `Spectre.Console` in action, please see the +[examples repository](https://github.com/spectreconsole/examples). ## Sponsors @@ -77,7 +62,7 @@ https://spectreconsole.net/ ## 开源许可 -版权所有 © Patrik Svensson, Phil Scott, Nils Andresen +版权所有 © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray Spectre.Console 基于 MIT 协议提供。查看 LICENSE 文件了解更多信息。 diff --git a/build.cake b/build.cake index a51f985..a79bcc4 100644 --- a/build.cake +++ b/build.cake @@ -35,41 +35,11 @@ Task("Build") }); }); -Task("Build-Analyzer") - .IsDependentOn("Build") - .Does(context => -{ - DotNetBuild("./src/Spectre.Console.Analyzer.sln", new DotNetBuildSettings { - Configuration = configuration, - Verbosity = DotNetVerbosity.Minimal, - NoLogo = true, - NoIncremental = context.HasArgument("rebuild"), - MSBuildSettings = new DotNetMSBuildSettings() - .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error) - }); -}); - -Task("Build-Examples") - .IsDependentOn("Build") - .Does(context => -{ - DotNetBuild("./examples/Examples.sln", new DotNetBuildSettings { - Configuration = configuration, - Verbosity = DotNetVerbosity.Minimal, - NoLogo = true, - NoIncremental = context.HasArgument("rebuild"), - MSBuildSettings = new DotNetMSBuildSettings() - .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error) - }); -}); - Task("Test") .IsDependentOn("Build") - .IsDependentOn("Build-Analyzer") - .IsDependentOn("Build-Examples") .Does(context => { - DotNetTest("./test/Spectre.Console.Tests/Spectre.Console.Tests.csproj", new DotNetTestSettings { + DotNetTest("./src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj", new DotNetTestSettings { Configuration = configuration, Verbosity = DotNetVerbosity.Minimal, NoLogo = true, @@ -77,15 +47,7 @@ Task("Test") NoBuild = true, }); - DotNetTest("./test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj", new DotNetTestSettings { - Configuration = configuration, - Verbosity = DotNetVerbosity.Minimal, - NoLogo = true, - NoRestore = true, - NoBuild = true, - }); - - DotNetTest("./test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj", new DotNetTestSettings { + DotNetTest("./src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj", new DotNetTestSettings { Configuration = configuration, Verbosity = DotNetVerbosity.Minimal, NoLogo = true, @@ -108,17 +70,6 @@ Task("Package") MSBuildSettings = new DotNetMSBuildSettings() .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error) }); - - context.DotNetPack($"./src/Spectre.Console.Analyzer.sln", new DotNetPackSettings { - Configuration = configuration, - Verbosity = DotNetVerbosity.Minimal, - NoLogo = true, - NoRestore = true, - NoBuild = true, - OutputDirectory = "./.artifacts", - MSBuildSettings = new DotNetMSBuildSettings() - .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error) - }); }); Task("Publish-NuGet") diff --git a/examples/Cli/Delegates/BarSettings.cs b/examples/Cli/Delegates/BarSettings.cs deleted file mode 100644 index 3c89484..0000000 --- a/examples/Cli/Delegates/BarSettings.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel; -using Spectre.Console.Cli; - -namespace Delegates; - -public static partial class Program -{ - public sealed class BarSettings : CommandSettings - { - [CommandOption("--count")] - [Description("The number of bars to print")] - [DefaultValue(3)] - public int Count { get; set; } - } -} diff --git a/examples/Cli/Delegates/Delegates.csproj b/examples/Cli/Delegates/Delegates.csproj deleted file mode 100644 index 233fbdf..0000000 --- a/examples/Cli/Delegates/Delegates.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - Exe - net8.0 - false - Delegates - Demonstrates how to specify commands as delegates. - Cli - false - - - - - - - diff --git a/examples/Cli/Delegates/Program.cs b/examples/Cli/Delegates/Program.cs deleted file mode 100644 index a91df34..0000000 --- a/examples/Cli/Delegates/Program.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Threading.Tasks; -using Spectre.Console; -using Spectre.Console.Cli; - -namespace Delegates; - -public static partial class Program -{ - public static int Main(string[] args) - { - var app = new CommandApp(); - app.Configure(config => - { - config.AddDelegate("foo", Foo) - .WithDescription("Foos the bars"); - - config.AddDelegate("bar", Bar) - .WithDescription("Bars the foos"); - - config.AddAsyncDelegate("fooAsync", FooAsync) - .WithDescription("Foos the bars asynchronously"); - - config.AddAsyncDelegate("barAsync", BarAsync) - .WithDescription("Bars the foos asynchronously"); - }); - - return app.Run(args); - } - - private static int Foo(CommandContext context) - { - AnsiConsole.WriteLine("Foo"); - return 0; - } - - private static int Bar(CommandContext context, BarSettings settings) - { - for (var index = 0; index < settings.Count; index++) - { - AnsiConsole.WriteLine("Bar"); - } - - return 0; - } - - private static Task FooAsync(CommandContext context) - { - AnsiConsole.WriteLine("Foo"); - return Task.FromResult(0); - } - - private static Task BarAsync(CommandContext context, BarSettings settings) - { - for (var index = 0; index < settings.Count; index++) - { - AnsiConsole.WriteLine("Bar"); - } - - return Task.FromResult(0); - } -} diff --git a/examples/Cli/Demo/Commands/Add/AddPackageCommand.cs b/examples/Cli/Demo/Commands/Add/AddPackageCommand.cs deleted file mode 100644 index 1166d08..0000000 --- a/examples/Cli/Demo/Commands/Add/AddPackageCommand.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.ComponentModel; -using Demo.Utilities; -using Spectre.Console.Cli; - -namespace Demo.Commands.Add; - -[Description("Add a NuGet package reference to the project.")] -public sealed class AddPackageCommand : Command -{ - public sealed class Settings : AddSettings - { - [CommandArgument(0, "")] - [Description("The package reference to add.")] - public string PackageName { get; set; } - - [CommandOption("-v|--version ")] - [Description("The version of the package to add.")] - public string Version { get; set; } - - [CommandOption("-f|--framework ")] - [Description("Add the reference only when targeting a specific framework.")] - public string Framework { get; set; } - - [CommandOption("--no-restore")] - [Description("Add the reference without performing restore preview and compatibility check.")] - public bool NoRestore { get; set; } - - [CommandOption("--source ")] - [Description("The NuGet package source to use during the restore.")] - public string Source { get; set; } - - [CommandOption("--package-directory ")] - [Description("The directory to restore packages to.")] - public string PackageDirectory { get; set; } - - [CommandOption("--interactive")] - [Description("Allows the command to stop and wait for user input or action (for example to complete authentication).")] - public bool Interactive { get; set; } - } - - public override int Execute(CommandContext context, Settings settings) - { - SettingsDumper.Dump(settings); - return 0; - } -} diff --git a/examples/Cli/Demo/Commands/Add/AddReferenceCommand.cs b/examples/Cli/Demo/Commands/Add/AddReferenceCommand.cs deleted file mode 100644 index 33e2b8a..0000000 --- a/examples/Cli/Demo/Commands/Add/AddReferenceCommand.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.ComponentModel; -using Demo.Utilities; -using Spectre.Console.Cli; - -namespace Demo.Commands.Add; - -public sealed class AddReferenceCommand : Command -{ - public sealed class Settings : AddSettings - { - [CommandArgument(0, "")] - [Description("The package reference to add.")] - public string ProjectPath { get; set; } - - [CommandOption("-f|--framework ")] - [Description("Add the reference only when targeting a specific framework.")] - public string Framework { get; set; } - - [CommandOption("--interactive")] - [Description("Allows the command to stop and wait for user input or action (for example to complete authentication).")] - public bool Interactive { get; set; } - } - - public override int Execute(CommandContext context, Settings settings) - { - SettingsDumper.Dump(settings); - return 0; - } -} diff --git a/examples/Cli/Demo/Commands/Add/AddSettings.cs b/examples/Cli/Demo/Commands/Add/AddSettings.cs deleted file mode 100644 index c8f02ec..0000000 --- a/examples/Cli/Demo/Commands/Add/AddSettings.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel; -using Spectre.Console.Cli; - -namespace Demo.Commands.Add; - -public abstract class AddSettings : CommandSettings -{ - [CommandArgument(0, "")] - [Description("The project file to operate on. If a file is not specified, the command will search the current directory for one.")] - public string Project { get; set; } -} diff --git a/examples/Cli/Demo/Commands/Run/RunCommand.cs b/examples/Cli/Demo/Commands/Run/RunCommand.cs deleted file mode 100644 index a1aa675..0000000 --- a/examples/Cli/Demo/Commands/Run/RunCommand.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.ComponentModel; -using Demo.Utilities; -using Spectre.Console.Cli; - -namespace Demo.Commands.Run; - -[Description("Build and run a .NET project output.")] -public sealed class RunCommand : Command -{ - public sealed class Settings : CommandSettings - { - [CommandOption("-c|--configuration ")] - [Description("The configuration to run for. The default for most projects is '[grey]Debug[/]'.")] - [DefaultValue("Debug")] - public string Configuration { get; set; } - - [CommandOption("-f|--framework ")] - [Description("The target framework to run for. The target framework must also be specified in the project file.")] - public string Framework { get; set; } - - [CommandOption("-r|--runtime ")] - [Description("The target runtime to run for.")] - public string RuntimeIdentifier { get; set; } - - [CommandOption("-p|--project ")] - [Description("The path to the project file to run (defaults to the current directory if there is only one project).")] - public string ProjectPath { get; set; } - - [CommandOption("--launch-profile ")] - [Description("The name of the launch profile (if any) to use when launching the application.")] - public string LaunchProfile { get; set; } - - [CommandOption("--no-launch-profile")] - [Description("Do not attempt to use [grey]launchSettings.json[/] to configure the application.")] - public bool NoLaunchProfile { get; set; } - - [CommandOption("--no-build")] - [Description("Do not build the project before running. Implies [grey]--no-restore[/].")] - public bool NoBuild { get; set; } - - [CommandOption("--interactive")] - [Description("Allows the command to stop and wait for user input or action (for example to complete authentication).")] - public string Interactive { get; set; } - - [CommandOption("--no-restore")] - [Description("Do not restore the project before building.")] - public bool NoRestore { get; set; } - - [CommandOption("--verbosity ")] - [Description("Set the MSBuild verbosity level. Allowed values are q[grey]uiet[/], m[grey]inimal[/], n[grey]ormal[/], d[grey]etailed[/], and diag[grey]nostic[/].")] - [TypeConverter(typeof(VerbosityConverter))] - [DefaultValue(Verbosity.Normal)] - public Verbosity Verbosity { get; set; } - - [CommandOption("--no-dependencies")] - [Description("Do not restore project-to-project references and only restore the specified project.")] - public bool NoDependencies { get; set; } - - [CommandOption("--force")] - [Description("Force all dependencies to be resolved even if the last restore was successful. This is equivalent to deleting [grey]project.assets.json[/].")] - public bool Force { get; set; } - } - - public override int Execute(CommandContext context, Settings settings) - { - SettingsDumper.Dump(settings); - return 0; - } -} diff --git a/examples/Cli/Demo/Commands/Serve/ServeCommand.cs b/examples/Cli/Demo/Commands/Serve/ServeCommand.cs deleted file mode 100644 index 58d1271..0000000 --- a/examples/Cli/Demo/Commands/Serve/ServeCommand.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.ComponentModel; -using Demo.Utilities; -using Spectre.Console.Cli; - -namespace Demo.Commands.Serve; - -[Description("Launches a web server in the current working directory and serves all files in it.")] -public sealed class ServeCommand : Command -{ - public sealed class Settings : CommandSettings - { - [CommandOption("-p|--port ")] - [Description("Port to use. Defaults to [grey]8080[/]. Use [grey]0[/] for a dynamic port.")] - public int Port { get; set; } - - [CommandOption("-o|--open-browser [BROWSER]")] - [Description("Open a web browser when the server starts. You can also specify which browser to use. If none is specified, the default one will be used.")] - public FlagValue OpenBrowser { get; set; } - } - - public override int Execute(CommandContext context, Settings settings) - { - if (settings.OpenBrowser.IsSet) - { - var browser = settings.OpenBrowser.Value; - if (browser != null) - { - Console.WriteLine($"Open in {browser}"); - } - else - { - Console.WriteLine($"Open in default browser."); - } - } - - SettingsDumper.Dump(settings); - return 0; - } -} diff --git a/examples/Cli/Demo/Demo.csproj b/examples/Cli/Demo/Demo.csproj deleted file mode 100644 index 8e4f05c..0000000 --- a/examples/Cli/Demo/Demo.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - Exe - net8.0 - false - Demo - Demonstrates the most common use cases of Spectre.Cli. - Cli - false - - - - - - - diff --git a/examples/Cli/Demo/Program.cs b/examples/Cli/Demo/Program.cs deleted file mode 100644 index f6c3403..0000000 --- a/examples/Cli/Demo/Program.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Demo.Commands; -using Demo.Commands.Add; -using Demo.Commands.Run; -using Demo.Commands.Serve; -using Spectre.Console.Cli; - -namespace Demo; - -public static class Program -{ - public static int Main(string[] args) - { - var app = new CommandApp(); - app.Configure(config => - { - config.SetApplicationName("fake-dotnet"); - config.ValidateExamples(); - config.AddExample("run", "--no-build"); - - // Run - config.AddCommand("run"); - - // Add - config.AddBranch("add", add => - { - add.SetDescription("Add a package or reference to a .NET project"); - add.AddCommand("package"); - add.AddCommand("reference"); - }); - - // Serve - config.AddCommand("serve") - .WithExample("serve", "-o", "firefox") - .WithExample("serve", "--port", "80", "-o", "firefox"); - }); - - return app.Run(args); - } -} diff --git a/examples/Cli/Demo/Utilities/SettingsDumper.cs b/examples/Cli/Demo/Utilities/SettingsDumper.cs deleted file mode 100644 index 4445927..0000000 --- a/examples/Cli/Demo/Utilities/SettingsDumper.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Cli; - -namespace Demo.Utilities; - -public static class SettingsDumper -{ - public static void Dump(CommandSettings settings) - { - var table = new Table().RoundedBorder(); - table.AddColumn("[grey]Name[/]"); - table.AddColumn("[grey]Value[/]"); - - var properties = settings.GetType().GetProperties(); - foreach (var property in properties) - { - var value = property.GetValue(settings) - ?.ToString() - ?.Replace("[", "[["); - - table.AddRow( - property.Name, - value ?? "[grey]null[/]"); - } - - AnsiConsole.Write(table); - } -} diff --git a/examples/Cli/Demo/Verbosity.cs b/examples/Cli/Demo/Verbosity.cs deleted file mode 100644 index 84fc3b4..0000000 --- a/examples/Cli/Demo/Verbosity.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; - -namespace Demo; - -public enum Verbosity -{ - Quiet, - Minimal, - Normal, - Detailed, - Diagnostic -} - -public sealed class VerbosityConverter : TypeConverter -{ - private readonly Dictionary _lookup; - - public VerbosityConverter() - { - _lookup = new Dictionary(StringComparer.OrdinalIgnoreCase) - { - { "q", Verbosity.Quiet }, - { "quiet", Verbosity.Quiet }, - { "m", Verbosity.Minimal }, - { "minimal", Verbosity.Minimal }, - { "n", Verbosity.Normal }, - { "normal", Verbosity.Normal }, - { "d", Verbosity.Detailed }, - { "detailed", Verbosity.Detailed }, - { "diag", Verbosity.Diagnostic }, - { "diagnostic", Verbosity.Diagnostic } - }; - } - - public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) - { - if (value is string stringValue) - { - var result = _lookup.TryGetValue(stringValue, out var verbosity); - if (!result) - { - const string format = "The value '{0}' is not a valid verbosity."; - var message = string.Format(CultureInfo.InvariantCulture, format, value); - throw new InvalidOperationException(message); - } - return verbosity; - } - throw new NotSupportedException("Can't convert value to verbosity."); - } -} diff --git a/examples/Cli/Dynamic/Dynamic.csproj b/examples/Cli/Dynamic/Dynamic.csproj deleted file mode 100644 index 739192f..0000000 --- a/examples/Cli/Dynamic/Dynamic.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - Exe - net8.0 - false - Dynamic - Demonstrates how to define dynamic commands. - Cli - false - - - - - - - diff --git a/examples/Cli/Dynamic/MyCommand.cs b/examples/Cli/Dynamic/MyCommand.cs deleted file mode 100644 index 60128cb..0000000 --- a/examples/Cli/Dynamic/MyCommand.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Spectre.Console; -using Spectre.Console.Cli; - -namespace Dynamic; - -public sealed class MyCommand : Command -{ - public override int Execute(CommandContext context) - { - if (!(context.Data is int data)) - { - throw new InvalidOperationException("Command has no associated data."); - - } - - AnsiConsole.WriteLine("Value = {0}", data); - return 0; - } -} diff --git a/examples/Cli/Dynamic/Program.cs b/examples/Cli/Dynamic/Program.cs deleted file mode 100644 index 9dc916f..0000000 --- a/examples/Cli/Dynamic/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Linq; -using Spectre.Console.Cli; - -namespace Dynamic; - -public static class Program -{ - public static int Main(string[] args) - { - var app = new CommandApp(); - app.Configure(config => - { - foreach (var index in Enumerable.Range(1, 10)) - { - config.AddCommand($"c{index}") - .WithDescription($"Prints the number {index}") - .WithData(index); - } - }); - - return app.Run(args); - } -} diff --git a/examples/Cli/Help/CustomHelpProvider.cs b/examples/Cli/Help/CustomHelpProvider.cs deleted file mode 100644 index fd9c01f..0000000 --- a/examples/Cli/Help/CustomHelpProvider.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Linq; -using Spectre.Console; -using Spectre.Console.Cli; -using Spectre.Console.Cli.Help; -using Spectre.Console.Rendering; - -namespace Help; - -/// -/// Example showing how to extend the built-in Spectre.Console help provider -/// by rendering a custom banner at the top of the help information -/// -internal class CustomHelpProvider : HelpProvider -{ - public CustomHelpProvider(ICommandAppSettings settings) - : base(settings) - { - } - - public override IEnumerable GetHeader(ICommandModel model, ICommandInfo? command) - { - return new[] - { - new Text("--------------------------------------"), Text.NewLine, - new Text("--- CUSTOM HELP PROVIDER ---"), Text.NewLine, - new Text("--------------------------------------"), Text.NewLine, - Text.NewLine, - }; - } -} \ No newline at end of file diff --git a/examples/Cli/Help/DefaultCommand.cs b/examples/Cli/Help/DefaultCommand.cs deleted file mode 100644 index 71613d0..0000000 --- a/examples/Cli/Help/DefaultCommand.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Cli; - -namespace Help; - -public sealed class DefaultCommand : Command -{ - private IAnsiConsole _console; - - public DefaultCommand(IAnsiConsole console) - { - _console = console; - } - - public override int Execute(CommandContext context) - { - _console.WriteLine("Hello world"); - return 0; - } -} \ No newline at end of file diff --git a/examples/Cli/Help/Help.csproj b/examples/Cli/Help/Help.csproj deleted file mode 100644 index d93c525..0000000 --- a/examples/Cli/Help/Help.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Exe - net8.0 - enable - enable - Help - Demonstrates how to extend the built-in Spectre.Console help provider to render a custom banner at the top of the help information. - Cli - false - - - - - - - diff --git a/examples/Cli/Help/Program.cs b/examples/Cli/Help/Program.cs deleted file mode 100644 index aba42b0..0000000 --- a/examples/Cli/Help/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Spectre.Console.Cli; -using Spectre.Console.Cli.Help; - -namespace Help; - -public static class Program -{ - public static int Main(string[] args) - { - var app = new CommandApp(); - - app.Configure(config => - { - // Register the custom help provider - config.SetHelpProvider(new CustomHelpProvider(config.Settings)); - - // Render an unstyled help text for maximum accessibility - config.Settings.HelpProviderStyles = null; - }); - - return app.Run(args); - } -} diff --git a/examples/Cli/Injection/Commands/DefaultCommand.cs b/examples/Cli/Injection/Commands/DefaultCommand.cs deleted file mode 100644 index b31cc8a..0000000 --- a/examples/Cli/Injection/Commands/DefaultCommand.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.ComponentModel; -using Spectre.Console.Cli; - -namespace Injection.Commands; - -public sealed class DefaultCommand : Command -{ - private readonly IGreeter _greeter; - - public sealed class Settings : CommandSettings - { - [CommandOption("-n|--name ")] - [Description("The person or thing to greet.")] - [DefaultValue("World")] - public string Name { get; set; } - } - - public DefaultCommand(IGreeter greeter) - { - _greeter = greeter ?? throw new ArgumentNullException(nameof(greeter)); - } - - public override int Execute(CommandContext context, Settings settings) - { - _greeter.Greet(settings.Name); - return 0; - } -} diff --git a/examples/Cli/Injection/IGreeter.cs b/examples/Cli/Injection/IGreeter.cs deleted file mode 100644 index 1ff49fb..0000000 --- a/examples/Cli/Injection/IGreeter.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Spectre.Console; - -namespace Injection; - -public interface IGreeter -{ - void Greet(string name); -} - -public sealed class HelloWorldGreeter : IGreeter -{ - public void Greet(string name) - { - AnsiConsole.WriteLine($"Hello {name}!"); - } -} diff --git a/examples/Cli/Injection/Infrastructure/TypeRegistrar.cs b/examples/Cli/Injection/Infrastructure/TypeRegistrar.cs deleted file mode 100644 index 6651e67..0000000 --- a/examples/Cli/Injection/Infrastructure/TypeRegistrar.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console.Cli; - -namespace Injection.Infrastructure; - -public sealed class TypeRegistrar : ITypeRegistrar -{ - private readonly IServiceCollection _builder; - - public TypeRegistrar(IServiceCollection builder) - { - _builder = builder; - } - - public ITypeResolver Build() - { - return new TypeResolver(_builder.BuildServiceProvider()); - } - - public void Register(Type service, Type implementation) - { - _builder.AddSingleton(service, implementation); - } - - public void RegisterInstance(Type service, object implementation) - { - _builder.AddSingleton(service, implementation); - } - - public void RegisterLazy(Type service, Func func) - { - if (func is null) - { - throw new ArgumentNullException(nameof(func)); - } - - _builder.AddSingleton(service, (provider) => func()); - } -} diff --git a/examples/Cli/Injection/Infrastructure/TypeResolver.cs b/examples/Cli/Injection/Infrastructure/TypeResolver.cs deleted file mode 100644 index f3cf618..0000000 --- a/examples/Cli/Injection/Infrastructure/TypeResolver.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using Spectre.Console.Cli; - -namespace Injection.Infrastructure; - -public sealed class TypeResolver : ITypeResolver, IDisposable -{ - private readonly IServiceProvider _provider; - - public TypeResolver(IServiceProvider provider) - { - _provider = provider ?? throw new ArgumentNullException(nameof(provider)); - } - - public object Resolve(Type type) - { - if (type == null) - { - return null; - } - - return _provider.GetService(type); - } - - public void Dispose() - { - if (_provider is IDisposable disposable) - { - disposable.Dispose(); - } - } -} diff --git a/examples/Cli/Injection/Injection.csproj b/examples/Cli/Injection/Injection.csproj deleted file mode 100644 index a07bc9f..0000000 --- a/examples/Cli/Injection/Injection.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net8.0 - false - Injection - Demonstrates how to use dependency injection with Spectre.Cli. - Cli - false - - - - - - - - - - - diff --git a/examples/Cli/Injection/Program.cs b/examples/Cli/Injection/Program.cs deleted file mode 100644 index 813560d..0000000 --- a/examples/Cli/Injection/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Injection.Commands; -using Injection.Infrastructure; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console.Cli; - -namespace Injection; - -public class Program -{ - public static int Main(string[] args) - { - // Create a type registrar and register any dependencies. - // A type registrar is an adapter for a DI framework. - var registrations = new ServiceCollection(); - registrations.AddSingleton(); - var registrar = new TypeRegistrar(registrations); - - // Create a new command app with the registrar - // and run it with the provided arguments. - var app = new CommandApp(registrar); - return app.Run(args); - } -} diff --git a/examples/Cli/Logging/Commands/HelloCommand.cs b/examples/Cli/Logging/Commands/HelloCommand.cs deleted file mode 100644 index 21e8244..0000000 --- a/examples/Cli/Logging/Commands/HelloCommand.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Microsoft.Extensions.Logging; -using Spectre.Console; -using Spectre.Console.Cli; - -namespace Logging.Commands; - -public class HelloCommand : Command -{ - private ILogger _logger; - private IAnsiConsole _console; - - public HelloCommand(IAnsiConsole console, ILogger logger) - { - _console = console; - _logger = logger; - _logger.LogDebug("{0} initialized", nameof(HelloCommand)); - } - - public class Settings : LogCommandSettings - { - [CommandArgument(0, "[Name]")] - public string Name { get; set; } - } - - - public override int Execute(CommandContext context, Settings settings) - { - _logger.LogInformation("Starting my command"); - AnsiConsole.MarkupLine($"Hello, [blue]{settings.Name}[/]"); - _logger.LogInformation("Completed my command"); - - return 0; - } -} diff --git a/examples/Cli/Logging/Commands/LogCommandSettings.cs b/examples/Cli/Logging/Commands/LogCommandSettings.cs deleted file mode 100644 index 890953d..0000000 --- a/examples/Cli/Logging/Commands/LogCommandSettings.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using Serilog.Events; -using Spectre.Console.Cli; - -namespace Logging.Commands; - -public class LogCommandSettings : CommandSettings -{ - [CommandOption("--logFile")] - [Description("Path and file name for logging")] - public string LogFile { get; set; } - - [CommandOption("--logLevel")] - [Description("Minimum level for logging")] - [TypeConverter(typeof(VerbosityConverter))] - [DefaultValue(LogEventLevel.Information)] - public LogEventLevel LogLevel { get; set; } -} - -public sealed class VerbosityConverter : TypeConverter -{ - private readonly Dictionary _lookup; - - public VerbosityConverter() - { - _lookup = new Dictionary(StringComparer.OrdinalIgnoreCase) - { - {"d", LogEventLevel.Debug}, - {"v", LogEventLevel.Verbose}, - {"i", LogEventLevel.Information}, - {"w", LogEventLevel.Warning}, - {"e", LogEventLevel.Error}, - {"f", LogEventLevel.Fatal} - }; - } - - public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) - { - if (value is string stringValue) - { - var result = _lookup.TryGetValue(stringValue, out var verbosity); - if (!result) - { - const string format = "The value '{0}' is not a valid verbosity."; - var message = string.Format(CultureInfo.InvariantCulture, format, value); - throw new InvalidOperationException(message); - } - return verbosity; - } - throw new NotSupportedException("Can't convert value to verbosity."); - } -} diff --git a/examples/Cli/Logging/Infrastructure/LogInterceptor.cs b/examples/Cli/Logging/Infrastructure/LogInterceptor.cs deleted file mode 100644 index 54e2653..0000000 --- a/examples/Cli/Logging/Infrastructure/LogInterceptor.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Logging.Commands; -using Serilog.Core; -using Spectre.Console.Cli; - -namespace Logging.Infrastructure; - -public class LogInterceptor : ICommandInterceptor -{ - public static readonly LoggingLevelSwitch LogLevel = new(); - - public void Intercept(CommandContext context, CommandSettings settings) - { - if (settings is LogCommandSettings logSettings) - { - LoggingEnricher.Path = logSettings.LogFile ?? "application.log"; - LogLevel.MinimumLevel = logSettings.LogLevel; - } - } -} diff --git a/examples/Cli/Logging/Infrastructure/LoggingEnricher.cs b/examples/Cli/Logging/Infrastructure/LoggingEnricher.cs deleted file mode 100644 index 266260d..0000000 --- a/examples/Cli/Logging/Infrastructure/LoggingEnricher.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Serilog.Core; -using Serilog.Events; - -namespace Logging.Infrastructure; - -internal class LoggingEnricher : ILogEventEnricher -{ - private string _cachedLogFilePath; - private LogEventProperty _cachedLogFilePathProperty; - - // this path and level will be set by the LogInterceptor.cs after parsing the settings - public static string Path = string.Empty; - - public const string LogFilePathPropertyName = "LogFilePath"; - - public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) - { - // the settings might not have a path or we might not be within a command in which case - // we won't have the setting so a default value for the log file will be required - LogEventProperty logFilePathProperty; - - if (_cachedLogFilePathProperty != null && Path.Equals(_cachedLogFilePath)) - { - // Path hasn't changed, so let's use the cached property - logFilePathProperty = _cachedLogFilePathProperty; - } - else - { - // We've got a new path for the log. Let's create a new property - // and cache it for future log events to use - _cachedLogFilePath = Path; - _cachedLogFilePathProperty = logFilePathProperty = propertyFactory.CreateProperty(LogFilePathPropertyName, Path); - } - - logEvent.AddPropertyIfAbsent(logFilePathProperty); - } -} diff --git a/examples/Cli/Logging/Infrastructure/TypeRegistrar.cs b/examples/Cli/Logging/Infrastructure/TypeRegistrar.cs deleted file mode 100644 index f1169fc..0000000 --- a/examples/Cli/Logging/Infrastructure/TypeRegistrar.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console.Cli; - -namespace Logging.Infrastructure; - -public sealed class TypeRegistrar : ITypeRegistrar -{ - private readonly IServiceCollection _builder; - - public TypeRegistrar(IServiceCollection builder) - { - _builder = builder; - } - - public ITypeResolver Build() - { - return new TypeResolver(_builder.BuildServiceProvider()); - } - - public void Register(Type service, Type implementation) - { - _builder.AddSingleton(service, implementation); - } - - public void RegisterInstance(Type service, object implementation) - { - _builder.AddSingleton(service, implementation); - } - - public void RegisterLazy(Type service, Func func) - { - if (func is null) - { - throw new ArgumentNullException(nameof(func)); - } - - _builder.AddSingleton(service, _ => func()); - } -} diff --git a/examples/Cli/Logging/Infrastructure/TypeResolver.cs b/examples/Cli/Logging/Infrastructure/TypeResolver.cs deleted file mode 100644 index bd2b5f7..0000000 --- a/examples/Cli/Logging/Infrastructure/TypeResolver.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Spectre.Console.Cli; - -namespace Logging.Infrastructure; - -public sealed class TypeResolver : ITypeResolver -{ - private readonly IServiceProvider _provider; - - public TypeResolver(IServiceProvider provider) - { - _provider = provider ?? throw new ArgumentNullException(nameof(provider)); - } - - public object Resolve(Type type) - { - if (type == null) - { - return null; - } - - return _provider.GetService(type); - } -} diff --git a/examples/Cli/Logging/Logging.csproj b/examples/Cli/Logging/Logging.csproj deleted file mode 100644 index 72fe265..0000000 --- a/examples/Cli/Logging/Logging.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - Exe - net8.0 - false - Logging - Demonstrates how to dynamically configure Serilog for logging using parameters from a command. - Cli - false - disable - - - - - - - - - - - - - - - diff --git a/examples/Cli/Logging/Program.cs b/examples/Cli/Logging/Program.cs deleted file mode 100644 index bfab659..0000000 --- a/examples/Cli/Logging/Program.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Logging.Commands; -using Logging.Infrastructure; -using Microsoft.Extensions.DependencyInjection; -using Serilog; -using Spectre.Console.Cli; - -/* - * Dynamically control serilog configuration via command line parameters - * - * This works around the chicken and egg situation with configuring serilog via the command line. - * The logger needs to be configured prior to executing the parser, but the logger needs the parsed values - * to be configured. By using serilog.sinks.map we can defer configuration. We use a LogLevelSwitch to control the - * logging levels dynamically, and then we use a serilog enricher that has its state populated via a - * Spectre.Console CommandInterceptor - */ - -namespace Logging; - -public class Program -{ - static int Main(string[] args) - { - // to retrieve the log file name, we must first parse the command settings - // this will require us to delay setting the file path for the file writer. - // With serilog we can use an enricher and Serilog.Sinks.Map to dynamically - // pull this setting. - var serviceCollection = new ServiceCollection() - .AddLogging(configure => - configure.AddSerilog(new LoggerConfiguration() - // log level will be dynamically be controlled by our log interceptor upon running - .MinimumLevel.ControlledBy(LogInterceptor.LogLevel) - // the log enricher will add a new property with the log file path from the settings - // that we can use to set the path dynamically - .Enrich.With() - // serilog.sinks.map will defer the configuration of the sink to be ondemand - // allowing us to look at the properties set by the enricher to set the path appropriately - .WriteTo.Map(LoggingEnricher.LogFilePathPropertyName, - (logFilePath, wt) => wt.File($"{logFilePath}"), 1) - .CreateLogger() - ) - ); - - var registrar = new TypeRegistrar(serviceCollection); - var app = new CommandApp(registrar); - - app.Configure(config => - { - config.SetInterceptor(new LogInterceptor()); // add the interceptor - config.AddCommand("hello"); - }); - - return app.Run(args); - } -} diff --git a/examples/Console/AlternateScreen/AlternateScreen.csproj b/examples/Console/AlternateScreen/AlternateScreen.csproj deleted file mode 100644 index e048827..0000000 --- a/examples/Console/AlternateScreen/AlternateScreen.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Screens - Demonstrates how to use alternate screens. - Widgets - - - - - - - diff --git a/examples/Console/AlternateScreen/Program.cs b/examples/Console/AlternateScreen/Program.cs deleted file mode 100644 index 4415ab0..0000000 --- a/examples/Console/AlternateScreen/Program.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Check if we can use alternate screen buffers -using Spectre.Console; - -if (!AnsiConsole.Profile.Capabilities.AlternateBuffer) -{ - AnsiConsole.MarkupLine( - "[red]Alternate screen buffers are not supported " + - "by your terminal[/] [yellow]:([/]"); - - return; -} - -// Write to the terminal -AnsiConsole.Write(new Rule("[yellow]Normal universe[/]")); -AnsiConsole.Write(new Panel("Hello World!")); -AnsiConsole.MarkupLine("[grey]Press a key to continue[/]"); -AnsiConsole.Console.Input.ReadKey(true); - -AnsiConsole.AlternateScreen(() => -{ - // Now we're in another terminal screen buffer - AnsiConsole.Write(new Rule("[red]Mirror universe[/]")); - AnsiConsole.Write(new Panel("[red]Welcome to the upside down![/]")); - AnsiConsole.MarkupLine("[grey]Press a key to return[/]"); - AnsiConsole.Console.Input.ReadKey(true); -}); \ No newline at end of file diff --git a/examples/Console/Borders/Borders.csproj b/examples/Console/Borders/Borders.csproj deleted file mode 100644 index 4030715..0000000 --- a/examples/Console/Borders/Borders.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Borders - Demonstrates the different kind of borders. - Widgets - - - - - - - diff --git a/examples/Console/Borders/Program.cs b/examples/Console/Borders/Program.cs deleted file mode 100644 index 2b755ae..0000000 --- a/examples/Console/Borders/Program.cs +++ /dev/null @@ -1,86 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Rendering; - -namespace Borders; - -public static class Program -{ - public static void Main() - { - // Render panel borders - HorizontalRule("PANEL BORDERS"); - PanelBorders(); - - // Render table borders - HorizontalRule("TABLE BORDERS"); - TableBorders(); - } - - private static void PanelBorders() - { - static IRenderable CreatePanel(string name, BoxBorder border) - { - return - new Panel($"This is a panel with\nthe [yellow]{name}[/] border.") - .Header($" [blue]{name}[/] ", Justify.Center) - .Border(border) - .BorderStyle(Style.Parse("grey")); - } - - var items = new[] - { - CreatePanel("Ascii", BoxBorder.Ascii), - CreatePanel("Square", BoxBorder.Square), - CreatePanel("Rounded", BoxBorder.Rounded), - CreatePanel("Heavy", BoxBorder.Heavy), - CreatePanel("Double", BoxBorder.Double), - CreatePanel("None", BoxBorder.None), - }; - - AnsiConsole.Write( - new Padder( - new Columns(items).PadRight(2), - new Padding(2, 0, 0, 0))); - } - - private static void TableBorders() - { - static IRenderable CreateTable(string name, TableBorder border) - { - var table = new Table().Border(border); - table.ShowRowSeparators(); - table.AddColumn("[yellow]Header 1[/]", c => c.Footer("[grey]Footer 1[/]")); - table.AddColumn("[yellow]Header 2[/]", col => col.Footer("[grey]Footer 2[/]").RightAligned()); - table.AddRow("Cell", "Cell"); - table.AddRow("Cell", "Cell"); - - return new Panel(table) - .Header($" [blue]{name}[/] ", Justify.Center) - .PadBottom(1) - .NoBorder(); - } - - var items = new[] - { - CreateTable("Ascii", TableBorder.Ascii), CreateTable("Ascii2", TableBorder.Ascii2), - CreateTable("AsciiDoubleHead", TableBorder.AsciiDoubleHead), - CreateTable("Horizontal", TableBorder.Horizontal), CreateTable("Simple", TableBorder.Simple), - CreateTable("SimpleHeavy", TableBorder.SimpleHeavy), CreateTable("Minimal", TableBorder.Minimal), - CreateTable("MinimalHeavyHead", TableBorder.MinimalHeavyHead), - CreateTable("MinimalDoubleHead", TableBorder.MinimalDoubleHead), - CreateTable("Square", TableBorder.Square), CreateTable("Rounded", TableBorder.Rounded), - CreateTable("Heavy", TableBorder.Heavy), CreateTable("HeavyEdge", TableBorder.HeavyEdge), - CreateTable("HeavyHead", TableBorder.HeavyHead), CreateTable("Double", TableBorder.Double), - CreateTable("DoubleEdge", TableBorder.DoubleEdge), CreateTable("Markdown", TableBorder.Markdown), - }; - - AnsiConsole.Write(new Columns(items).Collapse()); - } - - private static void HorizontalRule(string title) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule($"[white bold]{title}[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.WriteLine(); - } -} \ No newline at end of file diff --git a/examples/Console/Calendars/Calendars.csproj b/examples/Console/Calendars/Calendars.csproj deleted file mode 100644 index c888117..0000000 --- a/examples/Console/Calendars/Calendars.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Calendars - Demonstrates how to render calendars. - Widgets - - - - - - - diff --git a/examples/Console/Calendars/Program.cs b/examples/Console/Calendars/Program.cs deleted file mode 100644 index d270115..0000000 --- a/examples/Console/Calendars/Program.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Spectre.Console; - -namespace Calendars; - -public static class Program -{ - public static void Main(string[] args) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Calendar(2020, 10) - .RoundedBorder() - .HighlightStyle(Style.Parse("red")) - .HeaderStyle(Style.Parse("yellow")) - .AddCalendarEvent("An event", 2020, 9, 22) - .AddCalendarEvent("Another event", 2020, 10, 2) - .AddCalendarEvent("A third event", 2020, 10, 13)); - } -} diff --git a/examples/Console/Canvas/Canvas.csproj b/examples/Console/Canvas/Canvas.csproj deleted file mode 100644 index ddd0d8a..0000000 --- a/examples/Console/Canvas/Canvas.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Exe - net8.0 - Canvas - Demonstrates how to render pixels and images. - Widgets - - - - - - - - - - PreserveNewest - - - - diff --git a/examples/Console/Canvas/Program.cs b/examples/Console/Canvas/Program.cs deleted file mode 100644 index 3e537dd..0000000 --- a/examples/Console/Canvas/Program.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Diagnostics; -using System.Reflection; -using SixLabors.ImageSharp.Processing; -using Spectre.Console; -using Spectre.Console.Rendering; - -namespace Canvas; - -public static class Program -{ - public static void Main() - { - // Draw an image using CanvasImage powered by ImageSharp. - // This requires the "Spectre.Console.ImageSharp" NuGet package. - var image = new CanvasImage("cake.png"); - image.BilinearResampler(); - image.MaxWidth(16); - Render(image, "Image from file (16 wide)"); - - // Draw image again, but without max width - image.NoMaxWidth(); - image.Mutate(ctx => ctx.Grayscale().Rotate(-45).EntropyCrop()); - Render(image, "Image from file (fit, greyscale, rotated)"); - - // Draw image again, but load from embedded resource rather than file - using (var fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Canvas.cake.png")) - { - Debug.Assert(fileStream != null); - var embeddedImage = new CanvasImage(fileStream); - embeddedImage.BilinearResampler(); - embeddedImage.MaxWidth(16); - Render(embeddedImage, "Image from embedded resource (16 wide)"); - } - } - - private static void Render(IRenderable canvas, string title) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule($"[yellow]{title}[/]").LeftJustified().RuleStyle("grey")); - AnsiConsole.WriteLine(); - AnsiConsole.Write(canvas); - } -} diff --git a/examples/Console/Canvas/cake.png b/examples/Console/Canvas/cake.png deleted file mode 100644 index f11d285c9463d14b1c4250457fe2a358678392a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52832 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%0AR{LQqrz*;V=tn8)n&-xSpEi6st^OJ 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 diff --git a/examples/Console/Charts/Charts.csproj b/examples/Console/Charts/Charts.csproj deleted file mode 100644 index f08d5b9..0000000 --- a/examples/Console/Charts/Charts.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Charts - Demonstrates how to render charts in a console. - Widgets - - - - - - - diff --git a/examples/Console/Charts/Program.cs b/examples/Console/Charts/Program.cs deleted file mode 100644 index 5aadfa8..0000000 --- a/examples/Console/Charts/Program.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Rendering; - -namespace Charts; - -public static class Program -{ - public static void Main() - { - // Render a bar chart - AnsiConsole.WriteLine(); - Render("Fruits per month", new BarChart() - .Width(60) - .Label("[green bold underline]Number of fruits[/]") - .CenterLabel() - .AddItem("Apple", 12, Color.Yellow) - .AddItem("Orange", 54, Color.Green) - .AddItem("Banana", 33, Color.Red)); - - // Render a breakdown chart - AnsiConsole.WriteLine(); - Render("Languages used", new BreakdownChart() - .FullSize() - .Width(60) - .ShowPercentage() - .WithValueColor(Color.Orange1) - .AddItem("SCSS", 37, Color.Red) - .AddItem("HTML", 28.3, Color.Blue) - .AddItem("C#", 22.6, Color.Green) - .AddItem("JavaScript", 6, Color.Yellow) - .AddItem("Ruby", 6, Color.LightGreen) - .AddItem("Shell", 0.1, Color.Aqua)); - } - - private static void Render(string title, IRenderable chart) - { - AnsiConsole.Write( - new Panel(chart) - .Padding(1, 1) - .Header(title)); - } -} diff --git a/examples/Console/Colors/Colors.csproj b/examples/Console/Colors/Colors.csproj deleted file mode 100644 index 0258570..0000000 --- a/examples/Console/Colors/Colors.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Colors - Demonstrates how to use [yellow]c[/][red]o[/][green]l[/][blue]o[/][aqua]r[/][lime]s[/] in the console. - Misc - - - - - - - diff --git a/examples/Console/Colors/Program.cs b/examples/Console/Colors/Program.cs deleted file mode 100644 index 946cb3d..0000000 --- a/examples/Console/Colors/Program.cs +++ /dev/null @@ -1,105 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Examples; - -namespace Colors; - -public static class Program -{ - public static void Main() - { - ///////////////////////////////////////////////////////////////// - // No colors - ///////////////////////////////////////////////////////////////// - if (AnsiConsole.Profile.Capabilities.ColorSystem == ColorSystem.NoColors) - { - AnsiConsole.WriteLine("No colors are supported."); - return; - } - - ///////////////////////////////////////////////////////////////// - // 3-BIT - ///////////////////////////////////////////////////////////////// - if (AnsiConsole.Profile.Supports(ColorSystem.Legacy)) - { - AnsiConsole.ResetColors(); - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("[yellow bold underline]3-bit Colors[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.WriteLine(); - - for (var i = 0; i < 8; i++) - { - AnsiConsole.Background = Color.FromInt32(i); - AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor(); - AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString())); - AnsiConsole.ResetColors(); - if ((i + 1) % 8 == 0) - { - AnsiConsole.WriteLine(); - } - } - } - - ///////////////////////////////////////////////////////////////// - // 4-BIT - ///////////////////////////////////////////////////////////////// - if (AnsiConsole.Profile.Supports(ColorSystem.Standard)) - { - AnsiConsole.ResetColors(); - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("[yellow bold underline]4-bit Colors[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.WriteLine(); - - for (var i = 0; i < 16; i++) - { - AnsiConsole.Background = Color.FromInt32(i); - AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor(); - AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString())); - AnsiConsole.ResetColors(); - if ((i + 1) % 8 == 0) - { - AnsiConsole.WriteLine(); - } - } - } - - ///////////////////////////////////////////////////////////////// - // 8-BIT - ///////////////////////////////////////////////////////////////// - if (AnsiConsole.Profile.Supports(ColorSystem.EightBit)) - { - AnsiConsole.ResetColors(); - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("[yellow bold underline]8-bit Colors[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.WriteLine(); - - for (var i = 0; i < 16; i++) - { - for (var j = 0; j < 16; j++) - { - var number = i * 16 + j; - AnsiConsole.Background = Color.FromInt32(number); - AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor(); - AnsiConsole.Write(string.Format(" {0,-4}", number)); - AnsiConsole.ResetColors(); - if ((number + 1) % 16 == 0) - { - AnsiConsole.WriteLine(); - } - } - } - } - - ///////////////////////////////////////////////////////////////// - // 24-BIT - ///////////////////////////////////////////////////////////////// - if (AnsiConsole.Profile.Supports(ColorSystem.TrueColor)) - { - AnsiConsole.ResetColors(); - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("[yellow bold underline]24-bit Colors[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.WriteLine(); - - AnsiConsole.Write(new ColorBox(width: 80, height: 15)); - } - } -} diff --git a/examples/Console/Columns/Columns.csproj b/examples/Console/Columns/Columns.csproj deleted file mode 100644 index 471c83b..0000000 --- a/examples/Console/Columns/Columns.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net8.0 - Columns - Demonstrates how to render data into columns. - Widgets - - - - - - - - - - - diff --git a/examples/Console/Columns/Program.cs b/examples/Console/Columns/Program.cs deleted file mode 100644 index 3a93ef4..0000000 --- a/examples/Console/Columns/Program.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using Spectre.Console; - -namespace Columns; - -public static class Program -{ - public static void Main() - { - var cards = new List(); - foreach (var user in User.LoadUsers()) - { - cards.Add( - new Panel(GetCardContent(user)) - .Header($"{user.Country}") - .RoundedBorder().Expand()); - } - - // Render all cards in columns - AnsiConsole.Write(new Spectre.Console.Columns(cards)); - } - - private static string GetCardContent(User user) - { - var name = $"{user.FirstName} {user.LastName}"; - var city = $"{user.City}"; - - return $"[b]{name}[/]\n[yellow]{city}[/]"; - } -} diff --git a/examples/Console/Columns/User.cs b/examples/Console/Columns/User.cs deleted file mode 100644 index f2e7681..0000000 --- a/examples/Console/Columns/User.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections.Generic; - -namespace Columns; - -public sealed class User -{ - public string FirstName { get; set; } - public string LastName { get; set; } - public string City { get; set; } - public string Country { get; set; } - - public static List LoadUsers() - { - return new List - { - new User - { - FirstName = "Andrea", - LastName = "Johansen", - City = "Hornbæk", - Country = "Denmark", - }, - new User - { - FirstName = "Phil", - LastName = "Scott", - City = "Dayton", - Country = "United States", - }, - new User - { - FirstName = "Patrik", - LastName = "Svensson", - City = "Stockholm", - Country = "Sweden", - }, - new User - { - FirstName = "Freya", - LastName = "Thompson", - City = "Rotorua", - Country = "New Zealand", - }, - new User - { - FirstName = "طاها", - LastName = "رضایی", - City = "اهواز", - Country = "Iran", - }, - new User - { - FirstName = "Yara", - LastName = "Simon", - City = "Develier", - Country = "Switzerland", - }, - new User - { - FirstName = "Giray", - LastName = "Erbay", - City = "Karabük", - Country = "Turkey", - }, - new User - { - FirstName = "Miodrag", - LastName = "Schaffer", - City = "Möckern", - Country = "Germany", - }, - new User - { - FirstName = "Carmela", - LastName = "Lo Castro", - City = "Firenze", - Country = "Italy", - }, - new User - { - FirstName = "Roberto", - LastName = "Sims", - City = "Mallow", - Country = "Ireland", - }, - }; - } -} diff --git a/examples/Console/Cursor/Cursor.csproj b/examples/Console/Cursor/Cursor.csproj deleted file mode 100644 index 0f3a3ea..0000000 --- a/examples/Console/Cursor/Cursor.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Cursor - Demonstrates how to move the cursor. - Misc - - - - - - - diff --git a/examples/Console/Cursor/Program.cs b/examples/Console/Cursor/Program.cs deleted file mode 100644 index 3ea7785..0000000 --- a/examples/Console/Cursor/Program.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Spectre.Console; - -namespace Cursor; - -public static class Program -{ - public static void Main(string[] args) - { - AnsiConsole.Write("Hello"); - - // Move the cursor 3 cells to the right - AnsiConsole.Cursor.Move(CursorDirection.Right, 3); - AnsiConsole.Write("World"); - - // Move the cursor 5 cells to the left. - AnsiConsole.Cursor.Move(CursorDirection.Left, 5); - AnsiConsole.WriteLine("Universe"); - } -} diff --git a/examples/Console/Decorations/Decorations.csproj b/examples/Console/Decorations/Decorations.csproj deleted file mode 100644 index 8541965..0000000 --- a/examples/Console/Decorations/Decorations.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Decorations - Demonstrates how to [italic]use[/] [bold]decorations[/] [dim]in[/] the console. - Misc - - - - - - - diff --git a/examples/Console/Decorations/Program.cs b/examples/Console/Decorations/Program.cs deleted file mode 100644 index e689df5..0000000 --- a/examples/Console/Decorations/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Spectre.Console; - -namespace Colors; - -public static class Program -{ - public static void Main() - { - AnsiConsole.ResetDecoration(); - AnsiConsole.WriteLine(); - - if (AnsiConsole.Profile.Capabilities.Ansi) - { - AnsiConsole.Write(new Rule("[bold green]ANSI Decorations[/]")); - } - else - { - AnsiConsole.Write(new Rule("[bold red]Legacy Decorations (unsupported)[/]")); - } - - var decorations = System.Enum.GetValues(typeof(Decoration)); - foreach (var decoration in decorations) - { - var name = System.Enum.GetName(typeof(Decoration),decoration); - AnsiConsole.Write(name + ": "); - AnsiConsole.Write(new Markup(name+"\n", new Style(decoration: (Decoration)decoration))); - } - } -} diff --git a/examples/Console/Emojis/Emojis.csproj b/examples/Console/Emojis/Emojis.csproj deleted file mode 100644 index f4def1b..0000000 --- a/examples/Console/Emojis/Emojis.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Emojis - Demonstrates how to render emojis. - Misc - - - - - - - diff --git a/examples/Console/Emojis/Program.cs b/examples/Console/Emojis/Program.cs deleted file mode 100644 index 3fe6e0f..0000000 --- a/examples/Console/Emojis/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Spectre.Console; - -namespace Emojis; - -public static class Program -{ - public static void Main(string[] args) - { - // Show a known emoji - RenderEmoji(); - - // Show a remapped emoji - Emoji.Remap("globe_showing_europe_africa", Emoji.Known.GrinningFaceWithSmilingEyes); - RenderEmoji(); - } - - private static void RenderEmoji() - { - AnsiConsole.Write( - new Panel("[yellow]Hello :globe_showing_europe_africa:![/]") - .RoundedBorder()); - } -} diff --git a/examples/Console/Exceptions/Exceptions.csproj b/examples/Console/Exceptions/Exceptions.csproj deleted file mode 100644 index 7ce802e..0000000 --- a/examples/Console/Exceptions/Exceptions.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Exceptions - Demonstrates how to render formatted exceptions. - Misc - - - - - - - diff --git a/examples/Console/Exceptions/Program.cs b/examples/Console/Exceptions/Program.cs deleted file mode 100644 index 032908a..0000000 --- a/examples/Console/Exceptions/Program.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Authentication; -using System.Threading.Tasks; -using Spectre.Console; - -namespace Exceptions; - -public static class Program -{ - public static async Task Main(string[] args) - { - try - { - var foo = new List(); - DoMagic(42, null, ref foo); - } - catch (Exception ex) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("Default").LeftJustified()); - AnsiConsole.WriteLine(); - AnsiConsole.WriteException(ex); - - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("Compact").LeftJustified()); - AnsiConsole.WriteLine(); - AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks); - - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("Compact + Custom colors").LeftJustified()); - AnsiConsole.WriteLine(); - AnsiConsole.WriteException(ex, new ExceptionSettings - { - Format = ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks, - Style = new ExceptionStyle - { - Exception = new Style().Foreground(Color.Grey), - Message = new Style().Foreground(Color.White), - NonEmphasized = new Style().Foreground(Color.Cornsilk1), - Parenthesis = new Style().Foreground(Color.Cornsilk1), - Method = new Style().Foreground(Color.Red), - ParameterName = new Style().Foreground(Color.Cornsilk1), - ParameterType = new Style().Foreground(Color.Red), - Path = new Style().Foreground(Color.Red), - LineNumber = new Style().Foreground(Color.Cornsilk1), - } - }); - } - - try - { - await DoMagicAsync(42, null); - } - catch (Exception ex) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("Async").LeftJustified()); - AnsiConsole.WriteLine(); - AnsiConsole.WriteException(ex, ExceptionFormats.ShortenPaths); - } - } - - private static void DoMagic(int foo, string[,] bar, ref List result) - { - try - { - CheckCredentials(foo, bar); - result = new List(); - } - catch (Exception ex) - { - throw new InvalidOperationException("Whaaat?", ex); - } - } - - private static bool CheckCredentials(int? qux, string[,] corgi) - { - throw new InvalidCredentialException("The credentials are invalid."); - } - - private static async Task DoMagicAsync(T foo, string[,] bar) - { - try - { - await CheckCredentialsAsync(new[] { foo }.ToList(), new []{ foo }, bar); - } - catch (Exception ex) - { - throw new InvalidOperationException("Whaaat?", ex); - } - } - - private static async Task CheckCredentialsAsync(List qux, T[] otherArray, string[,] corgi) - { - await Task.Delay(0); - throw new InvalidCredentialException("The credentials are invalid."); - } -} - diff --git a/examples/Console/Figlet/Figlet.csproj b/examples/Console/Figlet/Figlet.csproj deleted file mode 100644 index c44b008..0000000 --- a/examples/Console/Figlet/Figlet.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Figlet - Demonstrates how to render FIGlet text. - Widgets - - - - - - - diff --git a/examples/Console/Figlet/Program.cs b/examples/Console/Figlet/Program.cs deleted file mode 100644 index a831014..0000000 --- a/examples/Console/Figlet/Program.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Spectre.Console; - -namespace Figlet; - -public static class Program -{ - public static void Main(string[] args) - { - AnsiConsole.Write(new FigletText("Left aligned").LeftJustified().Color(Color.Red)); - AnsiConsole.Write(new FigletText("Centered").Centered().Color(Color.Green)); - AnsiConsole.Write(new FigletText("Right aligned").RightJustified().Color(Color.Blue)); - } -} diff --git a/examples/Console/Grids/Grids.csproj b/examples/Console/Grids/Grids.csproj deleted file mode 100644 index f7c5527..0000000 --- a/examples/Console/Grids/Grids.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Grids - Demonstrates how to render grids in a console. - Widgets - - - - - - - diff --git a/examples/Console/Grids/Program.cs b/examples/Console/Grids/Program.cs deleted file mode 100644 index ee9d0e9..0000000 --- a/examples/Console/Grids/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Spectre.Console; - -namespace Grids; - -public static class Program -{ - public static void Main() - { - AnsiConsole.WriteLine(); - AnsiConsole.MarkupLine("Usage: [grey]dotnet [blue]run[/] [[options]] [[[[--]] ...]]]][/]"); - AnsiConsole.WriteLine(); - - var grid = new Grid(); - grid.AddColumn(new GridColumn().NoWrap()); - grid.AddColumn(new GridColumn().PadLeft(2)); - grid.AddRow("Options:"); - grid.AddRow(" [blue]-h[/], [blue]--help[/]", "Show command line help."); - grid.AddRow(" [blue]-c[/], [blue]--configuration[/] ", "The configuration to run for."); - grid.AddRow(" [blue]-v[/], [blue]--verbosity[/] ", "Set the [grey]MSBuild[/] verbosity level."); - - AnsiConsole.Write(grid); - } -} diff --git a/examples/Console/Info/Info.csproj b/examples/Console/Info/Info.csproj deleted file mode 100644 index c06d19a..0000000 --- a/examples/Console/Info/Info.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Info - Displays the capabilities of the current console. - Misc - - - - - - - diff --git a/examples/Console/Info/Program.cs b/examples/Console/Info/Program.cs deleted file mode 100644 index 8bd5177..0000000 --- a/examples/Console/Info/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Spectre.Console; - -namespace Info; - -public static class Program -{ - public static void Main() - { - var grid = new Grid() - .AddColumn(new GridColumn().NoWrap().PadRight(4)) - .AddColumn() - .AddRow("[b]Enrichers[/]", string.Join(", ", AnsiConsole.Profile.Enrichers)) - .AddRow("[b]Color system[/]", $"{AnsiConsole.Profile.Capabilities.ColorSystem}") - .AddRow("[b]Unicode?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Unicode)}") - .AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Ansi)}") - .AddRow("[b]Supports links?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Links)}") - .AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Legacy)}") - .AddRow("[b]Interactive?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Interactive)}") - .AddRow("[b]Terminal?[/]", $"{YesNo(AnsiConsole.Profile.Out.IsTerminal)}") - .AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Profile.Width}") - .AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Profile.Height}") - .AddRow("[b]Encoding[/]", $"{AnsiConsole.Console.Profile.Encoding.EncodingName}"); - - AnsiConsole.Write( - new Panel(grid) - .Header("Information")); - } - - private static string YesNo(bool value) - { - return value ? "Yes" : "No"; - } -} diff --git a/examples/Console/Json/Json.csproj b/examples/Console/Json/Json.csproj deleted file mode 100644 index 7e31ed3..0000000 --- a/examples/Console/Json/Json.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - Exe - net8.0 - Json - Demonstrates how to print syntax highlighted JSON. - Widgets - - - - - - - - diff --git a/examples/Console/Json/Program.cs b/examples/Console/Json/Program.cs deleted file mode 100644 index 2dc4df6..0000000 --- a/examples/Console/Json/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Json; - -namespace Json; - -public static class Program -{ - public static void Main() - { - var json = new JsonText( - """ - { - "hello": 32, - "world": { - "foo": 21, - "bar": 255, - "baz": [ - 0.32, 0.33e-32, - 0.42e32, 0.55e+32, - { - "hello": "world", - "lol": null - } - ] - } - } - """); - - AnsiConsole.Write( - new Panel(json) - .Header("Some JSON in a panel") - .Collapse() - .RoundedBorder() - .BorderColor(Color.Yellow)); - } -} diff --git a/examples/Console/Layout/Layout.csproj b/examples/Console/Layout/Layout.csproj deleted file mode 100644 index 344ec91..0000000 --- a/examples/Console/Layout/Layout.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Layout - Demonstrates how to use layouts. - Widgets - - - - - - - diff --git a/examples/Console/Layout/Program.cs b/examples/Console/Layout/Program.cs deleted file mode 100644 index 835b614..0000000 --- a/examples/Console/Layout/Program.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using Spectre.Console; - -namespace Layouts; - -public static class Program -{ - public static void Main() - { - var layout = CreateLayout(); - AnsiConsole.Write(layout); - - Console.ReadKey(true); - } - - private static Layout CreateLayout() - { - var layout = new Layout(); - - layout.SplitRows( - new Layout("Top") - .SplitColumns( - new Layout("Left") - .SplitRows( - new Layout("LeftTop"), - new Layout("LeftBottom")), - new Layout("Right").Ratio(2), - new Layout("RightRight").Size(3)), - new Layout("Bottom")); - - layout["LeftBottom"].Update( - new Panel("[blink]PRESS ANY KEY TO QUIT[/]") - .Expand() - .BorderColor(Color.Yellow) - .Padding(0, 0)); - - layout["Right"].Update( - new Panel( - new Table() - .AddColumns("[blue]Qux[/]", "[green]Corgi[/]") - .AddRow("9", "8") - .AddRow("7", "6") - .Expand()) - .Header("A [yellow]Table[/] in a [blue]Panel[/] (Ratio=2)") - .Expand()); - - layout["RightRight"].Update( - new Panel("Explicit-size-is-[yellow]3[/]") - .BorderColor(Color.Yellow) - .Padding(0, 0)); - - layout["Bottom"].Update( - new Panel( - new FigletText("Hello World")) - .Header("Some [green]Figlet[/] text") - .Expand()); - - return layout; - } -} diff --git a/examples/Console/Links/Links.csproj b/examples/Console/Links/Links.csproj deleted file mode 100644 index 2165300..0000000 --- a/examples/Console/Links/Links.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Links - Demonstrates how to render links in a console. - Misc - - - - - - - diff --git a/examples/Console/Links/Program.cs b/examples/Console/Links/Program.cs deleted file mode 100644 index 6b1a459..0000000 --- a/examples/Console/Links/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Spectre.Console; - -namespace Links; - -public static class Program -{ - public static void Main() - { - if (AnsiConsole.Profile.Capabilities.Links) - { - AnsiConsole.MarkupLine("[link=https://patriksvensson.se]Click to visit my blog[/]!"); - } - else - { - AnsiConsole.MarkupLine("[red]It looks like your terminal doesn't support links[/]"); - AnsiConsole.WriteLine(); - AnsiConsole.MarkupLine("[yellow](╯°□°)╯[/]︵ [blue]┻━┻[/]"); - } - } -} diff --git a/examples/Console/Live/Live.csproj b/examples/Console/Live/Live.csproj deleted file mode 100644 index c69b546..0000000 --- a/examples/Console/Live/Live.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Live - Demonstrates how to do live updates. - Live - - - - - - - diff --git a/examples/Console/Live/Program.cs b/examples/Console/Live/Program.cs deleted file mode 100644 index 4d5bdbc..0000000 --- a/examples/Console/Live/Program.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Threading; -using Spectre.Console; - -namespace Live; - -public static class Program -{ - public static void Main() - { - var table = new Table().Centered(); - - // Animate - AnsiConsole.Live(table) - .AutoClear(false) - .Overflow(VerticalOverflow.Ellipsis) - .Cropping(VerticalOverflowCropping.Top) - .Start(ctx => - { - void Update(int delay, Action action) - { - action(); - ctx.Refresh(); - Thread.Sleep(delay); - } - - // Columns - Update(230, () => table.AddColumn("Release date")); - Update(230, () => table.AddColumn("Title")); - Update(230, () => table.AddColumn("Budget")); - Update(230, () => table.AddColumn("Opening Weekend")); - Update(230, () => table.AddColumn("Box office")); - - // Rows - Update(70, () => table.AddRow("May 25, 1977", "[yellow]Star Wars[/] [grey]Ep.[/] [u]IV[/]", "$11,000,000", "$1,554,475", "$775,398,007")); - Update(70, () => table.AddRow("May 21, 1980", "[yellow]Star Wars[/] [grey]Ep.[/] [u]V[/]", "$18,000,000", "$4,910,483", "$547,969,004")); - Update(70, () => table.AddRow("May 25, 1983", "[yellow]Star Wars[/] [grey]Ep.[/] [u]VI[/]", "$32,500,000", "$23,019,618", "$475,106,177")); - Update(70, () => table.AddRow("May 19, 1999", "[yellow]Star Wars[/] [grey]Ep.[/] [u]I[/]", "$115,000,000", "$64,810,870", "$1,027,044,677")); - Update(70, () => table.AddRow("May 16, 2002", "[yellow]Star Wars[/] [grey]Ep.[/] [u]II[/]", "$115,000,000", "$80,027,814", "$649,436,358")); - Update(70, () => table.AddRow("May 19, 2005", "[yellow]Star Wars[/] [grey]Ep.[/] [u]III[/]", "$113,000,000", "$108,435,841", "$850,035,635")); - Update(70, () => table.AddRow("Dec 18, 2015", "[yellow]Star Wars[/] [grey]Ep.[/] [u]VII[/]", "$245,000,000", "$247,966,675", "$2,068,223,624")); - Update(70, () => table.AddRow("Dec 15, 2017", "[yellow]Star Wars[/] [grey]Ep.[/] [u]VIII[/]", "$317,000,000", "$220,009,584", "$1,333,539,889")); - Update(70, () => table.AddRow("Dec 20, 2019", "[yellow]Star Wars[/] [grey]Ep.[/] [u]IX[/]", "$245,000,000", "$177,383,864", "$1,074,114,248")); - - // Column footer - Update(230, () => table.Columns[2].Footer("$1,633,000,000")); - Update(230, () => table.Columns[3].Footer("$928,119,224")); - Update(400, () => table.Columns[4].Footer("$10,318,030,576")); - - // Column alignment - Update(230, () => table.Columns[2].RightAligned()); - Update(230, () => table.Columns[3].RightAligned()); - Update(400, () => table.Columns[4].RightAligned()); - - // Column titles - Update(70, () => table.Columns[0].Header("[bold]Release date[/]")); - Update(70, () => table.Columns[1].Header("[bold]Title[/]")); - Update(70, () => table.Columns[2].Header("[red bold]Budget[/]")); - Update(70, () => table.Columns[3].Header("[green bold]Opening Weekend[/]")); - Update(400, () => table.Columns[4].Header("[blue bold]Box office[/]")); - - // Footers - Update(70, () => table.Columns[2].Footer("[red bold]$1,633,000,000[/]")); - Update(70, () => table.Columns[3].Footer("[green bold]$928,119,224[/]")); - Update(400, () => table.Columns[4].Footer("[blue bold]$10,318,030,576[/]")); - - // Title - Update(500, () => table.Title("Star Wars Movies")); - Update(400, () => table.Title("[[ [yellow]Star Wars Movies[/] ]]")); - - // Borders - Update(230, () => table.BorderColor(Color.Yellow)); - Update(230, () => table.MinimalBorder()); - Update(230, () => table.SimpleBorder()); - Update(230, () => table.SimpleHeavyBorder()); - - // Caption - Update(400, () => table.Caption("[[ [blue]THE END[/] ]]")); - }); - } -} diff --git a/examples/Console/LiveTable/LiveTable.csproj b/examples/Console/LiveTable/LiveTable.csproj deleted file mode 100644 index 56272a4..0000000 --- a/examples/Console/LiveTable/LiveTable.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - LiveTable - Demonstrates how to do live updates in a table. - Live - - - - - - - diff --git a/examples/Console/LiveTable/Program.cs b/examples/Console/LiveTable/Program.cs deleted file mode 100644 index b3fc253..0000000 --- a/examples/Console/LiveTable/Program.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Spectre.Console; - -namespace LiveTable; - -public static class Program -{ - private const int NumberOfRows = 10; - - private static readonly Random _random = new(); - private static readonly string[] _exchanges = new string[] - { - "SGD", "SEK", "PLN", - "MYR", "EUR", "USD", - "AUD", "JPY", "CNH", - "HKD", "CAD", "INR", - "DKK", "GBP", "RUB", - "NZD", "MXN", "IDR", - "TWD", "THB", "VND", - }; - - public static async Task Main(string[] args) - { - var table = new Table().Expand().BorderColor(Color.Grey); - table.AddColumn("[yellow]Source currency[/]"); - table.AddColumn("[yellow]Destination currency[/]"); - table.AddColumn("[yellow]Exchange rate[/]"); - - AnsiConsole.MarkupLine("Press [yellow]CTRL+C[/] to exit"); - - await AnsiConsole.Live(table) - .AutoClear(false) - .Overflow(VerticalOverflow.Ellipsis) - .Cropping(VerticalOverflowCropping.Bottom) - .StartAsync(async ctx => - { - // Add some initial rows - foreach (var _ in Enumerable.Range(0, NumberOfRows)) - { - AddExchangeRateRow(table); - } - - // Continously update the table - while (true) - { - // More rows than we want? - if (table.Rows.Count > NumberOfRows) - { - // Remove the first one - table.Rows.RemoveAt(0); - } - - // Add a new row - AddExchangeRateRow(table); - - // Refresh and wait for a while - ctx.Refresh(); - await Task.Delay(400); - } - }); - } - - private static void AddExchangeRateRow(Table table) - { - var (source, destination, rate) = GetExchangeRate(); - table.AddRow( - source, destination, - _random.NextDouble() > 0.35D ? $"[green]{rate}[/]" : $"[red]{rate}[/]"); - } - - private static (string Source, string Destination, double Rate) GetExchangeRate() - { - var source = _exchanges[_random.Next(0, _exchanges.Length)]; - var dest = _exchanges[_random.Next(0, _exchanges.Length)]; - var rate = 200 / ((_random.NextDouble() * 320) + 1); - - while (source == dest) - { - dest = _exchanges[_random.Next(0, _exchanges.Length)]; - } - - return (source, dest, rate); - } -} diff --git a/examples/Console/Minimal/GlobalUsings.cs b/examples/Console/Minimal/GlobalUsings.cs deleted file mode 100644 index 6c76d1f..0000000 --- a/examples/Console/Minimal/GlobalUsings.cs +++ /dev/null @@ -1,2 +0,0 @@ -global using Spectre.Console; -global using static Spectre.Console.AnsiConsole; \ No newline at end of file diff --git a/examples/Console/Minimal/Minimal.csproj b/examples/Console/Minimal/Minimal.csproj deleted file mode 100644 index b0f2cfe..0000000 --- a/examples/Console/Minimal/Minimal.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - Exe - net8.0 - enable - Minimal - Demonstrates a minimal console application. - Live - - - - - - - diff --git a/examples/Console/Minimal/Program.cs b/examples/Console/Minimal/Program.cs deleted file mode 100644 index 6de47a3..0000000 --- a/examples/Console/Minimal/Program.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Write a markup line to the console -MarkupLine("[yellow]Hello[/], [blue]World[/]!"); - -// Write text to the console -WriteLine("Hello, World!"); - -// Write a table to the console -Write(new Table() - .RoundedBorder() - .AddColumns("[red]Greeting[/]", "[red]Subject[/]") - .AddRow("[yellow]Hello[/]", "World") - .AddRow("[green]Oh hi[/]", "[blue u]Mark[/]")); \ No newline at end of file diff --git a/examples/Console/Panels/Panels.csproj b/examples/Console/Panels/Panels.csproj deleted file mode 100644 index ceab0e6..0000000 --- a/examples/Console/Panels/Panels.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Panels - Demonstrates how to render items in panels. - Widgets - - - - - - - diff --git a/examples/Console/Panels/Program.cs b/examples/Console/Panels/Program.cs deleted file mode 100644 index dc9ecb8..0000000 --- a/examples/Console/Panels/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Spectre.Console; - -namespace Panels; - -public static class Program -{ - public static void Main() - { - var content = new Markup( - "[underline]I[/] heard [underline on blue]you[/] like panels\n\n\n\n" + - "So I put a panel in a panel").Centered(); - - AnsiConsole.Write( - new Panel( - new Panel(content) - .Border(BoxBorder.Rounded))); - - // Left adjusted panel with text - AnsiConsole.Write( - new Panel(new Text("Left adjusted\nLeft").LeftJustified()) - .Expand() - .SquareBorder() - .Header("[red]Left[/]")); - - // Centered ASCII panel with text - AnsiConsole.Write( - new Panel(new Text("Centered\nCenter").Centered()) - .Expand() - .AsciiBorder() - .Header("[green]Center[/]") - .HeaderAlignment(Justify.Center)); - - // Right adjusted, rounded panel with text - AnsiConsole.Write( - new Panel(new Text("Right adjusted\nRight").RightJustified()) - .Expand() - .RoundedBorder() - .Header("[blue]Right[/]") - .HeaderAlignment(Justify.Right)); - } -} diff --git a/examples/Console/Paths/Paths.csproj b/examples/Console/Paths/Paths.csproj deleted file mode 100644 index cad7fcc..0000000 --- a/examples/Console/Paths/Paths.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Paths - Demonstrates how to render paths. - Widgets - - - - - - - diff --git a/examples/Console/Paths/Program.cs b/examples/Console/Paths/Program.cs deleted file mode 100644 index ff88429..0000000 --- a/examples/Console/Paths/Program.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Threading; -using Spectre.Console; - -namespace Paths; - -public static class Program -{ - public static void Main() - { - var windowsPath = @"C:\This is\A\Super Long\Windows\Path\That\Goes\On And On\And\Never\Seems\To\Stop\But\At\Some\Point\It\Must\I\Guess.txt"; - var unixPath = @"//This is/A/Super Long/Unix/Path/That/Goes/On And On/And/Never/Seems/To/Stop/But/At/Some/Point/It/Must/I/Guess.txt"; - - AnsiConsole.WriteLine(); - WritePlain(windowsPath, unixPath); - - AnsiConsole.WriteLine(); - WriteColorized(windowsPath, unixPath); - - AnsiConsole.WriteLine(); - WriteAligned(windowsPath); - } - - private static void WritePlain(string windowsPath, string unixPath) - { - var table = new Table().BorderColor(Color.Grey).Title("Plain").RoundedBorder(); - table.AddColumns("[grey]OS[/]", "[grey]Path[/]"); - table.AddRow(new Text("Windows"), new TextPath(windowsPath)); - table.AddRow(new Text("Unix"), new TextPath(unixPath)); - - AnsiConsole.Write(table); - } - - private static void WriteColorized(string windowsPath, string unixPath) - { - var table = new Table().BorderColor(Color.Grey).Title("Colorized").RoundedBorder(); - table.AddColumns("[grey]OS[/]", "[grey]Path[/]"); - - table.AddRow(new Text("Windows"), - new TextPath(windowsPath) - .RootColor(Color.Blue) - .SeparatorColor(Color.Yellow) - .StemColor(Color.Red) - .LeafColor(Color.Green)); - - table.AddRow(new Text("Unix"), - new TextPath(unixPath) - .RootColor(Color.Blue) - .SeparatorColor(Color.Yellow) - .StemColor(Color.Red) - .LeafColor(Color.Green)); - - AnsiConsole.Write(table); - } - - private static void WriteAligned(string path) - { - var table = new Table().BorderColor(Color.Grey).Title("Aligned").RoundedBorder(); - table.AddColumns("[grey]Alignment[/]", "[grey]Path[/]"); - - table.AddRow(new Text("Left"), new TextPath(path).LeftJustified()); - table.AddRow(new Text("Center"), new TextPath(path).Centered()); - table.AddRow(new Text("Right"), new TextPath(path).RightJustified()); - - AnsiConsole.Write(table); - } -} diff --git a/examples/Console/Progress/DescriptionGenerator.cs b/examples/Console/Progress/DescriptionGenerator.cs deleted file mode 100644 index 0bdb064..0000000 --- a/examples/Console/Progress/DescriptionGenerator.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Progress; - -public static class DescriptionGenerator -{ - private static readonly string[] _verbs = new[] { "Downloading", "Rerouting", "Retriculating", "Collapsing", "Folding", "Solving", "Colliding", "Measuring" }; - private static readonly string[] _nouns = new[] { "internet", "splines", "space", "capacitators", "quarks", "algorithms", "data structures", "spacetime" }; - - private static readonly Random _random; - private static readonly HashSet _used; - - static DescriptionGenerator() - { - _random = new Random(DateTime.Now.Millisecond); - _used = new HashSet(); - } - - public static bool TryGenerate(out string name) - { - var iterations = 0; - while (iterations < 25) - { - name = Generate(); - if (!_used.Contains(name)) - { - _used.Add(name); - return true; - } - - iterations++; - } - - name = Generate(); - return false; - } - - public static string Generate() - { - return _verbs[_random.Next(0, _verbs.Length)] - + " " + _nouns[_random.Next(0, _nouns.Length)]; - } -} diff --git a/examples/Console/Progress/Program.cs b/examples/Console/Progress/Program.cs deleted file mode 100644 index 268c826..0000000 --- a/examples/Console/Progress/Program.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using Spectre.Console; -using Spectre.Console.Rendering; - -namespace Progress; - -public static class Program -{ - public static void Main() - { - AnsiConsole.MarkupLine("[yellow]Initializing warp drive[/]..."); - - // Show progress - AnsiConsole.Progress() - .AutoClear(false) - .Columns(new ProgressColumn[] - { - new TaskDescriptionColumn(), // Task description - new ProgressBarColumn(), // Progress bar - new PercentageColumn(), // Percentage - new RemainingTimeColumn(), // Remaining time - new SpinnerColumn(), // Spinner - }) - .UseRenderHook((renderable, tasks) => RenderHook(tasks, renderable)) - .Start(ctx => - { - var random = new Random(DateTime.Now.Millisecond); - - // Create some tasks - var tasks = CreateTasks(ctx, random); - var warpTask = ctx.AddTask("Going to warp", autoStart: false).IsIndeterminate(); - - // Wait for all tasks (except the indeterminate one) to complete - while (!ctx.IsFinished) - { - // Increment progress - foreach (var (task, increment) in tasks) - { - task.Increment(random.NextDouble() * increment); - } - - // Write some random things to the terminal - if (random.NextDouble() < 0.1) - { - WriteLogMessage(); - } - - // Simulate some delay - Thread.Sleep(100); - } - - // Now start the "warp" task - warpTask.StartTask(); - warpTask.IsIndeterminate(false); - while (!ctx.IsFinished) - { - warpTask.Increment(12 * random.NextDouble()); - - // Simulate some delay - Thread.Sleep(100); - } - }); - - // Done - AnsiConsole.MarkupLine("[green]Done![/]"); - } - - private static IRenderable RenderHook(IReadOnlyList tasks, IRenderable renderable) - { - var header = new Panel("Going on a :rocket:, we're going to the :crescent_moon:").Expand().RoundedBorder(); - var footer = new Rows( - new Rule(), - new Markup( - $"[blue]{tasks.Count}[/] total tasks. [green]{tasks.Count(i => i.IsFinished)}[/] complete.") - ); - - const string ESC = "\u001b"; - string escapeSequence; - if (tasks.All(i => i.IsFinished)) - { - escapeSequence = $"{ESC}]]9;4;0;100{ESC}\\"; - } - else - { - var total = tasks.Sum(i => i.MaxValue); - var done = tasks.Sum(i => i.Value); - var percent = (int)(done / total * 100); - escapeSequence = $"{ESC}]]9;4;1;{percent}{ESC}\\"; - } - - var middleContent = new Grid().AddColumns(new GridColumn(), new GridColumn().Width(20)); - middleContent.AddRow(renderable, new FigletText(tasks.Count(i => i.IsFinished == false).ToString())); - - return new Rows(header, middleContent, footer, new ControlCode(escapeSequence)); - } - - private static List<(ProgressTask Task, int Delay)> CreateTasks(ProgressContext progress, Random random) - { - var tasks = new List<(ProgressTask, int)>(); - while (tasks.Count < 5) - { - if (DescriptionGenerator.TryGenerate(out var name)) - { - tasks.Add((progress.AddTask(name), random.Next(2, 10))); - } - } - - return tasks; - } - - private static void WriteLogMessage() - { - AnsiConsole.MarkupLine( - "[grey]LOG:[/] " + - DescriptionGenerator.Generate() + - "[grey]...[/]"); - } -} diff --git a/examples/Console/Progress/Progress.csproj b/examples/Console/Progress/Progress.csproj deleted file mode 100644 index d231a4b..0000000 --- a/examples/Console/Progress/Progress.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net8.0 - Progress - Demonstrates how to show progress bars. - Status - - - - - - - - - - - diff --git a/examples/Console/Prompt/Program.cs b/examples/Console/Prompt/Program.cs deleted file mode 100644 index 216d029..0000000 --- a/examples/Console/Prompt/Program.cs +++ /dev/null @@ -1,182 +0,0 @@ -using Spectre.Console; - -namespace Prompt -{ - public static class Program - { - public static void Main(string[] args) - { - // Check if we can accept key strokes - if (!AnsiConsole.Profile.Capabilities.Interactive) - { - AnsiConsole.MarkupLine("[red]Environment does not support interaction.[/]"); - return; - } - - // Confirmation - if (!AskConfirmation()) - { - return; - } - - // Ask the user for some different things - WriteDivider("Strings"); - var name = AskName(); - - WriteDivider("Lists"); - var fruit = AskFruit(); - - WriteDivider("Choices"); - var sport = AskSport(); - - WriteDivider("Integers"); - var age = AskAge(); - - WriteDivider("Secrets"); - var password = AskPassword(); - - WriteDivider("Mask"); - var mask = AskPasswordWithCustomMask(); - - WriteDivider("Null Mask"); - var nullMask = AskPasswordWithNullMask(); - - WriteDivider("Optional"); - var color = AskColor(); - - // Summary - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule("[yellow]Results[/]").RuleStyle("grey").LeftJustified()); - AnsiConsole.Write(new Table().AddColumns("[grey]Question[/]", "[grey]Answer[/]") - .RoundedBorder() - .BorderColor(Color.Grey) - .AddRow("[grey]Name[/]", name) - .AddRow("[grey]Favorite fruit[/]", fruit) - .AddRow("[grey]Favorite sport[/]", sport) - .AddRow("[grey]Age[/]", age.ToString()) - .AddRow("[grey]Password[/]", password) - .AddRow("[grey]Mask[/]", mask) - .AddRow("[grey]Null Mask[/]", nullMask) - .AddRow("[grey]Favorite color[/]", string.IsNullOrEmpty(color) ? "Unknown" : color)); - } - - private static void WriteDivider(string text) - { - AnsiConsole.WriteLine(); - AnsiConsole.Write(new Rule($"[yellow]{text}[/]").RuleStyle("grey").LeftJustified()); - } - - public static bool AskConfirmation() - { - if (!AnsiConsole.Confirm("Run prompt example?")) - { - AnsiConsole.MarkupLine("Ok... :("); - return false; - } - - return true; - } - - public static string AskName() - { - var name = AnsiConsole.Ask("What's your [green]name[/]?"); - return name; - } - - public static string AskFruit() - { - var favorites = AnsiConsole.Prompt( - new MultiSelectionPrompt() - .PageSize(10) - .Title("What are your [green]favorite fruits[/]?") - .MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]") - .InstructionsText("[grey](Press [blue][/] to toggle a fruit, [green][/] to accept)[/]") - .AddChoiceGroup("Berries", new[] - { - "Blackcurrant", "Blueberry", "Cloudberry", - "Elderberry", "Honeyberry", "Mulberry" - }) - .AddChoices(new[] - { - "Apple", "Apricot", "Avocado", "Banana", - "Cherry", "Cocunut", "Date", "Dragonfruit", "Durian", - "Egg plant", "Fig", "Grape", "Guava", - "Jackfruit", "Jambul", "Kiwano", "Kiwifruit", "Lime", "Lylo", - "Lychee", "Melon", "Nectarine", "Orange", "Olive" - })); - - var fruit = favorites.Count == 1 ? favorites[0] : null; - if (string.IsNullOrWhiteSpace(fruit)) - { - fruit = AnsiConsole.Prompt( - new SelectionPrompt() - .EnableSearch() - .Title("Ok, but if you could only choose [green]one[/]?") - .MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]") - .AddChoices(favorites)); - } - - AnsiConsole.MarkupLine("You selected: [yellow]{0}[/]", fruit); - return fruit; - } - - public static string AskSport() - { - return AnsiConsole.Prompt( - new TextPrompt("What's your [green]favorite sport[/]?") - .InvalidChoiceMessage("[red]That's not a sport![/]") - .DefaultValue("Sport?") - .AddChoice("Soccer") - .AddChoice("Hockey") - .AddChoice("Basketball")); - } - - public static int AskAge() - { - return AnsiConsole.Prompt( - new TextPrompt("How [green]old[/] are you?") - .PromptStyle("green") - .ValidationErrorMessage("[red]That's not a valid age[/]") - .Validate(age => - { - return age switch - { - <= 0 => ValidationResult.Error("[red]You must at least be 1 years old[/]"), - >= 123 => ValidationResult.Error("[red]You must be younger than the oldest person alive[/]"), - _ => ValidationResult.Success(), - }; - })); - } - - public static string AskPassword() - { - return AnsiConsole.Prompt( - new TextPrompt("Enter [green]password[/]?") - .PromptStyle("red") - .Secret()); - } - - public static string AskPasswordWithCustomMask() - { - return AnsiConsole.Prompt( - new TextPrompt("Enter [green]password[/]?") - .PromptStyle("red") - .Secret('-')); - } - - public static string AskPasswordWithNullMask() - { - return AnsiConsole.Prompt( - new TextPrompt("Enter [green]password[/]?") - .PromptStyle("red") - .Secret(null)); - } - - public static string AskColor() - { - return AnsiConsole.Prompt( - new TextPrompt("[grey][[Optional]][/] What is your [green]favorite color[/]?") - .AllowEmpty()); - } - } -} \ No newline at end of file diff --git a/examples/Console/Prompt/Prompt.csproj b/examples/Console/Prompt/Prompt.csproj deleted file mode 100644 index 137ee61..0000000 --- a/examples/Console/Prompt/Prompt.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - Exe - net8.0 - 9 - Prompt - Demonstrates how to get input from a user. - Misc - - - - - - - diff --git a/examples/Console/Rules/Program.cs b/examples/Console/Rules/Program.cs deleted file mode 100644 index 442ed3f..0000000 --- a/examples/Console/Rules/Program.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Spectre.Console; - -namespace Rules; - -public static class Program -{ - public static void Main(string[] args) - { - // No title - Render( - new Rule() - .RuleStyle(Style.Parse("yellow")) - .AsciiBorder() - .LeftJustified()); - - // Left aligned title - Render( - new Rule("[blue]Left aligned[/]") - .RuleStyle(Style.Parse("red")) - .DoubleBorder() - .LeftJustified()); - - // Centered title - Render( - new Rule("[green]Centered[/]") - .RuleStyle(Style.Parse("green")) - .HeavyBorder() - .Centered()); - - // Right aligned title - Render( - new Rule("[red]Right aligned[/]") - .RuleStyle(Style.Parse("blue")) - .RightJustified()); - } - - private static void Render(Rule rule) - { - AnsiConsole.Write(rule); - AnsiConsole.WriteLine(); - } -} diff --git a/examples/Console/Rules/Rules.csproj b/examples/Console/Rules/Rules.csproj deleted file mode 100644 index 8d0660f..0000000 --- a/examples/Console/Rules/Rules.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Rules - Demonstrates how to render horizontal rules (lines). - Widgets - - - - - - - diff --git a/examples/Console/Showcase/ExceptionGenerator.cs b/examples/Console/Showcase/ExceptionGenerator.cs deleted file mode 100644 index f3ddd99..0000000 --- a/examples/Console/Showcase/ExceptionGenerator.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace Showcase; - -public static class ExceptionGenerator -{ - public static Exception GenerateException() - { - try - { - SomeOperation(); - throw new InvalidOperationException(); - } - catch (Exception ex) - { - return ex; - } - } - - private static void SomeOperation() - { - SomeOperationGoingWrong(); - } - - private static void SomeOperationGoingWrong() - { - throw new InvalidOperationException("Something went very wrong!"); - } -} diff --git a/examples/Console/Showcase/Program.cs b/examples/Console/Showcase/Program.cs deleted file mode 100644 index abb1e23..0000000 --- a/examples/Console/Showcase/Program.cs +++ /dev/null @@ -1,154 +0,0 @@ -using Spectre.Console; -using Spectre.Console.Examples; -using Spectre.Console.Rendering; - -namespace Showcase; - -public static partial class Program -{ - public static void Main() - { - var table = new Table().HideHeaders().NoBorder(); - table.Title("[u][yellow]Spectre.Console[/] [b]Features[/][/]"); - table.AddColumn("Feature", c => c.NoWrap().RightAligned().Width(10).PadRight(3)); - table.AddColumn("Demonstration", c => c.PadRight(0)); - table.AddEmptyRow(); - - // Colors - table.AddRow( - new Markup("[red]Colors[/]"), - GetColorTable()); - - // Styles - table.AddEmptyRow(); - table.AddRow( - new Markup("[red]OS[/]"), - new Grid().Expand().AddColumns(3) - .AddRow( - "[bold green]Windows[/]", - "[bold blue]macOS[/]", - "[bold yellow]Linux[/]")); - - // Styles - table.AddEmptyRow(); - table.AddRow( - "[red]Styles[/]", - "All ansi styles: [bold]bold[/], [dim]dim[/], [italic]italic[/], [underline]underline[/], " - + "[strikethrough]strikethrough[/], [reverse]reverse[/], and even [blink]blink[/]."); - - // Text - table.AddEmptyRow(); - table.AddRow( - new Markup("[red]Text[/]"), - new Markup("Word wrap text. Justify [green]left[/], [yellow]center[/] or [blue]right[/].")); - - table.AddEmptyRow(); - table.AddRow( - Text.Empty, - GetTextGrid()); - - // Markup - table.AddEmptyRow(); - table.AddRow( - "[red]Markup[/]", - "[bold purple]Spectre.Console[/] supports a simple [i]bbcode[/] like " - + "[b]markup[/] for [yellow]color[/], [underline]style[/], and emoji! " - + ":thumbs_up: :red_apple: :ant: :bear: :baguette_bread: :bus:"); - - // Trees and tables - table.AddEmptyRow(); - table.AddRow( - new Markup("[red]Tables and Trees[/]"), - GetTreeTable()); - - // Charts - table.AddRow( - new Markup("[red]Charts[/]"), - new Grid().Collapse().AddColumns(2).AddRow( - new Panel(GetBreakdownChart()).BorderColor(Color.Grey), - new Panel(GetBarChart()).BorderColor(Color.Grey))); - - - // Exceptions - table.AddEmptyRow(); - table.AddRow( - new Markup("[red]Exceptions[/]"), - ExceptionGenerator.GenerateException().GetRenderable()); - - // Much more - table.AddEmptyRow(); - table.AddRow( - "[red]+ Much more![/]", - "Tables, Grids, Trees, Progress bars, Status, Bar charts, Calendars, Figlet, Images, Text prompts, " - + "List boxes, Separators, Pretty exceptions, Canvas, CLI parsing"); - table.AddEmptyRow(); - - // Render the table - AnsiConsole.WriteLine(); - AnsiConsole.Write(table); - } - - private static IRenderable GetColorTable() - { - var colorTable = new Table().Collapse().HideHeaders().NoBorder(); - colorTable.AddColumn("Desc", c => c.PadRight(3)).AddColumn("Colors", c => c.PadRight(0)); - colorTable.AddRow( - new Markup( - "✓ [bold grey]NO_COLOR support[/]\n" + - "✓ [bold green]3-bit color[/]\n" + - "✓ [bold blue]4-bit color[/]\n" + - "✓ [bold purple]8-bit color[/]\n" + - "✓ [bold yellow]Truecolor (16.7 million)[/]\n" + - "✓ [bold aqua]Automatic color conversion[/]"), - new ColorBox(height: 6)); - - return colorTable; - } - - private static IRenderable GetTextGrid() - { - var loremTable = new Grid(); - var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at justo. Maecenas luctus velit et auctor maximus."; - loremTable.AddColumn(new GridColumn().LeftAligned()); - loremTable.AddColumn(new GridColumn().Centered()); - loremTable.AddColumn(new GridColumn().RightAligned()); - loremTable.AddRow($"[green]{lorem}[/]", $"[yellow]{lorem}[/]", $"[blue]{lorem}[/]"); - return loremTable; - } - - private static IRenderable GetTreeTable() - { - var tree = new Tree("📁 src"); - tree.AddNode("📁 foo").AddNode("📄 bar.cs"); - tree.AddNode("📁 baz").AddNode("📁 qux").AddNode("📄 corgi.txt"); - tree.AddNode("📄 waldo.xml"); - - var table = new Table().SimpleBorder().BorderColor(Color.Grey); - table.AddColumn(new TableColumn("Overview")); - table.AddColumn(new TableColumn("").Footer("[grey]3 Files, 225 KiB[/]")); - table.AddRow(new Markup("[yellow]Files[/]"), tree); - - return new Table().RoundedBorder().Collapse().BorderColor(Color.Yellow) - .AddColumn("Foo").AddColumn("Bar") - .AddRow(new Text("Baz"), table) - .AddRow("Qux", "Corgi"); - } - - private static IRenderable GetBarChart() - { - return new BarChart() - .AddItem("Apple", 32, Color.Green) - .AddItem("Oranges", 13, Color.Orange1) - .AddItem("Bananas", 22, Color.Yellow); - } - - private static IRenderable GetBreakdownChart() - { - return new BreakdownChart() - .ShowPercentage() - .FullSize() - .AddItem("C#", 82, Color.Green) - .AddItem("PowerShell", 13, Color.Red) - .AddItem("Bash", 5, Color.Blue); - } -} diff --git a/examples/Console/Showcase/Showcase.csproj b/examples/Console/Showcase/Showcase.csproj deleted file mode 100644 index f624fbe..0000000 --- a/examples/Console/Showcase/Showcase.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Showcase - Demonstration of Spectre.Console. - Misc - - - - - - - diff --git a/examples/Console/Status/Program.cs b/examples/Console/Status/Program.cs deleted file mode 100644 index ee28916..0000000 --- a/examples/Console/Status/Program.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Threading; -using Spectre.Console; - -namespace Status; - -public static class Program -{ - public static void Main() - { - AnsiConsole.Status() - .AutoRefresh(true) - .Spinner(Spinner.Known.Default) - .Start("[yellow]Initializing warp drive[/]", ctx => - { - // Initialize - Thread.Sleep(3000); - WriteLogMessage("Starting gravimetric field displacement manifold"); - Thread.Sleep(1000); - WriteLogMessage("Warming up deuterium chamber"); - Thread.Sleep(2000); - WriteLogMessage("Generating antideuterium"); - - // Warp nacelles - Thread.Sleep(3000); - ctx.Spinner(Spinner.Known.BouncingBar); - ctx.Status("[bold blue]Unfolding warp nacelles[/]"); - WriteLogMessage("Unfolding left warp nacelle"); - Thread.Sleep(2000); - WriteLogMessage("Left warp nacelle [green]online[/]"); - WriteLogMessage("Unfolding right warp nacelle"); - Thread.Sleep(1000); - WriteLogMessage("Right warp nacelle [green]online[/]"); - - // Warp bubble - Thread.Sleep(3000); - ctx.Spinner(Spinner.Known.Star2); - ctx.Status("[bold blue]Generating warp bubble[/]"); - Thread.Sleep(3000); - ctx.Spinner(Spinner.Known.Star); - ctx.Status("[bold blue]Stabilizing warp bubble[/]"); - - // Safety - ctx.Spinner(Spinner.Known.Monkey); - ctx.Status("[bold blue]Performing safety checks[/]"); - WriteLogMessage("Enabling interior dampening"); - Thread.Sleep(2000); - WriteLogMessage("Interior dampening [green]enabled[/]"); - - // Warp! - Thread.Sleep(3000); - ctx.Spinner(Spinner.Known.Moon); - WriteLogMessage("Preparing for warp"); - Thread.Sleep(1000); - for (var warp = 1; warp < 10; warp++) - { - ctx.Status($"[bold blue]Warp {warp}[/]"); - Thread.Sleep(500); - } - }); - - // Done - AnsiConsole.MarkupLine("[bold green]Crusing at Warp 9.8[/]"); - } - - private static void WriteLogMessage(string message) - { - AnsiConsole.MarkupLine($"[grey]LOG:[/] {message}[grey]...[/]"); - } -} diff --git a/examples/Console/Status/Status.csproj b/examples/Console/Status/Status.csproj deleted file mode 100644 index df43d6c..0000000 --- a/examples/Console/Status/Status.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net8.0 - Status - Demonstrates how to show status updates. - Status - - - - - - - - - - - diff --git a/examples/Console/Tables/Program.cs b/examples/Console/Tables/Program.cs deleted file mode 100644 index 751477c..0000000 --- a/examples/Console/Tables/Program.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Spectre.Console; - -namespace Tables; - -public static class Program -{ - public static void Main() - { - AnsiConsole.Write(CreateTable()); - } - - private static Table CreateTable() - { - var simple = new Table() - .Border(TableBorder.Square) - .BorderColor(Color.Red) - .AddColumn(new TableColumn("[u]CDE[/]").Footer("EDC").Centered()) - .AddColumn(new TableColumn("[u]FED[/]").Footer("DEF")) - .AddColumn(new TableColumn("[u]IHG[/]").Footer("GHI")) - .AddRow("Hello", "[red]World![/]", "") - .AddRow("[blue]Bonjour[/]", "[white]le[/]", "[red]monde![/]") - .AddRow("[blue]Hej[/]", "[yellow]Världen![/]", ""); - - var second = new Table() - .Border(TableBorder.Rounded) - .BorderColor(Color.Green) - .AddColumn(new TableColumn("[u]Foo[/]")) - .AddColumn(new TableColumn("[u]Bar[/]")) - .AddColumn(new TableColumn("[u]Baz[/]")) - .AddRow("Hello", "[red]World![/]", "") - .AddRow(simple, new Text("Whaaat"), new Text("Lolz")) - .AddRow("[blue]Hej[/]", "[yellow]Världen![/]", ""); - - return new Table() - .Centered() - .Border(TableBorder.DoubleEdge) - .Title("TABLE [yellow]TITLE[/]") - .Caption("TABLE [yellow]CAPTION[/]") - .AddColumn(new TableColumn(new Panel("[u]ABC[/]").BorderColor(Color.Red)).Footer("[u]FOOTER 1[/]")) - .AddColumn(new TableColumn(new Panel("[u]DEF[/]").BorderColor(Color.Green)).Footer("[u]FOOTER 2[/]")) - .AddColumn(new TableColumn(new Panel("[u]GHI[/]").BorderColor(Color.Blue)).Footer("[u]FOOTER 3[/]")) - .AddRow(new Text("Hello").Centered(), new Markup("[red]World![/]"), Text.Empty) - .AddRow(second, new Text("Whaaat"), new Text("Lol")) - .AddRow(new Markup("[blue]Hej[/]").Centered(), new Markup("[yellow]Världen![/]"), Text.Empty); - } -} diff --git a/examples/Console/Tables/Tables.csproj b/examples/Console/Tables/Tables.csproj deleted file mode 100644 index 9dd65f3..0000000 --- a/examples/Console/Tables/Tables.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Tables - Demonstrates how to render tables in a console. - Widgets - - - - - - - diff --git a/examples/Console/Trees/Program.cs b/examples/Console/Trees/Program.cs deleted file mode 100644 index 7e55066..0000000 --- a/examples/Console/Trees/Program.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Spectre.Console; - -namespace Trees; - -public static class Program -{ - public static void Main() - { - AnsiConsole.WriteLine(); - - // Render the tree - var tree = BuildTree(); - AnsiConsole.Write(tree); - } - - private static Tree BuildTree() - { - // Create the tree - var tree = new Tree("Root") - .Style(Style.Parse("red")) - .Guide(TreeGuide.Line); - - // Add some nodes - var foo = tree.AddNode("[yellow]Foo[/]"); - var table = foo.AddNode(new Table() - .RoundedBorder() - .AddColumn("First") - .AddColumn("Second") - .AddRow("1", "2") - .AddRow("3", "4") - .AddRow("5", "6")); - - table.AddNode("[blue]Baz[/]"); - foo.AddNode("Qux"); - - var bar = tree.AddNode("[yellow]Bar[/]"); - bar.AddNode(new Calendar(2020, 12) - .AddCalendarEvent(2020, 12, 12) - .HideHeader()); - - // Return the tree - return tree; - } -} diff --git a/examples/Console/Trees/Trees.csproj b/examples/Console/Trees/Trees.csproj deleted file mode 100644 index 9011411..0000000 --- a/examples/Console/Trees/Trees.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - Trees - Demonstrates how to render trees in a console. - Widgets - - - - - - - diff --git a/examples/Directory.Build.props b/examples/Directory.Build.props deleted file mode 100644 index 3080093..0000000 --- a/examples/Directory.Build.props +++ /dev/null @@ -1,5 +0,0 @@ - - - false - - \ No newline at end of file diff --git a/examples/Examples.sln b/examples/Examples.sln deleted file mode 100644 index 3166466..0000000 --- a/examples/Examples.sln +++ /dev/null @@ -1,600 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{2571F1BD-6556-4F96-B27B-B6190E1BF13A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cli", "Cli", "{4682E9B7-B54C-419D-B92F-470DA4E5674C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Delegates", "Cli\Delegates\Delegates.csproj", "{E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Demo", "Cli\Demo\Demo.csproj", "{7FC2594D-55D6-4688-AB7D-C9C903414448}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dynamic", "Cli\Dynamic\Dynamic.csproj", "{6EA8F935-A230-4171-8618-FDFABA553292}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Injection", "Cli\Injection\Injection.csproj", "{DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Logging", "Cli\Logging\Logging.csproj", "{37024E79-A857-4EB2-9B50-F724ED34E5EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{DD8EC1B0-F50C-44E4-8399-2D560F95E572}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Borders", "Console\Borders\Borders.csproj", "{036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Calendars", "Console\Calendars\Calendars.csproj", "{C64ADBA3-AED2-4938-8E26-8D6679C395CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Canvas", "Console\Canvas\Canvas.csproj", "{B3393919-26F1-4200-88CD-B71EEAF0EA51}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Charts", "Console\Charts\Charts.csproj", "{0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Colors", "Console\Colors\Colors.csproj", "{18562660-BF70-4EF3-A765-22713BDE2EB1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Columns", "Console\Columns\Columns.csproj", "{264EBC5A-B897-4DA8-9C9E-9A445B1E368C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cursor", "Console\Cursor\Cursor.csproj", "{95BE948B-6102-4453-982D-C7B21E51B582}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emojis", "Console\Emojis\Emojis.csproj", "{6272C7ED-432E-4286-914C-898304A1880E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Exceptions", "Console\Exceptions\Exceptions.csproj", "{20766F18-AEC7-4382-BDE2-0C846F2857AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Figlet", "Console\Figlet\Figlet.csproj", "{1C374C51-6C82-4E71-9701-5F378BC0356C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grids", "Console\Grids\Grids.csproj", "{6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Info", "Console\Info\Info.csproj", "{FBCCBA12-9DBF-403C-9FA4-222CBB080955}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Links", "Console\Links\Links.csproj", "{B9414195-69A2-40E6-B071-751DCCE95AF0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Live", "Console\Live\Live.csproj", "{4AE3AC67-A927-42CC-B286-E0A0735DC7A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Panels", "Console\Panels\Panels.csproj", "{12E7F2CE-E91B-446F-A269-F88FB546B6A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Progress", "Console\Progress\Progress.csproj", "{4554BDF3-0723-4076-B054-616D830942D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prompt", "Console\Prompt\Prompt.csproj", "{85A37D38-54D9-4FA2-B311-CA48BD7AF916}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rules", "Console\Rules\Rules.csproj", "{305E2CE7-9D64-43D7-A26C-11036ACE2A89}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Showcase", "Console\Showcase\Showcase.csproj", "{5BEE8076-59A0-47BB-9CC6-222EC978AE16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Status", "Console\Status\Status.csproj", "{FCE2405B-A215-434B-A47C-32053E27A907}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tables", "Console\Tables\Tables.csproj", "{3D16490A-9EBA-488C-9B3E-6A11FC1E0300}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trees", "Console\Trees\Trees.csproj", "{2BD88288-E05D-4978-B045-17937078E63C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiveTable", "Console\LiveTable\LiveTable.csproj", "{E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Minimal", "Console\Minimal\Minimal.csproj", "{1780A30A-397A-4CC3-B2A0-A385D9081FA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AlternateScreen", "Console\AlternateScreen\AlternateScreen.csproj", "{8A3B636E-5828-438B-A8F4-83811D2704CD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console", "..\src\Spectre.Console\Spectre.Console.csproj", "{0C58FB17-F60A-47AB-84BF-961EC8C06AE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.ImageSharp", "..\src\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj", "{A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paths", "Console\Paths\Paths.csproj", "{65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Cli", "..\src\Spectre.Console.Cli\Spectre.Console.Cli.csproj", "{EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Layout", "Console\Layout\Layout.csproj", "{A9FDE73A-8452-4CA3-B366-3F900597E132}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Json", "Console\Json\Json.csproj", "{ABE3E734-0756-4D5A-B28A-E6E526D9927D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Json", "..\src\Spectre.Console.Json\Spectre.Console.Json.csproj", "{91A5637F-1F89-48B3-A0BA-6CC629807393}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Help", "Cli\Help\Help.csproj", "{BAB490D6-FF8D-462B-B2B0-933384D629DB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Decorations", "Console\Decorations\Decorations.csproj", "{FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|x64.ActiveCfg = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|x64.Build.0 = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|x86.ActiveCfg = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Debug|x86.Build.0 = Debug|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|Any CPU.Build.0 = Release|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|x64.ActiveCfg = Release|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|x64.Build.0 = Release|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|x86.ActiveCfg = Release|Any CPU - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF}.Release|x86.Build.0 = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|x64.ActiveCfg = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|x64.Build.0 = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|x86.ActiveCfg = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Debug|x86.Build.0 = Debug|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|Any CPU.Build.0 = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|x64.ActiveCfg = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|x64.Build.0 = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|x86.ActiveCfg = Release|Any CPU - {7FC2594D-55D6-4688-AB7D-C9C903414448}.Release|x86.Build.0 = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|x64.ActiveCfg = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|x64.Build.0 = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|x86.ActiveCfg = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Debug|x86.Build.0 = Debug|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|Any CPU.Build.0 = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|x64.ActiveCfg = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|x64.Build.0 = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|x86.ActiveCfg = Release|Any CPU - {6EA8F935-A230-4171-8618-FDFABA553292}.Release|x86.Build.0 = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|x64.ActiveCfg = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|x64.Build.0 = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|x86.ActiveCfg = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Debug|x86.Build.0 = Debug|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|Any CPU.Build.0 = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|x64.ActiveCfg = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|x64.Build.0 = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|x86.ActiveCfg = Release|Any CPU - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58}.Release|x86.Build.0 = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|x64.ActiveCfg = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|x64.Build.0 = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|x86.ActiveCfg = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Debug|x86.Build.0 = Debug|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|Any CPU.Build.0 = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|x64.ActiveCfg = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|x64.Build.0 = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|x86.ActiveCfg = Release|Any CPU - {37024E79-A857-4EB2-9B50-F724ED34E5EB}.Release|x86.Build.0 = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|x64.ActiveCfg = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|x64.Build.0 = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Debug|x86.Build.0 = Debug|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|Any CPU.Build.0 = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|x64.ActiveCfg = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|x64.Build.0 = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|x86.ActiveCfg = Release|Any CPU - {DD8EC1B0-F50C-44E4-8399-2D560F95E572}.Release|x86.Build.0 = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|x64.ActiveCfg = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|x64.Build.0 = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|x86.ActiveCfg = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Debug|x86.Build.0 = Debug|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|Any CPU.Build.0 = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|x64.ActiveCfg = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|x64.Build.0 = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|x86.ActiveCfg = Release|Any CPU - {036D547D-1C9B-4E6F-B7E6-2E375E4CAF01}.Release|x86.Build.0 = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|x64.Build.0 = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Debug|x86.Build.0 = Debug|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|Any CPU.Build.0 = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|x64.ActiveCfg = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|x64.Build.0 = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|x86.ActiveCfg = Release|Any CPU - {C64ADBA3-AED2-4938-8E26-8D6679C395CB}.Release|x86.Build.0 = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|x64.ActiveCfg = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|x64.Build.0 = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|x86.ActiveCfg = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Debug|x86.Build.0 = Debug|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|Any CPU.Build.0 = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|x64.ActiveCfg = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|x64.Build.0 = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|x86.ActiveCfg = Release|Any CPU - {B3393919-26F1-4200-88CD-B71EEAF0EA51}.Release|x86.Build.0 = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|x64.ActiveCfg = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|x64.Build.0 = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|x86.ActiveCfg = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Debug|x86.Build.0 = Debug|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|Any CPU.Build.0 = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|x64.ActiveCfg = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|x64.Build.0 = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|x86.ActiveCfg = Release|Any CPU - {0CF6EE4B-4015-4DE0-9D48-1EADCDE296E6}.Release|x86.Build.0 = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|x64.ActiveCfg = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|x64.Build.0 = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|x86.ActiveCfg = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Debug|x86.Build.0 = Debug|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|Any CPU.Build.0 = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|x64.ActiveCfg = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|x64.Build.0 = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|x86.ActiveCfg = Release|Any CPU - {18562660-BF70-4EF3-A765-22713BDE2EB1}.Release|x86.Build.0 = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|x64.ActiveCfg = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|x64.Build.0 = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|x86.ActiveCfg = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Debug|x86.Build.0 = Debug|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|Any CPU.Build.0 = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|x64.ActiveCfg = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|x64.Build.0 = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|x86.ActiveCfg = Release|Any CPU - {264EBC5A-B897-4DA8-9C9E-9A445B1E368C}.Release|x86.Build.0 = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|x64.ActiveCfg = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|x64.Build.0 = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|x86.ActiveCfg = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Debug|x86.Build.0 = Debug|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|Any CPU.Build.0 = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|x64.ActiveCfg = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|x64.Build.0 = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|x86.ActiveCfg = Release|Any CPU - {95BE948B-6102-4453-982D-C7B21E51B582}.Release|x86.Build.0 = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|x64.ActiveCfg = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|x64.Build.0 = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|x86.ActiveCfg = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Debug|x86.Build.0 = Debug|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|Any CPU.Build.0 = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|x64.ActiveCfg = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|x64.Build.0 = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|x86.ActiveCfg = Release|Any CPU - {6272C7ED-432E-4286-914C-898304A1880E}.Release|x86.Build.0 = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|x64.ActiveCfg = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|x64.Build.0 = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Debug|x86.Build.0 = Debug|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|Any CPU.Build.0 = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|x64.ActiveCfg = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|x64.Build.0 = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|x86.ActiveCfg = Release|Any CPU - {20766F18-AEC7-4382-BDE2-0C846F2857AA}.Release|x86.Build.0 = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|x64.ActiveCfg = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|x64.Build.0 = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|x86.ActiveCfg = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Debug|x86.Build.0 = Debug|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|Any CPU.Build.0 = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|x64.ActiveCfg = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|x64.Build.0 = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|x86.ActiveCfg = Release|Any CPU - {1C374C51-6C82-4E71-9701-5F378BC0356C}.Release|x86.Build.0 = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|x64.ActiveCfg = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|x64.Build.0 = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Debug|x86.Build.0 = Debug|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|Any CPU.Build.0 = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|x64.ActiveCfg = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|x64.Build.0 = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|x86.ActiveCfg = Release|Any CPU - {6F7AB11D-D2AE-4D1C-AFEE-7FBA922D6C26}.Release|x86.Build.0 = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|x64.ActiveCfg = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|x64.Build.0 = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|x86.ActiveCfg = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Debug|x86.Build.0 = Debug|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|Any CPU.Build.0 = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|x64.ActiveCfg = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|x64.Build.0 = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|x86.ActiveCfg = Release|Any CPU - {FBCCBA12-9DBF-403C-9FA4-222CBB080955}.Release|x86.Build.0 = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|x64.ActiveCfg = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|x64.Build.0 = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Debug|x86.Build.0 = Debug|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|Any CPU.Build.0 = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|x64.ActiveCfg = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|x64.Build.0 = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|x86.ActiveCfg = Release|Any CPU - {B9414195-69A2-40E6-B071-751DCCE95AF0}.Release|x86.Build.0 = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|x64.ActiveCfg = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|x64.Build.0 = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|x86.ActiveCfg = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Debug|x86.Build.0 = Debug|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|Any CPU.Build.0 = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|x64.ActiveCfg = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|x64.Build.0 = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|x86.ActiveCfg = Release|Any CPU - {4AE3AC67-A927-42CC-B286-E0A0735DC7A2}.Release|x86.Build.0 = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|x64.Build.0 = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Debug|x86.Build.0 = Debug|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|Any CPU.Build.0 = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|x64.ActiveCfg = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|x64.Build.0 = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|x86.ActiveCfg = Release|Any CPU - {12E7F2CE-E91B-446F-A269-F88FB546B6A8}.Release|x86.Build.0 = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|x64.ActiveCfg = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|x64.Build.0 = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|x86.ActiveCfg = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Debug|x86.Build.0 = Debug|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|Any CPU.Build.0 = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|x64.ActiveCfg = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|x64.Build.0 = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|x86.ActiveCfg = Release|Any CPU - {4554BDF3-0723-4076-B054-616D830942D4}.Release|x86.Build.0 = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|x64.ActiveCfg = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|x64.Build.0 = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|x86.ActiveCfg = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Debug|x86.Build.0 = Debug|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|Any CPU.Build.0 = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|x64.ActiveCfg = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|x64.Build.0 = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|x86.ActiveCfg = Release|Any CPU - {85A37D38-54D9-4FA2-B311-CA48BD7AF916}.Release|x86.Build.0 = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|x64.ActiveCfg = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|x64.Build.0 = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|x86.ActiveCfg = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Debug|x86.Build.0 = Debug|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|Any CPU.Build.0 = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|x64.ActiveCfg = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|x64.Build.0 = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|x86.ActiveCfg = Release|Any CPU - {305E2CE7-9D64-43D7-A26C-11036ACE2A89}.Release|x86.Build.0 = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|x64.Build.0 = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Debug|x86.Build.0 = Debug|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|Any CPU.Build.0 = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|x64.ActiveCfg = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|x64.Build.0 = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|x86.ActiveCfg = Release|Any CPU - {5BEE8076-59A0-47BB-9CC6-222EC978AE16}.Release|x86.Build.0 = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|x64.ActiveCfg = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|x64.Build.0 = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|x86.ActiveCfg = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Debug|x86.Build.0 = Debug|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|Any CPU.Build.0 = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|x64.ActiveCfg = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|x64.Build.0 = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|x86.ActiveCfg = Release|Any CPU - {FCE2405B-A215-434B-A47C-32053E27A907}.Release|x86.Build.0 = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|x64.Build.0 = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Debug|x86.Build.0 = Debug|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|Any CPU.Build.0 = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|x64.ActiveCfg = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|x64.Build.0 = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|x86.ActiveCfg = Release|Any CPU - {3D16490A-9EBA-488C-9B3E-6A11FC1E0300}.Release|x86.Build.0 = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|x64.ActiveCfg = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|x64.Build.0 = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|x86.ActiveCfg = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Debug|x86.Build.0 = Debug|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|Any CPU.Build.0 = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|x64.ActiveCfg = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|x64.Build.0 = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|x86.ActiveCfg = Release|Any CPU - {2BD88288-E05D-4978-B045-17937078E63C}.Release|x86.Build.0 = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|x64.Build.0 = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Debug|x86.Build.0 = Debug|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|Any CPU.Build.0 = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|x64.ActiveCfg = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|x64.Build.0 = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|x86.ActiveCfg = Release|Any CPU - {E5FAAFB4-1D0F-4E29-A94F-A647D64AE64E}.Release|x86.Build.0 = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|x64.ActiveCfg = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|x64.Build.0 = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|x86.ActiveCfg = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Debug|x86.Build.0 = Debug|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|Any CPU.Build.0 = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|x64.ActiveCfg = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|x64.Build.0 = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|x86.ActiveCfg = Release|Any CPU - {1780A30A-397A-4CC3-B2A0-A385D9081FA2}.Release|x86.Build.0 = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|x64.Build.0 = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Debug|x86.Build.0 = Debug|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|Any CPU.Build.0 = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|x64.ActiveCfg = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|x64.Build.0 = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|x86.ActiveCfg = Release|Any CPU - {8A3B636E-5828-438B-A8F4-83811D2704CD}.Release|x86.Build.0 = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|x64.Build.0 = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Debug|x86.Build.0 = Debug|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|Any CPU.Build.0 = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|x64.ActiveCfg = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|x64.Build.0 = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|x86.ActiveCfg = Release|Any CPU - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6}.Release|x86.Build.0 = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|x64.ActiveCfg = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|x64.Build.0 = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|x86.ActiveCfg = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Debug|x86.Build.0 = Debug|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|Any CPU.Build.0 = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|x64.ActiveCfg = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|x64.Build.0 = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|x86.ActiveCfg = Release|Any CPU - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7}.Release|x86.Build.0 = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|x64.ActiveCfg = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|x64.Build.0 = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Debug|x86.Build.0 = Debug|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|Any CPU.Build.0 = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|x64.ActiveCfg = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|x64.Build.0 = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|x86.ActiveCfg = Release|Any CPU - {65CB00B0-A3AE-4E8F-A990-4C8C1A232FE2}.Release|x86.Build.0 = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|x64.Build.0 = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Debug|x86.Build.0 = Debug|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|Any CPU.Build.0 = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|x64.ActiveCfg = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|x64.Build.0 = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|x86.ActiveCfg = Release|Any CPU - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7}.Release|x86.Build.0 = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|x64.ActiveCfg = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|x64.Build.0 = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|x86.ActiveCfg = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Debug|x86.Build.0 = Debug|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|Any CPU.Build.0 = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|x64.ActiveCfg = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|x64.Build.0 = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|x86.ActiveCfg = Release|Any CPU - {A9FDE73A-8452-4CA3-B366-3F900597E132}.Release|x86.Build.0 = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|x64.ActiveCfg = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|x64.Build.0 = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|x86.ActiveCfg = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Debug|x86.Build.0 = Debug|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|Any CPU.Build.0 = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|x64.ActiveCfg = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|x64.Build.0 = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|x86.ActiveCfg = Release|Any CPU - {ABE3E734-0756-4D5A-B28A-E6E526D9927D}.Release|x86.Build.0 = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|x64.ActiveCfg = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|x64.Build.0 = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|x86.ActiveCfg = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Debug|x86.Build.0 = Debug|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|Any CPU.Build.0 = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|x64.ActiveCfg = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|x64.Build.0 = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|x86.ActiveCfg = Release|Any CPU - {91A5637F-1F89-48B3-A0BA-6CC629807393}.Release|x86.Build.0 = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|x64.ActiveCfg = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|x64.Build.0 = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|x86.ActiveCfg = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Debug|x86.Build.0 = Debug|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|Any CPU.Build.0 = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|x64.ActiveCfg = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|x64.Build.0 = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|x86.ActiveCfg = Release|Any CPU - {BAB490D6-FF8D-462B-B2B0-933384D629DB}.Release|x86.Build.0 = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|x64.ActiveCfg = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|x64.Build.0 = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|x86.ActiveCfg = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Debug|x86.Build.0 = Debug|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|Any CPU.Build.0 = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|x64.ActiveCfg = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|x64.Build.0 = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|x86.ActiveCfg = Release|Any CPU - {FC5852F1-E01F-4DF7-9B49-CA19A9EE670F}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E2C9023A-D24F-4F5D-8411-5E2FEA642FEF} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - {7FC2594D-55D6-4688-AB7D-C9C903414448} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - {6EA8F935-A230-4171-8618-FDFABA553292} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - {DEB88B47-658E-4FCB-BD1D-05C99E7EFA58} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - {37024E79-A857-4EB2-9B50-F724ED34E5EB} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - {DD8EC1B0-F50C-44E4-8399-2D560F95E572} = {2571F1BD-6556-4F96-B27B-B6190E1BF13A} - {0C58FB17-F60A-47AB-84BF-961EC8C06AE6} = {2571F1BD-6556-4F96-B27B-B6190E1BF13A} - {A127CE7D-A5A7-4745-9809-EBD7CB12CEE7} = {2571F1BD-6556-4F96-B27B-B6190E1BF13A} - {EFAADF6A-C77D-41EC-83F5-BBB4FFC5A6D7} = {2571F1BD-6556-4F96-B27B-B6190E1BF13A} - {91A5637F-1F89-48B3-A0BA-6CC629807393} = {2571F1BD-6556-4F96-B27B-B6190E1BF13A} - {BAB490D6-FF8D-462B-B2B0-933384D629DB} = {4682E9B7-B54C-419D-B92F-470DA4E5674C} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {3EE724C5-CAB4-410D-AC63-8D4260EF83ED} - EndGlobalSection -EndGlobal diff --git a/examples/Shared/ColorBox.cs b/examples/Shared/ColorBox.cs deleted file mode 100644 index 7438c9d..0000000 --- a/examples/Shared/ColorBox.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using System.Collections.Generic; -using Spectre.Console.Rendering; - -namespace Spectre.Console.Examples; - -public sealed class ColorBox : Renderable -{ - private readonly int _height; - private int? _width; - - public ColorBox(int height) - { - _height = height; - } - - public ColorBox(int width, int height) - : this(height) - { - _width = width; - } - - protected override Measurement Measure(RenderOptions options, int maxWidth) - { - return new Measurement(1, GetWidth(maxWidth)); - } - - protected override IEnumerable Render(RenderOptions options, int maxWidth) - { - maxWidth = GetWidth(maxWidth); - - for (var y = 0; y < _height; y++) - { - for (var x = 0; x < maxWidth; x++) - { - var h = x / (float)maxWidth; - var l = 0.1f + ((y / (float)_height) * 0.7f); - var (r1, g1, b1) = ColorFromHSL(h, l, 1.0f); - var (r2, g2, b2) = ColorFromHSL(h, l + (0.7f / 10), 1.0f); - - var background = new Color((byte)(r1 * 255), (byte)(g1 * 255), (byte)(b1 * 255)); - var foreground = new Color((byte)(r2 * 255), (byte)(g2 * 255), (byte)(b2 * 255)); - - yield return new Segment("▄", new Style(foreground, background)); - } - - yield return Segment.LineBreak; - } - } - - private int GetWidth(int maxWidth) - { - var width = maxWidth; - if (_width != null) - { - width = Math.Min(_width.Value, width); - } - - return width; - } - - private static (float, float, float) ColorFromHSL(double h, double l, double s) - { - double r = 0, g = 0, b = 0; - if (l != 0) - { - if (s == 0) - { - r = g = b = l; - } - else - { - double temp2; - if (l < 0.5) - { - temp2 = l * (1.0 + s); - } - else - { - temp2 = l + s - (l * s); - } - - var temp1 = 2.0 * l - temp2; - - r = GetColorComponent(temp1, temp2, h + 1.0 / 3.0); - g = GetColorComponent(temp1, temp2, h); - b = GetColorComponent(temp1, temp2, h - 1.0 / 3.0); - } - } - - return ((float)r, (float)g, (float)b); - - } - - private static double GetColorComponent(double temp1, double temp2, double temp3) - { - if (temp3 < 0.0) - { - temp3 += 1.0; - } - else if (temp3 > 1.0) - { - temp3 -= 1.0; - } - - if (temp3 < 1.0 / 6.0) - { - return temp1 + (temp2 - temp1) * 6.0 * temp3; - } - else if (temp3 < 0.5) - { - return temp2; - } - else if (temp3 < 2.0 / 3.0) - { - return temp1 + ((temp2 - temp1) * ((2.0 / 3.0) - temp3) * 6.0); - } - else - { - return temp1; - } - } -} diff --git a/examples/Shared/Extensions/ColorExtensions.cs b/examples/Shared/Extensions/ColorExtensions.cs deleted file mode 100644 index cdc6657..0000000 --- a/examples/Shared/Extensions/ColorExtensions.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Spectre.Console.Examples; - -public static class ColorExtensions -{ - public static Color GetInvertedColor(this Color color) - { - return GetLuminance(color) < 140 ? Color.White : Color.Black; - } - - private static float GetLuminance(this Color color) - { - return (float)((0.2126 * color.R) + (0.7152 * color.G) + (0.0722 * color.B)); - } -} diff --git a/examples/Shared/Shared.csproj b/examples/Shared/Shared.csproj deleted file mode 100644 index 811bcd7..0000000 --- a/examples/Shared/Shared.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net8.0 - false - enable - - - - - - - - diff --git a/resources/nuget/Spectre.Console.Cli.md b/resources/nuget/Spectre.Console.Cli.md new file mode 100644 index 0000000..898df57 --- /dev/null +++ b/resources/nuget/Spectre.Console.Cli.md @@ -0,0 +1,5 @@ +# `Spectre.Console.Cli` + +`Spectre.Console.Cli` is a modern library for parsing command line arguments. While it's extremely opinionated in what it does, it tries to follow established industry conventions, and draws its inspiration from applications you use everyday. + +Detailed instructions for using this library is located on the project website, https://spectreconsole.net \ No newline at end of file diff --git a/resources/nuget/Spectre.Console.ImageSharp.md b/resources/nuget/Spectre.Console.ImageSharp.md new file mode 100644 index 0000000..2203159 --- /dev/null +++ b/resources/nuget/Spectre.Console.ImageSharp.md @@ -0,0 +1,5 @@ +# `Spectre.Console.ImageSharp` + +A .NET library that extends [Spectre.Console](https://github.com/spectreconsole/spectre.console) with ImageSharp superpowers. + +Detailed instructions for using `Spectre.Console.ImageSharp` are located on the project website, https://spectreconsole.net/widgets/canvas-image \ No newline at end of file diff --git a/resources/nuget/Spectre.Console.Json.md b/resources/nuget/Spectre.Console.Json.md new file mode 100644 index 0000000..e03bf9f --- /dev/null +++ b/resources/nuget/Spectre.Console.Json.md @@ -0,0 +1,5 @@ +# `Spectre.Console.Json` + +A .NET library that extends [Spectre.Console](https://github.com/spectreconsole/spectre.console) with JSON superpowers. + +Detailed instructions for using this library is located on the project website, https://spectreconsole.net/widgets/json \ No newline at end of file diff --git a/resources/nuget/Spectre.Console.Testing.md b/resources/nuget/Spectre.Console.Testing.md new file mode 100644 index 0000000..7dc3537 --- /dev/null +++ b/resources/nuget/Spectre.Console.Testing.md @@ -0,0 +1,5 @@ +# `Spectre.Console.Testing` + +A .NET library that makes it easier to write unit tests for [Spectre.Console](https://github.com/spectreconsole/spectre.console) applications. + +Detailed instructions for using this library is located on the project website, https://spectreconsole.net \ No newline at end of file diff --git a/resources/nuget/Spectre.Console.md b/resources/nuget/Spectre.Console.md new file mode 100644 index 0000000..a46f26c --- /dev/null +++ b/resources/nuget/Spectre.Console.md @@ -0,0 +1,5 @@ +# `Spectre.Console` + +A .NET library that makes it easier to create beautiful, cross platform, console applications. It is heavily inspired by the excellent Python library, [Rich](https://github.com/willmcgugan/rich). + +Detailed instructions for using this library is located on the project website, https://spectreconsole.net \ No newline at end of file diff --git a/resources/nuget/logo.png b/resources/nuget/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..eebe8db61da28607c5777b1438f29e95e052c74e GIT binary patch literal 9754 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 literal 0 HcmV?d00001 diff --git a/resources/scripts/Generator/Generator.csproj b/resources/scripts/Generator/Generator.csproj index 64be45b..d2c43aa 100644 --- a/resources/scripts/Generator/Generator.csproj +++ b/resources/scripts/Generator/Generator.csproj @@ -43,17 +43,17 @@ - - + + - - + + - - + + diff --git a/resources/scripts/Generator/Generator.sln b/resources/scripts/Generator/Generator.sln index daea430..894e130 100644 --- a/resources/scripts/Generator/Generator.sln +++ b/resources/scripts/Generator/Generator.sln @@ -7,13 +7,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Generator", "Generator.cspr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console", "..\..\..\src\Spectre.Console\Spectre.Console.csproj", "{F75B882A-06DB-426B-9580-A7302D32E684}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.ImageSharp", "..\..\..\src\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj", "{112A37CB-1EFE-4A90-BD5B-5437038BE276}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.ImageSharp", "..\..\..\src\Extensions\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj", "{112A37CB-1EFE-4A90-BD5B-5437038BE276}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{CFE7445D-F971-429D-B6E6-9E68456AE00F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Cli", "..\..\..\src\Spectre.Console.Cli\Spectre.Console.Cli.csproj", "{18A3F32D-FECD-463B-A194-6EE74EA9E5EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spectre.Console.Json", "..\..\..\src\Spectre.Console.Json\Spectre.Console.Json.csproj", "{6C96C268-CEEE-478A-A36F-E1450AC33B73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spectre.Console.Json", "..\..\..\src\Extensions\Spectre.Console.Json\Spectre.Console.Json.csproj", "{6C96C268-CEEE-478A-A36F-E1450AC33B73}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/.editorconfig b/src/.editorconfig index a28cf1d..e01b77d 100644 --- a/src/.editorconfig +++ b/src/.editorconfig @@ -98,4 +98,7 @@ dotnet_diagnostic.IDE0044.severity = warning dotnet_diagnostic.RCS1047.severity = none # RCS1090: Call 'ConfigureAwait(false)'. -dotnet_diagnostic.RCS1090.severity = warning \ No newline at end of file +dotnet_diagnostic.RCS1090.severity = warning + +# The file header is missing or not located at the top of the file +dotnet_diagnostic.SA1633.severity = none \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d8f66ca..a3df954 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -7,19 +7,35 @@ true true false + enable + $(NoWarn);SA1633 true + + + true + \ + Properties/Package/Logo.png + + + true + \README.md + Properties/Package/README.md + + + A library that makes it easier to create beautiful console applications. Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray git https://github.com/spectreconsole/spectre.console - small-logo.png + logo.png + README.md True https://github.com/spectreconsole/spectre.console MIT @@ -31,14 +47,18 @@ true + + + + - - - + + + All - + All diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props new file mode 100644 index 0000000..b98339b --- /dev/null +++ b/src/Directory.Packages.props @@ -0,0 +1,30 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Spectre.Console.ImageSharp/CanvasImage.cs b/src/Extensions/Spectre.Console.ImageSharp/CanvasImage.cs similarity index 100% rename from src/Spectre.Console.ImageSharp/CanvasImage.cs rename to src/Extensions/Spectre.Console.ImageSharp/CanvasImage.cs diff --git a/src/Spectre.Console.ImageSharp/CanvasImageExtensions.cs b/src/Extensions/Spectre.Console.ImageSharp/CanvasImageExtensions.cs similarity index 100% rename from src/Spectre.Console.ImageSharp/CanvasImageExtensions.cs rename to src/Extensions/Spectre.Console.ImageSharp/CanvasImageExtensions.cs diff --git a/src/Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj b/src/Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj new file mode 100644 index 0000000..0241227 --- /dev/null +++ b/src/Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj @@ -0,0 +1,17 @@ + + + + net8.0;net7.0;net6.0 + true + A library that extends Spectre.Console with ImageSharp superpowers. + + + + + + + + + + + diff --git a/src/Spectre.Console.Json/IJsonParser.cs b/src/Extensions/Spectre.Console.Json/IJsonParser.cs similarity index 100% rename from src/Spectre.Console.Json/IJsonParser.cs rename to src/Extensions/Spectre.Console.Json/IJsonParser.cs diff --git a/src/Spectre.Console.Json/JsonBuilder.cs b/src/Extensions/Spectre.Console.Json/JsonBuilder.cs similarity index 100% rename from src/Spectre.Console.Json/JsonBuilder.cs rename to src/Extensions/Spectre.Console.Json/JsonBuilder.cs diff --git a/src/Spectre.Console.Json/JsonParser.cs b/src/Extensions/Spectre.Console.Json/JsonParser.cs similarity index 100% rename from src/Spectre.Console.Json/JsonParser.cs rename to src/Extensions/Spectre.Console.Json/JsonParser.cs diff --git a/src/Spectre.Console.Json/JsonText.cs b/src/Extensions/Spectre.Console.Json/JsonText.cs similarity index 100% rename from src/Spectre.Console.Json/JsonText.cs rename to src/Extensions/Spectre.Console.Json/JsonText.cs diff --git a/src/Spectre.Console.Json/JsonTextExtensions.cs b/src/Extensions/Spectre.Console.Json/JsonTextExtensions.cs similarity index 100% rename from src/Spectre.Console.Json/JsonTextExtensions.cs rename to src/Extensions/Spectre.Console.Json/JsonTextExtensions.cs diff --git a/src/Spectre.Console.Json/JsonTextStyles.cs b/src/Extensions/Spectre.Console.Json/JsonTextStyles.cs similarity index 100% rename from src/Spectre.Console.Json/JsonTextStyles.cs rename to src/Extensions/Spectre.Console.Json/JsonTextStyles.cs diff --git a/src/Spectre.Console.Json/JsonToken.cs b/src/Extensions/Spectre.Console.Json/JsonToken.cs similarity index 100% rename from src/Spectre.Console.Json/JsonToken.cs rename to src/Extensions/Spectre.Console.Json/JsonToken.cs diff --git a/src/Spectre.Console.Json/JsonTokenReader.cs b/src/Extensions/Spectre.Console.Json/JsonTokenReader.cs similarity index 100% rename from src/Spectre.Console.Json/JsonTokenReader.cs rename to src/Extensions/Spectre.Console.Json/JsonTokenReader.cs diff --git a/src/Spectre.Console.Json/JsonTokenType.cs b/src/Extensions/Spectre.Console.Json/JsonTokenType.cs similarity index 100% rename from src/Spectre.Console.Json/JsonTokenType.cs rename to src/Extensions/Spectre.Console.Json/JsonTokenType.cs diff --git a/src/Spectre.Console.Json/JsonTokenizer.cs b/src/Extensions/Spectre.Console.Json/JsonTokenizer.cs similarity index 100% rename from src/Spectre.Console.Json/JsonTokenizer.cs rename to src/Extensions/Spectre.Console.Json/JsonTokenizer.cs diff --git a/src/Spectre.Console.Json/Properties/Usings.cs b/src/Extensions/Spectre.Console.Json/Properties/Usings.cs similarity index 100% rename from src/Spectre.Console.Json/Properties/Usings.cs rename to src/Extensions/Spectre.Console.Json/Properties/Usings.cs diff --git a/src/Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj b/src/Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj new file mode 100644 index 0000000..1c75fef --- /dev/null +++ b/src/Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj @@ -0,0 +1,20 @@ + + + + net8.0;net7.0;net6.0;netstandard2.0 + true + true + A library that extends Spectre.Console with JSON superpowers. + + + + + + + + + + + + + diff --git a/src/Spectre.Console.Json/Syntax/JsonArray.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonArray.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonArray.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonArray.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonBoolean.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonBoolean.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonBoolean.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonBoolean.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonMember.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonMember.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonMember.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonMember.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonNull.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonNull.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonNull.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonNull.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonNumber.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonNumber.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonNumber.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonNumber.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonObject.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonObject.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonObject.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonObject.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonString.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonString.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonString.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonString.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonSyntax.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonSyntax.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonSyntax.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonSyntax.cs diff --git a/src/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs b/src/Extensions/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs similarity index 100% rename from src/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs rename to src/Extensions/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs diff --git a/src/Spectre.Console.Analyzer.Sandbox/Program.cs b/src/Spectre.Console.Analyzer.Sandbox/Program.cs deleted file mode 100644 index 65463c4..0000000 --- a/src/Spectre.Console.Analyzer.Sandbox/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Spectre.Console.Analyzer.Sandbox; - -/// -/// Sample sandbox for testing out analyzers. -/// -public static class Program -{ - /// - /// The program's entry point. - /// - public static void Main() - { - AnsiConsole.WriteLine("Project is set up with a reference to Spectre.Console.Analyzer"); - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer.Sandbox/Spectre.Console.Analyzer.Sandbox.csproj b/src/Spectre.Console.Analyzer.Sandbox/Spectre.Console.Analyzer.Sandbox.csproj deleted file mode 100644 index fe85274..0000000 --- a/src/Spectre.Console.Analyzer.Sandbox/Spectre.Console.Analyzer.Sandbox.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - - - - - - - - - - diff --git a/src/Spectre.Console.Analyzer.sln b/src/Spectre.Console.Analyzer.sln deleted file mode 100644 index 0d2c821..0000000 --- a/src/Spectre.Console.Analyzer.sln +++ /dev/null @@ -1,79 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Analyzer", "Spectre.Console.Analyzer\Spectre.Console.Analyzer.csproj", "{18178142-A80D-424F-882D-DB0F787210BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Analyzer.Sandbox", "Spectre.Console.Analyzer.Sandbox\Spectre.Console.Analyzer.Sandbox.csproj", "{44D2E280-8FCD-4FC1-9133-F61E344FD6A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Analyzer.Tests", "..\test\Spectre.Console.Analyzer.Tests\Spectre.Console.Analyzer.Tests.csproj", "{609D5D1B-D904-4A31-B237-A04B49910166}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console", "Spectre.Console\Spectre.Console.csproj", "{6BFF310F-9601-4E5D-BC80-118AC708D72A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|x64.ActiveCfg = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|x64.Build.0 = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|x86.ActiveCfg = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Debug|x86.Build.0 = Debug|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|Any CPU.Build.0 = Release|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|x64.ActiveCfg = Release|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|x64.Build.0 = Release|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|x86.ActiveCfg = Release|Any CPU - {18178142-A80D-424F-882D-DB0F787210BD}.Release|x86.Build.0 = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|x64.ActiveCfg = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|x64.Build.0 = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|x86.ActiveCfg = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Debug|x86.Build.0 = Debug|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|Any CPU.Build.0 = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|x64.ActiveCfg = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|x64.Build.0 = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|x86.ActiveCfg = Release|Any CPU - {44D2E280-8FCD-4FC1-9133-F61E344FD6A6}.Release|x86.Build.0 = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|Any CPU.Build.0 = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|x64.ActiveCfg = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|x64.Build.0 = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|x86.ActiveCfg = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Debug|x86.Build.0 = Debug|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|Any CPU.ActiveCfg = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|Any CPU.Build.0 = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|x64.ActiveCfg = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|x64.Build.0 = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|x86.ActiveCfg = Release|Any CPU - {609D5D1B-D904-4A31-B237-A04B49910166}.Release|x86.Build.0 = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|x64.ActiveCfg = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|x64.Build.0 = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|x86.ActiveCfg = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Debug|x86.Build.0 = Debug|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|Any CPU.Build.0 = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|x64.ActiveCfg = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|x64.Build.0 = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|x86.ActiveCfg = Release|Any CPU - {6BFF310F-9601-4E5D-BC80-118AC708D72A}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {3BABBA82-B60D-45CE-9C56-8B833474DD3C} - EndGlobalSection -EndGlobal diff --git a/src/Spectre.Console.Analyzer.v3.ncrunchsolution b/src/Spectre.Console.Analyzer.v3.ncrunchsolution deleted file mode 100644 index 10420ac..0000000 --- a/src/Spectre.Console.Analyzer.v3.ncrunchsolution +++ /dev/null @@ -1,6 +0,0 @@ - - - True - True - - \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Analyzers/FavorInstanceAnsiConsoleOverStaticAnalyzer.cs b/src/Spectre.Console.Analyzer/Analyzers/FavorInstanceAnsiConsoleOverStaticAnalyzer.cs deleted file mode 100644 index 379103b..0000000 --- a/src/Spectre.Console.Analyzer/Analyzers/FavorInstanceAnsiConsoleOverStaticAnalyzer.cs +++ /dev/null @@ -1,90 +0,0 @@ -namespace Spectre.Console.Analyzer; - -/// -/// Analyzer to suggest using available instances of AnsiConsole over the static methods. -/// -[DiagnosticAnalyzer(LanguageNames.CSharp)] -public class FavorInstanceAnsiConsoleOverStaticAnalyzer : SpectreAnalyzer -{ - private static readonly DiagnosticDescriptor _diagnosticDescriptor = - Descriptors.S1010_FavorInstanceAnsiConsoleOverStatic; - - /// - public override ImmutableArray SupportedDiagnostics => - ImmutableArray.Create(_diagnosticDescriptor); - - /// - protected override void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext) - { - var ansiConsoleType = compilationStartContext.Compilation.GetTypeByMetadataName("Spectre.Console.AnsiConsole"); - if (ansiConsoleType == null) - { - return; - } - - compilationStartContext.RegisterOperationAction( - context => - { - // if this operation isn't an invocation against one of the System.Console methods - // defined in _methods then we can safely stop analyzing and return; - var invocationOperation = (IInvocationOperation)context.Operation; - if (!SymbolEqualityComparer.Default.Equals(invocationOperation.TargetMethod.ContainingType, ansiConsoleType)) - { - return; - } - - // if we aren't in a method then it might be too complex for us to handle. - if (!invocationOperation.Syntax.Ancestors().OfType().Any()) - { - return; - } - - if (!HasFieldAnsiConsole(invocationOperation.Syntax) && - !HasParameterAnsiConsole(invocationOperation.Syntax)) - { - return; - } - - var methodSymbol = invocationOperation.TargetMethod; - - var displayString = SymbolDisplay.ToDisplayString( - methodSymbol, - SymbolDisplayFormat.CSharpShortErrorMessageFormat - .WithParameterOptions(SymbolDisplayParameterOptions.None) - .WithGenericsOptions(SymbolDisplayGenericsOptions.None)); - - context.ReportDiagnostic( - Diagnostic.Create( - _diagnosticDescriptor, - invocationOperation.Syntax.GetLocation(), - displayString)); - }, OperationKind.Invocation); - } - - private static bool HasParameterAnsiConsole(SyntaxNode syntaxNode) - { - return syntaxNode - .Ancestors().OfType() - .First() - .ParameterList.Parameters - .Any(i => i.Type?.NormalizeWhitespace()?.ToString() == "IAnsiConsole"); - } - - private static bool HasFieldAnsiConsole(SyntaxNode syntaxNode) - { - var isStatic = syntaxNode - .Ancestors() - .OfType() - .First() - .Modifiers.Any(i => i.IsKind(SyntaxKind.StaticKeyword)); - - return syntaxNode - .Ancestors().OfType() - .First() - .Members - .OfType() - .Any(i => - i.Declaration.Type.NormalizeWhitespace().ToString() == "IAnsiConsole" && - (!isStatic ^ i.Modifiers.Any(modifier => modifier.IsKind(SyntaxKind.StaticKeyword)))); - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Analyzers/NoConcurrentLiveRenderablesAnalyzer.cs b/src/Spectre.Console.Analyzer/Analyzers/NoConcurrentLiveRenderablesAnalyzer.cs deleted file mode 100644 index bae7363..0000000 --- a/src/Spectre.Console.Analyzer/Analyzers/NoConcurrentLiveRenderablesAnalyzer.cs +++ /dev/null @@ -1,74 +0,0 @@ -namespace Spectre.Console.Analyzer; - -/// -/// Analyzer to detect calls to live renderables within a live renderable context. -/// -[DiagnosticAnalyzer(LanguageNames.CSharp)] -[Shared] -public class NoConcurrentLiveRenderablesAnalyzer : SpectreAnalyzer -{ - private static readonly DiagnosticDescriptor _diagnosticDescriptor = - Descriptors.S1020_AvoidConcurrentCallsToMultipleLiveRenderables; - - /// - public override ImmutableArray SupportedDiagnostics => - ImmutableArray.Create(_diagnosticDescriptor); - - /// - protected override void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext) - { - var liveTypes = Constants.LiveRenderables - .Select(i => compilationStartContext.Compilation.GetTypeByMetadataName(i)) - .Where(i => i != null) - .ToImmutableArray(); - - if (liveTypes.Length == 0) - { - return; - } - - compilationStartContext.RegisterOperationAction( - context => - { - var invocationOperation = (IInvocationOperation)context.Operation; - var methodSymbol = invocationOperation.TargetMethod; - - const string StartMethod = "Start"; - if (methodSymbol.Name != StartMethod) - { - return; - } - - if (liveTypes.All(i => !SymbolEqualityComparer.Default.Equals(i, methodSymbol.ContainingType))) - { - return; - } - - var model = context.Operation.SemanticModel!; - var parentInvocations = invocationOperation - .Syntax.Ancestors() - .OfType() - .Select(i => model.GetOperation(i, context.CancellationToken)) - .OfType() - .ToList(); - - if (parentInvocations.All(parent => - parent.TargetMethod.Name != StartMethod || !liveTypes.Contains(parent.TargetMethod.ContainingType, SymbolEqualityComparer.Default))) - { - return; - } - - var displayString = SymbolDisplay.ToDisplayString( - methodSymbol, - SymbolDisplayFormat.CSharpShortErrorMessageFormat - .WithParameterOptions(SymbolDisplayParameterOptions.None) - .WithGenericsOptions(SymbolDisplayGenericsOptions.None)); - - context.ReportDiagnostic( - Diagnostic.Create( - _diagnosticDescriptor, - invocationOperation.Syntax.GetLocation(), - displayString)); - }, OperationKind.Invocation); - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Analyzers/NoPromptsDuringLiveRenderablesAnalyzer.cs b/src/Spectre.Console.Analyzer/Analyzers/NoPromptsDuringLiveRenderablesAnalyzer.cs deleted file mode 100644 index 749716e..0000000 --- a/src/Spectre.Console.Analyzer/Analyzers/NoPromptsDuringLiveRenderablesAnalyzer.cs +++ /dev/null @@ -1,80 +0,0 @@ -namespace Spectre.Console.Analyzer; - -/// -/// Analyzer to detect calls to live renderables within a live renderable context. -/// -[DiagnosticAnalyzer(LanguageNames.CSharp)] -[Shared] -public class NoPromptsDuringLiveRenderablesAnalyzer : SpectreAnalyzer -{ - private static readonly DiagnosticDescriptor _diagnosticDescriptor = - Descriptors.S1021_AvoidPromptCallsDuringLiveRenderables; - - /// - public override ImmutableArray SupportedDiagnostics => - ImmutableArray.Create(_diagnosticDescriptor); - - /// - protected override void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext) - { - var ansiConsoleType = compilationStartContext.Compilation.GetTypeByMetadataName("Spectre.Console.AnsiConsole"); - var ansiConsoleExtensionsType = compilationStartContext.Compilation.GetTypeByMetadataName("Spectre.Console.AnsiConsoleExtensions"); - - if (ansiConsoleType is null && ansiConsoleExtensionsType is null) - { - return; - } - - compilationStartContext.RegisterOperationAction( - context => - { - // if this operation isn't an invocation against one of the System.Console methods - // defined in _methods then we can safely stop analyzing and return; - var invocationOperation = (IInvocationOperation)context.Operation; - var methodSymbol = invocationOperation.TargetMethod; - - var promptMethods = ImmutableArray.Create("Ask", "Confirm", "Prompt"); - if (!promptMethods.Contains(methodSymbol.Name)) - { - return; - } - - if (!SymbolEqualityComparer.Default.Equals(methodSymbol.ContainingType, ansiConsoleType) && - !SymbolEqualityComparer.Default.Equals(methodSymbol.ContainingType, ansiConsoleExtensionsType)) - { - return; - } - - var model = context.Operation.SemanticModel!; - var parentInvocations = invocationOperation - .Syntax.Ancestors() - .OfType() - .Select(i => model.GetOperation(i, context.CancellationToken)) - .OfType() - .ToList(); - - var liveTypes = Constants.LiveRenderables - .Select(i => context.Compilation.GetTypeByMetadataName(i)) - .ToImmutableArray(); - - if (parentInvocations.All(parent => - parent.TargetMethod.Name != "Start" || - !liveTypes.Contains(parent.TargetMethod.ContainingType, SymbolEqualityComparer.Default))) - { - return; - } - - var displayString = SymbolDisplay.ToDisplayString( - methodSymbol, - SymbolDisplayFormat.CSharpShortErrorMessageFormat - .WithParameterOptions(SymbolDisplayParameterOptions.None) - .WithGenericsOptions(SymbolDisplayGenericsOptions.None)); - - context.ReportDiagnostic( - Diagnostic.Create( - _diagnosticDescriptor, - invocationOperation.Syntax.GetLocation(), - displayString)); - }, OperationKind.Invocation); - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Analyzers/SpectreAnalyzer.cs b/src/Spectre.Console.Analyzer/Analyzers/SpectreAnalyzer.cs deleted file mode 100644 index 54436c8..0000000 --- a/src/Spectre.Console.Analyzer/Analyzers/SpectreAnalyzer.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace Spectre.Console.Analyzer; - -/// -/// Base class for Spectre analyzers. -/// -public abstract class SpectreAnalyzer : DiagnosticAnalyzer -{ - /// - public override void Initialize(AnalysisContext context) - { - context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics); - context.EnableConcurrentExecution(); - - context.RegisterCompilationStartAction(AnalyzeCompilation); - } - - /// - /// Analyze compilation. - /// - /// Compilation Start Analysis Context. - protected abstract void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext); -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzer.cs b/src/Spectre.Console.Analyzer/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzer.cs deleted file mode 100644 index 9f02739..0000000 --- a/src/Spectre.Console.Analyzer/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzer.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace Spectre.Console.Analyzer; - -/// -/// Analyzer to enforce the use of AnsiConsole over System.Console for known methods. -/// -[DiagnosticAnalyzer(LanguageNames.CSharp)] -public class UseSpectreInsteadOfSystemConsoleAnalyzer : SpectreAnalyzer -{ - private static readonly DiagnosticDescriptor _diagnosticDescriptor = - Descriptors.S1000_UseAnsiConsoleOverSystemConsole; - - private static readonly string[] _methods = { "WriteLine", "Write" }; - - /// - public override ImmutableArray SupportedDiagnostics => - ImmutableArray.Create(_diagnosticDescriptor); - - /// - protected override void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext) - { - var systemConsoleType = compilationStartContext.Compilation.GetTypeByMetadataName("System.Console"); - var spectreConsoleType = compilationStartContext.Compilation.GetTypeByMetadataName("Spectre.Console.AnsiConsole"); - if (systemConsoleType == null || spectreConsoleType == null) - { - return; - } - - compilationStartContext.RegisterOperationAction( - context => - { - // if this operation isn't an invocation against one of the System.Console methods - // defined in _methods then we can safely stop analyzing and return; - var invocationOperation = (IInvocationOperation)context.Operation; - - var methodName = System.Array.Find(_methods, i => i.Equals(invocationOperation.TargetMethod.Name)); - if (methodName == null) - { - return; - } - - if (!SymbolEqualityComparer.Default.Equals(invocationOperation.TargetMethod.ContainingType, systemConsoleType)) - { - return; - } - - var methodSymbol = invocationOperation.TargetMethod; - - var displayString = SymbolDisplay.ToDisplayString( - methodSymbol, - SymbolDisplayFormat.CSharpShortErrorMessageFormat - .WithParameterOptions(SymbolDisplayParameterOptions.None) - .WithGenericsOptions(SymbolDisplayGenericsOptions.None)); - - context.ReportDiagnostic( - Diagnostic.Create( - _diagnosticDescriptor, - invocationOperation.Syntax.GetLocation(), - displayString)); - }, OperationKind.Invocation); - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Constants.cs b/src/Spectre.Console.Analyzer/Constants.cs deleted file mode 100644 index e617071..0000000 --- a/src/Spectre.Console.Analyzer/Constants.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Spectre.Console.Analyzer; - -internal static class Constants -{ - internal const string StaticInstance = "AnsiConsole"; - internal const string SpectreConsole = "Spectre.Console"; - - internal static readonly string[] LiveRenderables = - { - "Spectre.Console.LiveDisplay", - "Spectre.Console.Progress", - "Spectre.Console.Status", - }; -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Descriptors.cs b/src/Spectre.Console.Analyzer/Descriptors.cs deleted file mode 100644 index 592a6df..0000000 --- a/src/Spectre.Console.Analyzer/Descriptors.cs +++ /dev/null @@ -1,76 +0,0 @@ -using static Microsoft.CodeAnalysis.DiagnosticSeverity; -using static Spectre.Console.Analyzer.Descriptors.Category; - -namespace Spectre.Console.Analyzer; - -/// -/// Code analysis descriptors. -/// -public static class Descriptors -{ - internal enum Category - { - Usage, // 1xxx - } - - private static readonly ConcurrentDictionary _categoryMapping = new(); - - private static DiagnosticDescriptor Rule(string id, string title, Category category, DiagnosticSeverity defaultSeverity, string messageFormat, string? description = null) - { - var helpLink = $"https://spectreconsole.net/analyzer/rules/{id.ToLowerInvariant()}"; - const bool IsEnabledByDefault = true; - return new DiagnosticDescriptor( - id, - title, - messageFormat, - _categoryMapping.GetOrAdd(category, c => c.ToString()), - defaultSeverity, - IsEnabledByDefault, - description, - helpLink); - } - - /// - /// Gets definitions of diagnostics Spectre1000. - /// - public static DiagnosticDescriptor S1000_UseAnsiConsoleOverSystemConsole { get; } = - Rule( - "Spectre1000", - "Use AnsiConsole instead of System.Console", - Usage, - Warning, - "Use AnsiConsole instead of System.Console"); - - /// - /// Gets definitions of diagnostics Spectre1010. - /// - public static DiagnosticDescriptor S1010_FavorInstanceAnsiConsoleOverStatic { get; } = - Rule( - "Spectre1010", - "Favor the use of the instance of AnsiConsole over the static helper.", - Usage, - Info, - "Favor the use of the instance of AnsiConsole over the static helper."); - - /// - /// Gets definitions of diagnostics Spectre1020. - /// - public static DiagnosticDescriptor S1020_AvoidConcurrentCallsToMultipleLiveRenderables { get; } = - Rule( - "Spectre1020", - "Avoid calling other live renderables while a current renderable is running.", - Usage, - Warning, - "Avoid calling other live renderables while a current renderable is running."); - - /// - /// Gets definitions of diagnostics Spectre1020. - /// - public static DiagnosticDescriptor S1021_AvoidPromptCallsDuringLiveRenderables { get; } = - Rule( - "Spectre1021", - "Avoid prompting for input while a current renderable is running.", - Usage, - Warning, - "Avoid prompting for input while a current renderable is running."); -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Fixes/CodeActions/SwitchToAnsiConsoleAction.cs b/src/Spectre.Console.Analyzer/Fixes/CodeActions/SwitchToAnsiConsoleAction.cs deleted file mode 100644 index 922524f..0000000 --- a/src/Spectre.Console.Analyzer/Fixes/CodeActions/SwitchToAnsiConsoleAction.cs +++ /dev/null @@ -1,202 +0,0 @@ -using Microsoft.CodeAnalysis.Editing; -using Microsoft.CodeAnalysis.Simplification; - -namespace Spectre.Console.Analyzer.CodeActions; - -/// -/// Code action to change calls to System.Console to AnsiConsole. -/// -public class SwitchToAnsiConsoleAction : CodeAction -{ - private readonly Document _document; - private readonly InvocationExpressionSyntax _originalInvocation; - - /// - /// Initializes a new instance of the class. - /// - /// Document to change. - /// The method to change. - /// Title of the fix. - public SwitchToAnsiConsoleAction(Document document, InvocationExpressionSyntax originalInvocation, string title) - { - _document = document; - _originalInvocation = originalInvocation; - Title = title; - } - - /// - public override string Title { get; } - - /// - public override string EquivalenceKey => Title; - - /// - protected override async Task GetChangedDocumentAsync(CancellationToken cancellationToken) - { - var editor = await DocumentEditor.CreateAsync(_document, cancellationToken).ConfigureAwait(false); - var compilation = editor.SemanticModel.Compilation; - - var operation = editor.SemanticModel.GetOperation(_originalInvocation, cancellationToken) as IInvocationOperation; - if (operation == null) - { - return _document; - } - - // If there is an IAnsiConsole passed into the method then we'll use it. - // otherwise we'll check for a field level instance. - // if neither of those exist we'll fall back to the static param. - var spectreConsoleSymbol = compilation.GetTypeByMetadataName("Spectre.Console.AnsiConsole"); - var iansiConsoleSymbol = compilation.GetTypeByMetadataName("Spectre.Console.IAnsiConsole"); - - ISymbol? accessibleConsoleSymbol = spectreConsoleSymbol; - if (iansiConsoleSymbol != null) - { - var isInStaticContext = IsInStaticContext(operation, cancellationToken, out var parentStaticMemberStartPosition); - - foreach (var symbol in editor.SemanticModel.LookupSymbols(operation.Syntax.GetLocation().SourceSpan.Start)) - { - // LookupSymbols check the accessibility of the symbol, but it can - // suggest instance members when the current context is static. - var symbolType = symbol switch - { - IParameterSymbol parameter => parameter.Type, - IFieldSymbol field when !isInStaticContext || field.IsStatic => field.Type, - IPropertySymbol { GetMethod: not null } property when !isInStaticContext || property.IsStatic => property.Type, - ILocalSymbol local => local.Type, - _ => null, - }; - - // Locals can be returned even if there are not valid in the current context. For instance, - // it can return locals declared after the current location. Or it can return locals that - // should not be accessible in a static local function. - // - // void Sample() - // { - // int local = 0; - // static void LocalFunction() => local; <-- local is invalid here but LookupSymbols suggests it - // } - // - // Parameters from the ancestor methods or local functions are also returned even if the operation is in a static local function. - if (symbol.Kind is SymbolKind.Local or SymbolKind.Parameter) - { - var localPosition = symbol.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax(cancellationToken).GetLocation().SourceSpan.Start; - - // The local is not part of the source tree - if (localPosition == null) - { - break; - } - - // The local is declared after the current expression - if (localPosition > _originalInvocation.Span.Start) - { - break; - } - - // The local is declared outside the static local function - if (isInStaticContext && localPosition < parentStaticMemberStartPosition) - { - break; - } - } - - if (IsOrImplementSymbol(symbolType, iansiConsoleSymbol)) - { - accessibleConsoleSymbol = symbol; - break; - } - } - } - - if (accessibleConsoleSymbol == null) - { - return _document; - } - - // Replace the original invocation - var generator = editor.Generator; - var consoleExpression = accessibleConsoleSymbol switch - { - ITypeSymbol typeSymbol => generator.TypeExpression(typeSymbol, addImport: true).WithAdditionalAnnotations(Simplifier.AddImportsAnnotation), - _ => generator.IdentifierName(accessibleConsoleSymbol.Name), - }; - - var newExpression = generator.InvocationExpression(generator.MemberAccessExpression(consoleExpression, operation.TargetMethod.Name), _originalInvocation.ArgumentList.Arguments) - .WithLeadingTrivia(_originalInvocation.GetLeadingTrivia()) - .WithTrailingTrivia(_originalInvocation.GetTrailingTrivia()); - - editor.ReplaceNode(_originalInvocation, newExpression); - - return editor.GetChangedDocument(); - } - - private static bool IsOrImplementSymbol(ITypeSymbol? symbol, ITypeSymbol interfaceSymbol) - { - if (symbol == null) - { - return false; - } - - if (SymbolEqualityComparer.Default.Equals(symbol, interfaceSymbol)) - { - return true; - } - - foreach (var iface in symbol.AllInterfaces) - { - if (SymbolEqualityComparer.Default.Equals(iface, interfaceSymbol)) - { - return true; - } - } - - return false; - } - - private static bool IsInStaticContext(IOperation operation, CancellationToken cancellationToken, out int parentStaticMemberStartPosition) - { - // Local functions can be nested, and an instance local function can be declared - // in a static local function. So, you need to continue to check ancestors when a - // local function is not static. - foreach (var member in operation.Syntax.Ancestors()) - { - if (member is LocalFunctionStatementSyntax localFunction) - { - var symbol = operation.SemanticModel!.GetDeclaredSymbol(localFunction, cancellationToken); - if (symbol != null && symbol.IsStatic) - { - parentStaticMemberStartPosition = localFunction.GetLocation().SourceSpan.Start; - return true; - } - } - else if (member is LambdaExpressionSyntax lambdaExpression) - { - var symbol = operation.SemanticModel!.GetSymbolInfo(lambdaExpression, cancellationToken).Symbol; - if (symbol != null && symbol.IsStatic) - { - parentStaticMemberStartPosition = lambdaExpression.GetLocation().SourceSpan.Start; - return true; - } - } - else if (member is AnonymousMethodExpressionSyntax anonymousMethod) - { - var symbol = operation.SemanticModel!.GetSymbolInfo(anonymousMethod, cancellationToken).Symbol; - if (symbol != null && symbol.IsStatic) - { - parentStaticMemberStartPosition = anonymousMethod.GetLocation().SourceSpan.Start; - return true; - } - } - else if (member is MethodDeclarationSyntax methodDeclaration) - { - parentStaticMemberStartPosition = methodDeclaration.GetLocation().SourceSpan.Start; - - var symbol = operation.SemanticModel!.GetDeclaredSymbol(methodDeclaration, cancellationToken); - return symbol != null && symbol.IsStatic; - } - } - - parentStaticMemberStartPosition = -1; - return false; - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Fixes/FixProviders/StaticAnsiConsoleToInstanceFix.cs b/src/Spectre.Console.Analyzer/Fixes/FixProviders/StaticAnsiConsoleToInstanceFix.cs deleted file mode 100644 index d930d5c..0000000 --- a/src/Spectre.Console.Analyzer/Fixes/FixProviders/StaticAnsiConsoleToInstanceFix.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Spectre.Console.Analyzer.FixProviders; - -/// -/// Fix provider to change System.Console calls to AnsiConsole calls. -/// -[ExportCodeFixProvider(LanguageNames.CSharp)] -[Shared] -public class StaticAnsiConsoleToInstanceFix : CodeFixProvider -{ - /// - public sealed override ImmutableArray FixableDiagnosticIds => ImmutableArray.Create( - Descriptors.S1010_FavorInstanceAnsiConsoleOverStatic.Id); - - /// - public sealed override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; - - /// - public override async Task RegisterCodeFixesAsync(CodeFixContext context) - { - var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); - if (root != null) - { - var methodDeclaration = root.FindNode(context.Span, getInnermostNodeForTie: true).FirstAncestorOrSelf(); - if (methodDeclaration != null) - { - context.RegisterCodeFix( - new SwitchToAnsiConsoleAction( - context.Document, - methodDeclaration, - "Convert static AnsiConsole calls to local instance."), - context.Diagnostics); - } - } - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Fixes/FixProviders/SystemConsoleToAnsiConsoleFix.cs b/src/Spectre.Console.Analyzer/Fixes/FixProviders/SystemConsoleToAnsiConsoleFix.cs deleted file mode 100644 index a90d99d..0000000 --- a/src/Spectre.Console.Analyzer/Fixes/FixProviders/SystemConsoleToAnsiConsoleFix.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Spectre.Console.Analyzer.FixProviders; - -/// -/// Fix provider to change System.Console calls to AnsiConsole calls. -/// -[ExportCodeFixProvider(LanguageNames.CSharp)] -[Shared] -public class SystemConsoleToAnsiConsoleFix : CodeFixProvider -{ - /// - public sealed override ImmutableArray FixableDiagnosticIds => ImmutableArray.Create( - Descriptors.S1000_UseAnsiConsoleOverSystemConsole.Id); - - /// - public sealed override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; - - /// - public override async Task RegisterCodeFixesAsync(CodeFixContext context) - { - var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); - if (root != null) - { - var methodDeclaration = root.FindNode(context.Span).FirstAncestorOrSelf(); - if (methodDeclaration != null) - { - context.RegisterCodeFix( - new SwitchToAnsiConsoleAction( - context.Document, - methodDeclaration, - "Convert static call to AnsiConsole to Spectre.Console.AnsiConsole"), - context.Diagnostics); - } - } - } -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Fixes/Syntax.cs b/src/Spectre.Console.Analyzer/Fixes/Syntax.cs deleted file mode 100644 index 6cedc68..0000000 --- a/src/Spectre.Console.Analyzer/Fixes/Syntax.cs +++ /dev/null @@ -1,8 +0,0 @@ -using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; - -namespace Spectre.Console.Analyzer; - -internal static class Syntax -{ - public static readonly UsingDirectiveSyntax SpectreUsing = UsingDirective(QualifiedName(IdentifierName("Spectre"), IdentifierName("Console"))); -} \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Properties/Usings.cs b/src/Spectre.Console.Analyzer/Properties/Usings.cs deleted file mode 100644 index b48e0f2..0000000 --- a/src/Spectre.Console.Analyzer/Properties/Usings.cs +++ /dev/null @@ -1,14 +0,0 @@ -global using System.Collections.Concurrent; -global using System.Collections.Immutable; -global using System.Composition; -global using System.Linq; -global using System.Threading; -global using System.Threading.Tasks; -global using Microsoft.CodeAnalysis; -global using Microsoft.CodeAnalysis.CodeActions; -global using Microsoft.CodeAnalysis.CodeFixes; -global using Microsoft.CodeAnalysis.CSharp; -global using Microsoft.CodeAnalysis.CSharp.Syntax; -global using Microsoft.CodeAnalysis.Diagnostics; -global using Microsoft.CodeAnalysis.Operations; -global using Spectre.Console.Analyzer.CodeActions; \ No newline at end of file diff --git a/src/Spectre.Console.Analyzer/Spectre.Console.Analyzer.csproj b/src/Spectre.Console.Analyzer/Spectre.Console.Analyzer.csproj deleted file mode 100644 index c25a8e1..0000000 --- a/src/Spectre.Console.Analyzer/Spectre.Console.Analyzer.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - Best practice analyzers for Spectre.Console. - netstandard2.0 - true - true - false - enable - true - true - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj index 9d85731..4eab385 100644 --- a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj +++ b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj @@ -2,19 +2,15 @@ net8.0;net7.0;net6.0;netstandard2.0 - enable true - SA1633 - - + + - - - + @@ -23,9 +19,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj b/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj deleted file mode 100644 index 73a306d..0000000 --- a/src/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - net8.0;net7.0;net6.0 - enable - true - A library that extends Spectre.Console with ImageSharp superpowers. - - - - - - - - - - - - - - - - diff --git a/src/Spectre.Console.Json/Spectre.Console.Json.csproj b/src/Spectre.Console.Json/Spectre.Console.Json.csproj deleted file mode 100644 index 03e23d9..0000000 --- a/src/Spectre.Console.Json/Spectre.Console.Json.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - net8.0;net7.0;net6.0;netstandard2.0 - enable - true - true - A library that extends Spectre.Console with JSON superpowers. - - - - - - - - - - - - - - - - - - diff --git a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj index 3dd0bac..4b65da9 100644 --- a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj +++ b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj @@ -3,21 +3,15 @@ net8.0;net7.0;net6.0 false - enable true Contains testing utilities for Spectre.Console. - + - - - - - diff --git a/src/Spectre.Console.sln b/src/Spectre.Console.sln index 5b77253..756d7c1 100644 --- a/src/Spectre.Console.sln +++ b/src/Spectre.Console.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.1.32414.318 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console", "Spectre.Console\Spectre.Console.csproj", "{80DCBEF3-99D6-46C0-9C5B-42B4534D9113}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meta", "Meta", "{20595AD4-8D75-4AF8-B6BC-9C38C160423F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{20595AD4-8D75-4AF8-B6BC-9C38C160423F}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig Directory.Build.props = Directory.Build.props @@ -13,28 +13,34 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meta", "Meta", "{20595AD4-8 ..\dotnet-tools.json = ..\dotnet-tools.json ..\global.json = ..\global.json stylecop.json = stylecop.json + Directory.Packages.props = Directory.Packages.props EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub", "GitHub", "{C3E2CB5C-1517-4C75-B59A-93D4E22BEC8D}" ProjectSection(SolutionItems) = preProject ..\.github\workflows\ci.yaml = ..\.github\workflows\ci.yaml - ..\.github\workflows\docs.yaml = ..\.github\workflows\docs.yaml ..\.github\workflows\publish.yaml = ..\.github\workflows\publish.yaml EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.ImageSharp", "Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj", "{0EFE694D-0770-4E71-BF4E-EC2B41362F79}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.ImageSharp", "Extensions\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj", "{0EFE694D-0770-4E71-BF4E-EC2B41362F79}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Testing", "Spectre.Console.Testing\Spectre.Console.Testing.csproj", "{7D5F6704-8249-46DD-906C-9E66419F215F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{E0E45070-123C-4A4D-AA98-2A780308876C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{E0E45070-123C-4A4D-AA98-2A780308876C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Tests", "..\test\Spectre.Console.Tests\Spectre.Console.Tests.csproj", "{60A4CADD-2B3D-48ED-89C0-1637A1F111AE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Tests", "Tests\Spectre.Console.Tests\Spectre.Console.Tests.csproj", "{60A4CADD-2B3D-48ED-89C0-1637A1F111AE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Cli", "Spectre.Console.Cli\Spectre.Console.Cli.csproj", "{1B67B74F-1243-4381-9A2B-86EA66D135C5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Cli.Tests", "..\test\Spectre.Console.Cli.Tests\Spectre.Console.Cli.Tests.csproj", "{E07C46D2-714F-4116-BADD-FEE09617A9C4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Cli.Tests", "Tests\Spectre.Console.Cli.Tests\Spectre.Console.Cli.Tests.csproj", "{E07C46D2-714F-4116-BADD-FEE09617A9C4}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Json", "Spectre.Console.Json\Spectre.Console.Json.csproj", "{579E6E31-1E2F-4FE1-8F8C-9770878993E9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spectre.Console.Json", "Extensions\Spectre.Console.Json\Spectre.Console.Json.csproj", "{579E6E31-1E2F-4FE1-8F8C-9770878993E9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{F34EFD87-6CEA-453F-858B-094EA413578C}" + ProjectSection(SolutionItems) = preProject + Tests\Directory.Build.props = Tests\Directory.Build.props + Tests\.editorconfig = Tests\.editorconfig + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -138,6 +144,8 @@ Global {C3E2CB5C-1517-4C75-B59A-93D4E22BEC8D} = {20595AD4-8D75-4AF8-B6BC-9C38C160423F} {0EFE694D-0770-4E71-BF4E-EC2B41362F79} = {E0E45070-123C-4A4D-AA98-2A780308876C} {579E6E31-1E2F-4FE1-8F8C-9770878993E9} = {E0E45070-123C-4A4D-AA98-2A780308876C} + {60A4CADD-2B3D-48ED-89C0-1637A1F111AE} = {F34EFD87-6CEA-453F-858B-094EA413578C} + {E07C46D2-714F-4116-BADD-FEE09617A9C4} = {F34EFD87-6CEA-453F-858B-094EA413578C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5729B071-67A0-48FB-8B1B-275E6822086C} diff --git a/src/Spectre.Console.sln.DotSettings b/src/Spectre.Console.sln.DotSettings deleted file mode 100644 index 5b88222..0000000 --- a/src/Spectre.Console.sln.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - DO_NOT_SHOW \ No newline at end of file diff --git a/src/Spectre.Console.v3.ncrunchsolution b/src/Spectre.Console.v3.ncrunchsolution deleted file mode 100644 index 10420ac..0000000 --- a/src/Spectre.Console.v3.ncrunchsolution +++ /dev/null @@ -1,6 +0,0 @@ - - - True - True - - \ No newline at end of file diff --git a/src/Spectre.Console/Spectre.Console.csproj b/src/Spectre.Console/Spectre.Console.csproj index 4805f89..49a5504 100644 --- a/src/Spectre.Console/Spectre.Console.csproj +++ b/src/Spectre.Console/Spectre.Console.csproj @@ -2,22 +2,22 @@ net8.0;net7.0;net6.0;netstandard2.0 - enable true - SA1633 + $(DefineConstants)TRACE;WCWIDTH_VISIBILITY_INTERNAL - - - - - - + + - - - + + + + + + + + all @@ -28,17 +28,12 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - $(DefineConstants)TRACE;WCWIDTH_VISIBILITY_INTERNAL - - diff --git a/test/.editorconfig b/src/Tests/.editorconfig similarity index 100% rename from test/.editorconfig rename to src/Tests/.editorconfig diff --git a/src/Tests/Directory.Build.props b/src/Tests/Directory.Build.props new file mode 100644 index 0000000..2f818b0 --- /dev/null +++ b/src/Tests/Directory.Build.props @@ -0,0 +1,11 @@ + + + 12 + false + true + + + + + + \ No newline at end of file diff --git a/test/Spectre.Console.Cli.Tests/Constants.cs b/src/Tests/Spectre.Console.Cli.Tests/Constants.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Constants.cs rename to src/Tests/Spectre.Console.Cli.Tests/Constants.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/AnimalCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/AnimalCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/AnimalCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/AnimalCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/AsynchronousCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/AsynchronousCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/AsynchronousCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/AsynchronousCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/CatCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/CatCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/CatCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/CatCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/DogCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/DogCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/DogCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/DogCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/DumpRemainingCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/DumpRemainingCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/DumpRemainingCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/DumpRemainingCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/EmptyCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/EmptyCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/EmptyCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/EmptyCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/GenericCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GenericCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/GenericCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GenericCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/GiraffeCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GiraffeCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/GiraffeCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GiraffeCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/GreeterCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GreeterCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/GreeterCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/GreeterCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/HiddenOptionsCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/HiddenOptionsCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/HiddenOptionsCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/HiddenOptionsCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/HorseCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/HorseCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/HorseCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/HorseCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/InvalidCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/InvalidCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/InvalidCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/InvalidCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/LionCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/LionCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/LionCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/LionCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/NoDescriptionCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/NoDescriptionCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/NoDescriptionCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/NoDescriptionCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/OptionVectorCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/OptionVectorCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/OptionVectorCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/OptionVectorCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/ThrowingCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/ThrowingCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/ThrowingCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/ThrowingCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/TurtleCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/TurtleCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/TurtleCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/TurtleCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Commands/VersionCommand.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Converters/CatAgilityConverter.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Converters/CatAgilityConverter.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Converters/CatAgilityConverter.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Converters/CatAgilityConverter.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Converters/StringToIntegerConverter.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Converters/StringToIntegerConverter.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Converters/StringToIntegerConverter.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Converters/StringToIntegerConverter.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Help/CustomHelpProvider.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Help/CustomHelpProvider.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Help/CustomHelpProvider.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Help/CustomHelpProvider.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Help/RedirectHelpProvider.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Help/RedirectHelpProvider.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Help/RedirectHelpProvider.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Help/RedirectHelpProvider.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Help/RenderMarkupHelpProvider.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Help/RenderMarkupHelpProvider.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Help/RenderMarkupHelpProvider.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Help/RenderMarkupHelpProvider.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/AnimalSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/AnimalSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/AnimalSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/AnimalSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/ArgumentOrderSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ArgumentOrderSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/ArgumentOrderSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ArgumentOrderSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/ArgumentVectorSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ArgumentVectorSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/ArgumentVectorSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ArgumentVectorSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/AsynchronousCommandSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/AsynchronousCommandSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/AsynchronousCommandSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/AsynchronousCommandSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/BarCommandSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/BarCommandSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/BarCommandSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/BarCommandSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/CatSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/CatSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/CatSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/CatSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/DogSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/DogSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/DogSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/DogSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/FooSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/FooSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/FooSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/FooSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/GiraffeSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/GiraffeSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/GiraffeSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/GiraffeSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/HiddenOptionSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/HiddenOptionSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/HiddenOptionSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/HiddenOptionSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/HorseSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/HorseSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/HorseSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/HorseSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/InvalidSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/InvalidSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/InvalidSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/InvalidSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/LionSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/LionSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/LionSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/LionSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/MammalSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/MammalSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/MammalSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/MammalSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/MultipleArgumentVectorSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/MultipleArgumentVectorSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/MultipleArgumentVectorSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/MultipleArgumentVectorSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/OptionVectorSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/OptionVectorSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/OptionVectorSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/OptionVectorSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/ReptileSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ReptileSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/ReptileSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ReptileSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/StringOptionSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/StringOptionSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/StringOptionSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/StringOptionSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/ThrowingCommandSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ThrowingCommandSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/ThrowingCommandSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/ThrowingCommandSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/TurtleSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/TurtleSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/TurtleSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/TurtleSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Settings/VersionSettings.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Validators/EvenNumberValidatorAttribute.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Validators/EvenNumberValidatorAttribute.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Validators/EvenNumberValidatorAttribute.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Validators/EvenNumberValidatorAttribute.cs diff --git a/test/Spectre.Console.Cli.Tests/Data/Validators/PositiveNumberValidatorAttribute.cs b/src/Tests/Spectre.Console.Cli.Tests/Data/Validators/PositiveNumberValidatorAttribute.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Data/Validators/PositiveNumberValidatorAttribute.cs rename to src/Tests/Spectre.Console.Cli.Tests/Data/Validators/PositiveNumberValidatorAttribute.cs diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/ArgumentCannotContainOptions.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ArgumentCannotContainOptions.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/ArgumentCannotContainOptions.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ArgumentCannotContainOptions.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInOptionName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInOptionName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInOptionName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInOptionName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInValueName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInValueName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInValueName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/InvalidCharacterInValueName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/MissingLongAndShortName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MissingLongAndShortName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/MissingLongAndShortName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MissingLongAndShortName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleValuesAreNotSupported.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleValuesAreNotSupported.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleValuesAreNotSupported.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/MultipleValuesAreNotSupported.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionsMustHaveName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionsMustHaveName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionsMustHaveName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/OptionsMustHaveName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/UnexpectedCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/UnexpectedCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/UnexpectedCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/UnexpectedCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/UnterminatedValueName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/UnterminatedValueName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/UnterminatedValueName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/UnterminatedValueName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Arguments/ValuesMustHaveName.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ValuesMustHaveName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Arguments/ValuesMustHaveName.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Arguments/ValuesMustHaveName.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/ArgumentOrder.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Branch.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Branch.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Called_Without_Help.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Called_Without_Help.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Called_Without_Help.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Called_Without_Help.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Default_Greeter.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Default_Greeter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Default_Greeter.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Default_Greeter.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Examples.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Examples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Examples.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Branch_Examples.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Command_Hide_Default.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Command_Hide_Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Command_Hide_Default.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Command_Hide_Default.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Instance.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Type.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Type.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Type.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Configured_By_Type.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Instance.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Type.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Type.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Type.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Custom_Help_Registered_By_Type.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt similarity index 95% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt index e4a56cd..ad99fbb 100644 --- a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt +++ b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Custom_Help_Provider.Output.verified.txt @@ -1,15 +1,15 @@ --------------------------------------- ---- 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 + -v, --version Prints version 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/Default_Examples.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Examples.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Greeter.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Greeter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Greeter.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Greeter.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_DE.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_EN.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_FR.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional.Output_SV.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_BoldHeadings.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_Default.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Default_Without_Args_Additional_Style_None.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Description_No_Trailing_Period.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Command_Options.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Hidden_Commands.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Leaf.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Leaf.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Leaf.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Leaf.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/NoDescription.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/NoVersion.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root.QuestionMark.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Command.QuestionMark.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Eight.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_None.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Children_Twelve.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Eight.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_None.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Root_Examples_Leafs_Twelve.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Help/Version.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoMatchingArgument/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoMatchingArgument/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoMatchingArgument/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoMatchingArgument/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/NoValueForOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/OptionWithoutName/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnexpectedOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_6.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_6.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_6.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_6.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_7.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_7.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_7.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_7.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_8.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_8.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_8.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownCommand/Test_8.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Parsing/UnknownOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Hidden_Command_Options.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Hidden_Command_Options.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Hidden_Command_Options.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Hidden_Command_Options.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt b/src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt rename to src/Tests/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt diff --git a/test/Spectre.Console.Cli.Tests/Properties/Usings.cs b/src/Tests/Spectre.Console.Cli.Tests/Properties/Usings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Properties/Usings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Properties/Usings.cs diff --git a/src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj b/src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj new file mode 100644 index 0000000..10e189c --- /dev/null +++ b/src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj @@ -0,0 +1,27 @@ + + + + net8.0;net7.0;net6.0 + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.Rendering.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.Rendering.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.Rendering.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.Rendering.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandArgumentAttributeTests.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.Rendering.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.Rendering.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.Rendering.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.Rendering.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Annotations/CommandOptionAttributeTests.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs similarity index 90% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs index 8fe9020..8ce3ee1 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs +++ b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Async.cs @@ -5,7 +5,7 @@ public sealed partial class CommandAppTests public sealed class Async { [Fact] - public async void Should_Execute_Command_Asynchronously() + public async Task Should_Execute_Command_Asynchronously() { // Given var app = new CommandAppTester(); @@ -24,7 +24,7 @@ public sealed partial class CommandAppTests } [Fact] - public async void Should_Handle_Exception_Asynchronously() + public async Task Should_Handle_Exception_Asynchronously() { // Given var app = new CommandAppTester(); @@ -42,7 +42,7 @@ public sealed partial class CommandAppTests } [Fact] - public async void Should_Throw_Exception_Asynchronously() + public async Task Should_Throw_Exception_Asynchronously() { // Given var app = new CommandAppTester(); diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Branches.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Constructor.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Constructor.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Constructor.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Constructor.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Context.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Exceptions.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Exceptions.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Exceptions.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Exceptions.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.FlagValues.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.FlagValues.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.FlagValues.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.FlagValues.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Help.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.Settings.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.Settings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.Settings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.Settings.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Injection.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Interceptor.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Interceptor.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Interceptor.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Interceptor.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Pairs.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Pairs.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Pairs.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Pairs.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Parsing.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Remaining.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Sensitivity.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Sensitivity.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Sensitivity.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Sensitivity.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Settings.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Settings.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Settings.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Settings.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.TypeConverters.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.TypeConverters.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.TypeConverters.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.TypeConverters.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Unsafe.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Unsafe.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Unsafe.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Unsafe.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Validation.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Validation.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Validation.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Validation.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.ValueProviders.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.ValueProviders.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.ValueProviders.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.ValueProviders.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Vectors.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Vectors.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Vectors.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Vectors.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Version.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Xml.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Xml.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Xml.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.Xml.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs similarity index 98% rename from test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs index 082ca66..34d8520 100644 --- a/test/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs +++ b/src/Tests/Spectre.Console.Cli.Tests/Unit/CommandAppTests.cs @@ -1145,11 +1145,7 @@ public sealed partial class CommandAppTests { cfg.AddBranch("a", d => { - d.AddDelegate("b", _ => - { - AnsiConsole.MarkupLine("[red]Complete[/]"); - return 0; - }); + d.AddDelegate("b", _ => 0); }); }); @@ -1169,11 +1165,7 @@ public sealed partial class CommandAppTests var app = new CommandAppTester(); app.Configure(cfg => { - cfg.AddDelegate("a", _ => - { - AnsiConsole.MarkupLine("[red]Complete[/]"); - return 0; - }); + cfg.AddDelegate("a", _ => 0); }); // When @@ -1186,7 +1178,7 @@ public sealed partial class CommandAppTests } [Fact] - public async void Should_Execute_Async_Delegate_Command_At_Root_Level() + public async Task Should_Execute_Async_Delegate_Command_At_Root_Level() { // Given var dog = default(DogSettings); @@ -1251,7 +1243,7 @@ public sealed partial class CommandAppTests } [Fact] - public async void Should_Execute_Nested_Async_Delegate_Command() + public async Task Should_Execute_Nested_Async_Delegate_Command() { // Given var dog = default(DogSettings); diff --git a/test/Spectre.Console.Cli.Tests/Unit/DefaultTypeRegistrarTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/DefaultTypeRegistrarTests.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/DefaultTypeRegistrarTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/DefaultTypeRegistrarTests.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/Parsing/CommandTreeTokenizerTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Parsing/CommandTreeTokenizerTests.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Parsing/CommandTreeTokenizerTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Parsing/CommandTreeTokenizerTests.cs diff --git a/test/Spectre.Console.Cli.Tests/Unit/Testing/FakeTypeRegistrarTests.cs b/src/Tests/Spectre.Console.Cli.Tests/Unit/Testing/FakeTypeRegistrarTests.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Unit/Testing/FakeTypeRegistrarTests.cs rename to src/Tests/Spectre.Console.Cli.Tests/Unit/Testing/FakeTypeRegistrarTests.cs diff --git a/test/Spectre.Console.Cli.Tests/Utilities/CommandContextExtensions.cs b/src/Tests/Spectre.Console.Cli.Tests/Utilities/CommandContextExtensions.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Utilities/CommandContextExtensions.cs rename to src/Tests/Spectre.Console.Cli.Tests/Utilities/CommandContextExtensions.cs diff --git a/test/Spectre.Console.Cli.Tests/Utilities/ModuleInitializerAttribute.cs b/src/Tests/Spectre.Console.Cli.Tests/Utilities/ModuleInitializerAttribute.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/Utilities/ModuleInitializerAttribute.cs rename to src/Tests/Spectre.Console.Cli.Tests/Utilities/ModuleInitializerAttribute.cs diff --git a/test/Spectre.Console.Cli.Tests/VerifyConfiguration.cs b/src/Tests/Spectre.Console.Cli.Tests/VerifyConfiguration.cs similarity index 100% rename from test/Spectre.Console.Cli.Tests/VerifyConfiguration.cs rename to src/Tests/Spectre.Console.Cli.Tests/VerifyConfiguration.cs diff --git a/test/Spectre.Console.Tests/Data/Exceptions.cs b/src/Tests/Spectre.Console.Tests/Data/Exceptions.cs similarity index 100% rename from test/Spectre.Console.Tests/Data/Exceptions.cs rename to src/Tests/Spectre.Console.Tests/Data/Exceptions.cs diff --git a/test/Spectre.Console.Tests/Data/example.json b/src/Tests/Spectre.Console.Tests/Data/example.json similarity index 100% rename from test/Spectre.Console.Tests/Data/example.json rename to src/Tests/Spectre.Console.Tests/Data/example.json diff --git a/test/Spectre.Console.Tests/Data/poison.flf b/src/Tests/Spectre.Console.Tests/Data/poison.flf similarity index 100% rename from test/Spectre.Console.Tests/Data/poison.flf rename to src/Tests/Spectre.Console.Tests/Data/poison.flf diff --git a/test/Spectre.Console.Tests/Data/starwars.flf b/src/Tests/Spectre.Console.Tests/Data/starwars.flf similarity index 100% rename from test/Spectre.Console.Tests/Data/starwars.flf rename to src/Tests/Spectre.Console.Tests/Data/starwars.flf diff --git a/test/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt b/src/Tests/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt similarity index 100% rename from test/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt rename to src/Tests/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt diff --git a/test/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs b/src/Tests/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs similarity index 100% rename from test/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs rename to src/Tests/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs diff --git a/test/Spectre.Console.Tests/Extensions/StreamExtensions.cs b/src/Tests/Spectre.Console.Tests/Extensions/StreamExtensions.cs similarity index 100% rename from test/Spectre.Console.Tests/Extensions/StreamExtensions.cs rename to src/Tests/Spectre.Console.Tests/Extensions/StreamExtensions.cs diff --git a/test/Spectre.Console.Tests/Properties/Usings.cs b/src/Tests/Spectre.Console.Tests/Properties/Usings.cs similarity index 100% rename from test/Spectre.Console.Tests/Properties/Usings.cs rename to src/Tests/Spectre.Console.Tests/Properties/Usings.cs diff --git a/src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj b/src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj new file mode 100644 index 0000000..97100e1 --- /dev/null +++ b/src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj @@ -0,0 +1,35 @@ + + + + net8.0;net7.0;net6.0 + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + diff --git a/test/Spectre.Console.Tests/Unit/AlternateScreenTests.cs b/src/Tests/Spectre.Console.Tests/Unit/AlternateScreenTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AlternateScreenTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/AlternateScreenTests.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Advanced.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Advanced.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Advanced.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Advanced.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs diff --git a/test/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs b/src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs diff --git a/test/Spectre.Console.Tests/Unit/ColorSystemTests.cs b/src/Tests/Spectre.Console.Tests/Unit/ColorSystemTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/ColorSystemTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/ColorSystemTests.cs diff --git a/test/Spectre.Console.Tests/Unit/ColorTests.cs b/src/Tests/Spectre.Console.Tests/Unit/ColorTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/ColorTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/ColorTests.cs diff --git a/test/Spectre.Console.Tests/Unit/EmojiTests.cs b/src/Tests/Spectre.Console.Tests/Unit/EmojiTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/EmojiTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/EmojiTests.cs diff --git a/test/Spectre.Console.Tests/Unit/ExceptionTests.cs b/src/Tests/Spectre.Console.Tests/Unit/ExceptionTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/ExceptionTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/ExceptionTests.cs diff --git a/test/Spectre.Console.Tests/Unit/HighlightTests.cs b/src/Tests/Spectre.Console.Tests/Unit/HighlightTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/HighlightTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/HighlightTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs b/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs rename to src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs diff --git a/test/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Live/StatusTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Live/StatusTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Live/StatusTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Live/StatusTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs diff --git a/test/Spectre.Console.Tests/Unit/RecorderTests.cs b/src/Tests/Spectre.Console.Tests/Unit/RecorderTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/RecorderTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/RecorderTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs diff --git a/test/Spectre.Console.Tests/Unit/StyleTests.cs b/src/Tests/Spectre.Console.Tests/Unit/StyleTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/StyleTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/StyleTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/GridTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/GridTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/GridTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/GridTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/TextTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/TextTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/TextTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/TextTests.cs diff --git a/test/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs similarity index 100% rename from test/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs rename to src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs diff --git a/test/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs b/src/Tests/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs similarity index 100% rename from test/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs rename to src/Tests/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs diff --git a/test/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs b/src/Tests/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs similarity index 100% rename from test/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs rename to src/Tests/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs diff --git a/test/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs b/src/Tests/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs similarity index 100% rename from test/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs rename to src/Tests/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs diff --git a/test/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs b/src/Tests/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs similarity index 100% rename from test/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs rename to src/Tests/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs diff --git a/test/Spectre.Console.Tests/VerifyConfiguration.cs b/src/Tests/Spectre.Console.Tests/VerifyConfiguration.cs similarity index 100% rename from test/Spectre.Console.Tests/VerifyConfiguration.cs rename to src/Tests/Spectre.Console.Tests/VerifyConfiguration.cs diff --git a/test/Directory.Build.props b/test/Directory.Build.props deleted file mode 100644 index ade3951..0000000 --- a/test/Directory.Build.props +++ /dev/null @@ -1,16 +0,0 @@ - - - 12 - false - true - - - - - All - - - All - - - \ No newline at end of file diff --git a/test/Spectre.Console.Analyzer.Tests/CodeAnalyzerHelper.cs b/test/Spectre.Console.Analyzer.Tests/CodeAnalyzerHelper.cs deleted file mode 100644 index 860fcc8..0000000 --- a/test/Spectre.Console.Analyzer.Tests/CodeAnalyzerHelper.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests; - -internal static class CodeAnalyzerHelper -{ - internal static ReferenceAssemblies CurrentSpectre { get; } - - static CodeAnalyzerHelper() - { - CurrentSpectre = ReferenceAssemblies.Net.Net60.AddAssemblies( - ImmutableArray.Create(typeof(AnsiConsole).Assembly.Location.Replace(".dll", string.Empty))); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/CodeFixProviderDiscovery.cs b/test/Spectre.Console.Analyzer.Tests/CodeFixProviderDiscovery.cs deleted file mode 100644 index 9cfb44d..0000000 --- a/test/Spectre.Console.Analyzer.Tests/CodeFixProviderDiscovery.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests; - -internal static class CodeFixProviderDiscovery -{ - private static readonly Lazy _exportProviderFactory; - - static CodeFixProviderDiscovery() - { - _exportProviderFactory = new Lazy( - () => - { - var discovery = new AttributedPartDiscovery(Resolver.DefaultInstance, isNonPublicSupported: true); - var parts = Task.Run(() => discovery.CreatePartsAsync(typeof(SystemConsoleToAnsiConsoleFix).Assembly)).GetAwaiter().GetResult(); - var catalog = ComposableCatalog.Create(Resolver.DefaultInstance).AddParts(parts); - - var configuration = CompositionConfiguration.Create(catalog); - var runtimeComposition = RuntimeComposition.CreateRuntimeComposition(configuration); - return runtimeComposition.CreateExportProviderFactory(); - }, - LazyThreadSafetyMode.ExecutionAndPublication); - } - - public static IEnumerable GetCodeFixProviders(string language) - { - var exportProvider = _exportProviderFactory.Value.CreateExportProvider(); - var exports = exportProvider.GetExports(); - return exports.Where(export => export.Metadata.Languages.Contains(language)).Select(export => export.Value); - } - - private class LanguageMetadata - { - public LanguageMetadata(IDictionary data) - { - if (!data.TryGetValue(nameof(ExportCodeFixProviderAttribute.Languages), out var languages)) - { - languages = Array.Empty(); - } - - Languages = ((string[])languages).ToImmutableArray(); - } - - public ImmutableArray Languages { get; } - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Properties/Usings.cs b/test/Spectre.Console.Analyzer.Tests/Properties/Usings.cs deleted file mode 100644 index 394e6fe..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Properties/Usings.cs +++ /dev/null @@ -1,15 +0,0 @@ -global using System; -global using System.Collections.Generic; -global using System.Collections.Immutable; -global using System.Linq; -global using System.Threading; -global using System.Threading.Tasks; -global using Microsoft.CodeAnalysis; -global using Microsoft.CodeAnalysis.CodeFixes; -global using Microsoft.CodeAnalysis.CSharp.Testing; -global using Microsoft.CodeAnalysis.Diagnostics; -global using Microsoft.CodeAnalysis.Testing; -global using Microsoft.CodeAnalysis.Testing.Verifiers; -global using Microsoft.VisualStudio.Composition; -global using Spectre.Console.Analyzer.FixProviders; -global using Xunit; \ No newline at end of file diff --git a/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj b/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj deleted file mode 100644 index 19011e7..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - - net6.0 - false - - - - - - - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - diff --git a/test/Spectre.Console.Analyzer.Tests/SpectreAnalyzerVerifier.cs b/test/Spectre.Console.Analyzer.Tests/SpectreAnalyzerVerifier.cs deleted file mode 100644 index eb333f2..0000000 --- a/test/Spectre.Console.Analyzer.Tests/SpectreAnalyzerVerifier.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests; - -public static class SpectreAnalyzerVerifier - where TAnalyzer : DiagnosticAnalyzer, new() -{ - public static Task VerifyCodeFixAsync(string source, DiagnosticResult expected, string fixedSource) - => VerifyCodeFixAsync(source, OutputKind.DynamicallyLinkedLibrary, new[] { expected }, fixedSource); - - public static Task VerifyCodeFixAsync(string source, OutputKind outputKind, DiagnosticResult expected, string fixedSource) - => VerifyCodeFixAsync(source, outputKind, new[] { expected }, fixedSource); - - private static Task VerifyCodeFixAsync(string source, OutputKind outputKind, IEnumerable expected, string fixedSource) - { - var test = new Test - { - TestCode = source, - TestState = - { - OutputKind = outputKind, - }, - FixedCode = fixedSource, - }; - - test.ExpectedDiagnostics.AddRange(expected); - return test.RunAsync(); - } - - public static Task VerifyAnalyzerAsync(string source, params DiagnosticResult[] expected) - { - var test = new Test - { - TestCode = source, - CompilerDiagnostics = CompilerDiagnostics.All, - }; - - test.ExpectedDiagnostics.AddRange(expected); - return test.RunAsync(); - } - - // Code fix tests support both analyzer and code fix testing. This test class is derived from the code fix test - // to avoid the need to maintain duplicate copies of the customization work. - private class Test : CSharpCodeFixTest - { - public Test() - { - ReferenceAssemblies = CodeAnalyzerHelper.CurrentSpectre; - TestBehaviors |= TestBehaviors.SkipGeneratedCodeCheck; - } - - protected override IEnumerable GetCodeFixProviders() - { - var analyzer = new TAnalyzer(); - foreach (var provider in CodeFixProviderDiscovery.GetCodeFixProviders(Language)) - { - if (analyzer.SupportedDiagnostics.Any(diagnostic => provider.FixableDiagnosticIds.Contains(diagnostic.Id))) - { - yield return provider; - } - } - } - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoConcurrentLiveRenderablesTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoConcurrentLiveRenderablesTests.cs deleted file mode 100644 index 423ba05..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoConcurrentLiveRenderablesTests.cs +++ /dev/null @@ -1,72 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Analyzers; - -public class NoCurrentLiveRenderablesTests -{ - private static readonly DiagnosticResult _expectedDiagnostics = new( - Descriptors.S1020_AvoidConcurrentCallsToMultipleLiveRenderables.Id, - DiagnosticSeverity.Warning); - - [Fact] - public async void Status_call_within_live_call_warns() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - void Go() - { - AnsiConsole.Live(new Table()).Start(ctx => - { - AnsiConsole.Status().Start(""go"", innerCtx => {}); - }); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(10, 13)); - } - - [Fact] - public async void Status_call_within_live_call_warns_with_instance() - { - const string Source = @" -using Spectre.Console; - -class Child -{ - public readonly IAnsiConsole _console = AnsiConsole.Console; - - public void Go() - { - _console.Status().Start(""starting"", context => - { - _console.Progress().Start(progressContext => { }); - }); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(12, 13)); - } - - [Fact] - public async void Calling_start_on_non_live_renderable_has_no_warning() - { - const string Source = @" -using Spectre.Console; - -class Program -{ - static void Main() - { - Start(); - } - - static void Start() => AnsiConsole.WriteLine(""Starting...""); -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoPromptsDuringLiveRenderablesTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoPromptsDuringLiveRenderablesTests.cs deleted file mode 100644 index c08e79e..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/NoPromptsDuringLiveRenderablesTests.cs +++ /dev/null @@ -1,94 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Analyzers; - -public class NoPromptsDuringLiveRenderablesTests -{ - private static readonly DiagnosticResult _expectedDiagnostics = new( - Descriptors.S1021_AvoidPromptCallsDuringLiveRenderables.Id, - DiagnosticSeverity.Warning); - - [Fact] - public async Task Prompt_out_of_progress_does_not_warn() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - void Go() - { - var s = AnsiConsole.Ask(""How are you?""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } - - [Fact] - public async Task Instance_variables_warn() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - public IAnsiConsole _console = AnsiConsole.Console; - - public void Go() - { - _console.Status().Start(""starting"", context => - { - var result = _console.Confirm(""we ok?""); - }); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(12, 26)); - } - - [Fact] - public async Task Prompt_in_progress_warns() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - void Go() - { - AnsiConsole.Progress().Start(_ => - { - AnsiConsole.Ask(""How are you?""); - }); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(10, 13)); - } - - [Fact] - public async Task Can_call_other_methods_from_within_renderables() - { - const string Source = @" -using Spectre.Console; - -class Program -{ - static void Main() - { - AnsiConsole.Status().Start(""here we go"", context => - { - var result = Confirm(); - - }); - } - - static string Confirm() => string.Empty; -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseInstanceAnsiConsoleTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseInstanceAnsiConsoleTests.cs deleted file mode 100644 index 6845019..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseInstanceAnsiConsoleTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Analyzers; - -public class FavorInstanceAnsiConsoleOverStaticAnalyzerTests -{ - private static readonly DiagnosticResult _expectedDiagnostics = new( - Descriptors.S1010_FavorInstanceAnsiConsoleOverStatic.Id, - DiagnosticSeverity.Info); - - [Fact] - public async void Should_only_warn_within_methods() - { - const string Source = @" -using Spectre.Console; - -internal sealed class Foo -{ - private readonly IAnsiConsole _console; - - public Foo(IAnsiConsole console = null) - { - _console = console ?? AnsiConsole.Create(new AnsiConsoleSettings()); - } -} -"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } - - [Fact] - public async void Instance_console_has_no_warnings() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - _ansiConsole.Write(""this is fine""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } - - [Fact] - public async void Static_console_with_no_instance_variables_has_no_warnings() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - AnsiConsole.Write(""this is fine""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } - - [Fact] - public async void Console_Write_Has_Warning() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - _ansiConsole.Write(""this is fine""); - AnsiConsole.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(11, 9)); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzerTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzerTests.cs deleted file mode 100644 index 094315f..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Analyzers/UseSpectreInsteadOfSystemConsoleAnalyzerTests.cs +++ /dev/null @@ -1,59 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Analyzers; - -public class UseSpectreInsteadOfSystemConsoleAnalyzerTests -{ - private static readonly DiagnosticResult _expectedDiagnostics = new( - Descriptors.S1000_UseAnsiConsoleOverSystemConsole.Id, - DiagnosticSeverity.Warning); - - [Fact] - public async void Non_configured_SystemConsole_methods_report_no_warnings() - { - const string Source = @" -using System; - -class TestClass { - void TestMethod() - { - var s = Console.ReadLine(); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source); - } - - [Fact] - public async void Console_Write_Has_Warning() - { - const string Source = @" -using System; - -class TestClass { - void TestMethod() - { - Console.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(7, 9)); - } - - [Fact] - public async void Console_WriteLine_Has_Warning() - { - const string Source = @" -using System; - -class TestClass -{ - void TestMethod() { - Console.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyAnalyzerAsync(Source, _expectedDiagnostics.WithLocation(7, 9)); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseInstanceOfStaticAnsiConsoleTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseInstanceOfStaticAnsiConsoleTests.cs deleted file mode 100644 index 34fc785..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseInstanceOfStaticAnsiConsoleTests.cs +++ /dev/null @@ -1,146 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Fixes; - -public class UseInstanceOfStaticAnsiConsoleTests -{ - private static readonly DiagnosticResult _expectedDiagnostic = new( - Descriptors.S1010_FavorInstanceAnsiConsoleOverStatic.Id, - DiagnosticSeverity.Info); - - [Fact] - public async Task Static_call_replaced_with_field_call() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - _ansiConsole.Write(""this is fine""); - AnsiConsole.Write(""Hello, World""); - } -}"; - - const string FixedSource = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - _ansiConsole.Write(""this is fine""); - _ansiConsole.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(11, 9), FixedSource); - } - - [Fact] - public async Task Static_call_replaced_with_field_call_Should_Preserve_Trivia() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - var foo = 1; - - AnsiConsole.Write(""this is fine""); - _ansiConsole.Write(""Hello, World""); - } -}"; - - const string FixedSource = @" -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole = AnsiConsole.Console; - - void TestMethod() - { - var foo = 1; - - _ansiConsole.Write(""this is fine""); - _ansiConsole.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(12, 9), FixedSource); - } - - [Fact] - public async Task Static_call_replaced_with_parameter_call() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - void TestMethod(IAnsiConsole ansiConsole) - { - AnsiConsole.Write(""Hello, World""); - } -}"; - - const string FixedSource = @" -using Spectre.Console; - -class TestClass -{ - void TestMethod(IAnsiConsole ansiConsole) - { - ansiConsole.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(8, 9), FixedSource); - } - - [Fact] - public async Task Static_call_replaced_with_static_field_if_valid() - { - const string Source = @" -using Spectre.Console; - -class TestClass -{ - static IAnsiConsole staticConsole; - IAnsiConsole instanceConsole; - - static void TestMethod() - { - AnsiConsole.Write(""Hello, World""); - } -}"; - - const string FixedSource = @" -using Spectre.Console; - -class TestClass -{ - static IAnsiConsole staticConsole; - IAnsiConsole instanceConsole; - - static void TestMethod() - { - staticConsole.Write(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(11, 9), FixedSource); - } -} diff --git a/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseSpectreInsteadOfSystemConsoleFixTests.cs b/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseSpectreInsteadOfSystemConsoleFixTests.cs deleted file mode 100644 index b0eadad..0000000 --- a/test/Spectre.Console.Analyzer.Tests/Unit/Fixes/UseSpectreInsteadOfSystemConsoleFixTests.cs +++ /dev/null @@ -1,324 +0,0 @@ -namespace Spectre.Console.Analyzer.Tests.Unit.Fixes; - -public class UseSpectreInsteadOfSystemConsoleFixTests -{ - private static readonly DiagnosticResult _expectedDiagnostic = new( - Descriptors.S1000_UseAnsiConsoleOverSystemConsole.Id, - DiagnosticSeverity.Warning); - - [Fact] - public async Task SystemConsole_replaced_with_AnsiConsole() - { - const string Source = @" -using System; - -class TestClass -{ - void TestMethod() - { - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - AnsiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(8, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_imported_AnsiConsole() - { - const string Source = @" -using System; - -class TestClass -{ - void TestMethod() - { - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - AnsiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(8, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_field_AnsiConsole() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole; - - void TestMethod() - { - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole; - - void TestMethod() - { - _ansiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(11, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_local_variable_AnsiConsole() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - IAnsiConsole ansiConsole = null; - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - IAnsiConsole ansiConsole = null; - ansiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(10, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_not_replaced_with_local_variable_declared_after_the_call() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - Console.WriteLine(""Hello, World""); - IAnsiConsole ansiConsole; - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - void TestMethod() - { - AnsiConsole.WriteLine(""Hello, World""); - IAnsiConsole ansiConsole; - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(9, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_static_field_AnsiConsole() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - static IAnsiConsole _ansiConsole; - - static void TestMethod() - { - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - static IAnsiConsole _ansiConsole; - - static void TestMethod() - { - _ansiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(11, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_AnsiConsole_when_field_is_not_static() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole; - - static void TestMethod() - { - Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - IAnsiConsole _ansiConsole; - - static void TestMethod() - { - AnsiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(11, 9), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_AnsiConsole_from_local_function_parameter() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - static void TestMethod() - { - static void LocalFunction(IAnsiConsole ansiConsole) => Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - static void TestMethod() - { - static void LocalFunction(IAnsiConsole ansiConsole) => ansiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(9, 64), FixedSource); - } - - [Fact] - public async Task SystemConsole_do_not_use_variable_from_parent_method_in_static_local_function() - { - const string Source = @" -using System; -using Spectre.Console; - -class TestClass -{ - static void TestMethod() - { - IAnsiConsole ansiConsole = null; - static void LocalFunction() => Console.WriteLine(""Hello, World""); - } -}"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -class TestClass -{ - static void TestMethod() - { - IAnsiConsole ansiConsole = null; - static void LocalFunction() => AnsiConsole.WriteLine(""Hello, World""); - } -}"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, _expectedDiagnostic.WithLocation(10, 40), FixedSource); - } - - [Fact] - public async Task SystemConsole_replaced_with_AnsiConsole_in_top_level_statements() - { - const string Source = @" -using System; - -Console.WriteLine(""Hello, World""); -"; - - const string FixedSource = @" -using System; -using Spectre.Console; - -AnsiConsole.WriteLine(""Hello, World""); -"; - - await SpectreAnalyzerVerifier - .VerifyCodeFixAsync(Source, OutputKind.ConsoleApplication, _expectedDiagnostic.WithLocation(4, 1), - FixedSource); - } -} diff --git a/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj b/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj deleted file mode 100644 index fede880..0000000 --- a/test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - net8.0;net7.0;net6.0 - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - diff --git a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj b/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj deleted file mode 100644 index 1004369..0000000 --- a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - net8.0;net7.0;net6.0 - - - - - - - - - - - - Always - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - From f02b46107e1cd8121e05b227c8b2da7aed3d1449 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 10 Aug 2024 10:41:25 +0000 Subject: [PATCH 28/57] chore: Update dependency Verify.Xunit to v26.2.0 --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index b98339b..b69fb1b 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -12,7 +12,7 @@ - + From 6116af384458dc6acc7b887617e7aec45c703d86 Mon Sep 17 00:00:00 2001 From: Kirill Osenkov Date: Thu, 29 Aug 2024 16:52:55 -0700 Subject: [PATCH 29/57] Strong name the assemblies --- resources/spectre.snk | Bin 0 -> 596 bytes src/Directory.Build.props | 5 ++++- .../Spectre.Console.Cli.csproj | 2 +- .../Spectre.Console.Testing.csproj | 4 ++-- src/Spectre.Console/Spectre.Console.csproj | 2 +- src/Tests/Directory.Build.props | 3 +++ 6 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 resources/spectre.snk diff --git a/resources/spectre.snk b/resources/spectre.snk new file mode 100644 index 0000000000000000000000000000000000000000..16a16ed4478aed1c3fb084181ccec9359ee2f837 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097DM$>qmF-Ls#qqPX!_j3Q7%GhB)Yu2%Q zoJy7odV5tK%_8LV5uELC?u)(i$_f#Dnf+o&!D3bFkTVesA~V!3bm$xO^Y`lszv#6( z)0x>HYu|z7ic*9Du~2&%;w2+x4Q54U=t?^2tGQxf4%zM4_xU5}?qB zHt#z;d$)JI3(#i2pSFu3*Vm@>;EDR8zYXX^%`UBkKVf(f7?h!H>Dn0FF)_uYX{PtzT+kE~{?&4)~Diu*dU=u#j*(%7`Ey5%Z;4 z8D>xz{APrjk5GOsL8_3YSzK1j{k-_Ld0{?ELPcO()GLd%n-~qmu$1}c+TX_TyC9dC zL^c{S?ziT;SAa!z4IC!|QVk@95#TV=MN|$ZZN#725IWN%gi*c6`%Jl7AVKZ9+*m6v zD=QR$r*2c-s+YFT8mRw~q5ZohhO9#=BZMezklIpEJ;+t!q)`343o^cG+Wo&PAq~Oy zT?l!3nJzI;6;QU){ECWmnB1XD#Jqx{Z3BVI9EpgRenPB}ko7fMa7q&LCH(_MA15`P i?m*<=)Pxr-Sq + true 12 @@ -9,6 +9,9 @@ false enable $(NoWarn);SA1633 + true + $(MSBuildThisFileDirectory)\..\resources\spectre.snk + 00240000048000009400000006020000002400005253413100040000010001006146d3789d31477cf4a3b508dcf772ff9ccad8613f6bd6b17b9c4a960a7a7b551ecd22e4f4119ced70ee8bbdf3ca0a117c99fd6248c16255ea9033110c2233d42e74e81bf4f3f7eb09bfe8b53ad399d957514f427171a86f5fe9fe0014be121d571c80c4a0cfc3531bdbf5a2900d936d93f2c94171b9134f7644a1ac3612a0d0 diff --git a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj index 4eab385..ca431bf 100644 --- a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj +++ b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj index 4b65da9..9e61a36 100644 --- a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj +++ b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/src/Spectre.Console/Spectre.Console.csproj b/src/Spectre.Console/Spectre.Console.csproj index 49a5504..8c73026 100644 --- a/src/Spectre.Console/Spectre.Console.csproj +++ b/src/Spectre.Console/Spectre.Console.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Tests/Directory.Build.props b/src/Tests/Directory.Build.props index 2f818b0..fc0cdc7 100644 --- a/src/Tests/Directory.Build.props +++ b/src/Tests/Directory.Build.props @@ -3,6 +3,9 @@ 12 false true + true + $(MSBuildThisFileDirectory)\..\..\resources\spectre.snk + $(NoWarn);CS8002 From d56139756c632f4a7b3b1868baaf39ee9b3765a4 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Fri, 30 Aug 2024 08:59:15 +0200 Subject: [PATCH 30/57] Lock SDK for documentation for now --- .github/workflows/publish.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 370d250..c93be95 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,6 +60,9 @@ jobs: - name: Setup .NET SDK uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.302 - name: Setup Node.js uses: actions/setup-node@v4 From 45c24055faf9312e4f6dd90b34950621f2cbd32f Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Fri, 30 Aug 2024 09:01:03 +0200 Subject: [PATCH 31/57] (Hopefully) fix workflow --- .github/workflows/publish.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index c93be95..9c23962 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -61,8 +61,7 @@ jobs: - name: Setup .NET SDK uses: actions/setup-dotnet@v4 with: - dotnet-version: | - 8.0.302 + dotnet-version: 8.0.302 - name: Setup Node.js uses: actions/setup-node@v4 From 56feea11a164118d8fde38904173212745c6393b Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Fri, 30 Aug 2024 09:01:52 +0200 Subject: [PATCH 32/57] Fix the workflow. Third time the charm? --- .github/workflows/publish.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 9c23962..c907d9d 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,8 +60,8 @@ jobs: - name: Setup .NET SDK uses: actions/setup-dotnet@v4 - with: - dotnet-version: 8.0.302 + with: + dotnet-version: 8.0.302 - name: Setup Node.js uses: actions/setup-node@v4 From 96512f353fd5a9e434ee6031fd8332c83ed4ec1e Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Fri, 30 Aug 2024 09:18:07 +0200 Subject: [PATCH 33/57] Fix regression in Razor syntax --- .github/workflows/publish.yaml | 2 -- docs/input/blog/posts/_ViewStart.cshtml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index c907d9d..370d250 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,8 +60,6 @@ jobs: - name: Setup .NET SDK uses: actions/setup-dotnet@v4 - with: - dotnet-version: 8.0.302 - name: Setup Node.js uses: actions/setup-node@v4 diff --git a/docs/input/blog/posts/_ViewStart.cshtml b/docs/input/blog/posts/_ViewStart.cshtml index 451a054..7ecd289 100644 --- a/docs/input/blog/posts/_ViewStart.cshtml +++ b/docs/input/blog/posts/_ViewStart.cshtml @@ -1,3 +1,3 @@ @{ - Layout = @$"_layout.cshtml"; + Layout = "_layout.cshtml"; } \ No newline at end of file From 2081c0fd9a98ec61fe4a08a1d70d76a97b53dbf5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 07:18:58 +0000 Subject: [PATCH 34/57] chore: Update dependency dotnet-sdk to v8.0.401 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index af3eb74..7c3a1a1 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "$schema": "http://json.schemastore.org/global", "sdk": { - "version": "8.0.204", + "version": "8.0.401", "rollForward": "latestFeature" } } From 511f798f0f4d8854565cf70ee843138357e67cc2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 07:31:24 +0000 Subject: [PATCH 35/57] chore: Update dependency Microsoft.NET.Test.Sdk to 17.11.0 --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index b69fb1b..eb61897 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -9,7 +9,7 @@ - + From dc2cb40b7945cc181a906bd8d7623a42c03eb9c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 07:34:46 +0000 Subject: [PATCH 36/57] chore: Update rickstaa/top-issues-action action to v1.3.101 --- .github/workflows/top-issues-dashboard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/top-issues-dashboard.yml b/.github/workflows/top-issues-dashboard.yml index 5a3ac5f..7f08d62 100644 --- a/.github/workflows/top-issues-dashboard.yml +++ b/.github/workflows/top-issues-dashboard.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Top Issues action - uses: rickstaa/top-issues-action@v1.3.100 + uses: rickstaa/top-issues-action@v1.3.101 env: github_token: ${{ secrets.GITHUB_TOKEN }} with: From 753894de94c86efaa36d96bf3475750a6c030474 Mon Sep 17 00:00:00 2001 From: Kirill Osenkov Date: Sun, 1 Sep 2024 16:00:01 -0700 Subject: [PATCH 37/57] Bump Spectre.Verify.Extensions to strong-named version Remove NoWarn now that Spectre.Verify.Extensions is strong-named --- src/Directory.Packages.props | 2 +- src/Tests/Directory.Build.props | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index eb61897..35573dc 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -11,7 +11,7 @@ - + diff --git a/src/Tests/Directory.Build.props b/src/Tests/Directory.Build.props index fc0cdc7..9932e25 100644 --- a/src/Tests/Directory.Build.props +++ b/src/Tests/Directory.Build.props @@ -5,7 +5,6 @@ true true $(MSBuildThisFileDirectory)\..\..\resources\spectre.snk - $(NoWarn);CS8002 From fd69ad0b0100b4f94a42270377c51a554ea56699 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Tue, 3 Sep 2024 00:37:00 +0200 Subject: [PATCH 38/57] Fix search bug in prompt related to custom item types Closes #1626 --- .../Prompts/List/ListPrompt.cs | 3 +- .../Prompts/List/ListPromptState.cs | 22 ++++++++-- .../Prompts/MultiSelectionPrompt.cs | 3 +- .../Prompts/SelectionPrompt.cs | 3 +- .../Unit/Prompts/ListPromptStateTests.cs | 5 ++- .../Unit/Prompts/TextPromptTests.cs | 41 +++++++++++++++++++ 6 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/Spectre.Console/Prompts/List/ListPrompt.cs b/src/Spectre.Console/Prompts/List/ListPrompt.cs index 7f6948c..c668502 100644 --- a/src/Spectre.Console/Prompts/List/ListPrompt.cs +++ b/src/Spectre.Console/Prompts/List/ListPrompt.cs @@ -14,6 +14,7 @@ internal sealed class ListPrompt public async Task> Show( ListPromptTree tree, + Func converter, SelectionMode selectionMode, bool skipUnselectableItems, bool searchEnabled, @@ -41,7 +42,7 @@ internal sealed class ListPrompt } var nodes = tree.Traverse().ToList(); - var state = new ListPromptState(nodes, _strategy.CalculatePageSize(_console, nodes.Count, requestedPageSize), wrapAround, selectionMode, skipUnselectableItems, searchEnabled); + var state = new ListPromptState(nodes, converter, _strategy.CalculatePageSize(_console, nodes.Count, requestedPageSize), wrapAround, selectionMode, skipUnselectableItems, searchEnabled); var hook = new ListPromptRenderHook(_console, () => BuildRenderable(state)); using (new RenderHookScope(_console, hook)) diff --git a/src/Spectre.Console/Prompts/List/ListPromptState.cs b/src/Spectre.Console/Prompts/List/ListPromptState.cs index 177b97e..fdbe3c8 100644 --- a/src/Spectre.Console/Prompts/List/ListPromptState.cs +++ b/src/Spectre.Console/Prompts/List/ListPromptState.cs @@ -3,6 +3,8 @@ namespace Spectre.Console; internal sealed class ListPromptState where T : notnull { + private readonly Func _converter; + public int Index { get; private set; } public int ItemCount => Items.Count; public int PageSize { get; } @@ -16,8 +18,15 @@ internal sealed class ListPromptState public ListPromptItem Current => Items[Index]; public string SearchText { get; private set; } - public ListPromptState(IReadOnlyList> items, int pageSize, bool wrapAround, SelectionMode mode, bool skipUnselectableItems, bool searchEnabled) + public ListPromptState( + IReadOnlyList> items, + Func converter, + int pageSize, bool wrapAround, + SelectionMode mode, + bool skipUnselectableItems, + bool searchEnabled) { + _converter = converter ?? throw new ArgumentNullException(nameof(converter)); Items = items; PageSize = pageSize; WrapAround = wrapAround; @@ -126,7 +135,11 @@ internal sealed class ListPromptState if (!char.IsControl(keyInfo.KeyChar)) { search = SearchText + keyInfo.KeyChar; - var item = Items.FirstOrDefault(x => x.Data.ToString()?.Contains(search, StringComparison.OrdinalIgnoreCase) == true && (!x.IsGroup || Mode != SelectionMode.Leaf)); + + var item = Items.FirstOrDefault(x => + _converter.Invoke(x.Data).Contains(search, StringComparison.OrdinalIgnoreCase) + && (!x.IsGroup || Mode != SelectionMode.Leaf)); + if (item != null) { index = Items.IndexOf(item); @@ -140,7 +153,10 @@ internal sealed class ListPromptState search = search.Substring(0, search.Length - 1); } - var item = Items.FirstOrDefault(x => x.Data.ToString()?.Contains(search, StringComparison.OrdinalIgnoreCase) == true && (!x.IsGroup || Mode != SelectionMode.Leaf)); + var item = Items.FirstOrDefault(x => + _converter.Invoke(x.Data).Contains(search, StringComparison.OrdinalIgnoreCase) && + (!x.IsGroup || Mode != SelectionMode.Leaf)); + if (item != null) { index = Items.IndexOf(item); diff --git a/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs b/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs index 0a02377..8c63e2e 100644 --- a/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs +++ b/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs @@ -94,7 +94,8 @@ public sealed class MultiSelectionPrompt : IPrompt>, IListPromptStrat { // Create the list prompt var prompt = new ListPrompt(console, this); - var result = await prompt.Show(Tree, Mode, false, false, PageSize, WrapAround, cancellationToken).ConfigureAwait(false); + var converter = Converter ?? TypeConverterHelper.ConvertToString; + var result = await prompt.Show(Tree, converter, Mode, false, false, PageSize, WrapAround, cancellationToken).ConfigureAwait(false); if (Mode == SelectionMode.Leaf) { diff --git a/src/Spectre.Console/Prompts/SelectionPrompt.cs b/src/Spectre.Console/Prompts/SelectionPrompt.cs index e6ed46b..c9f5569 100644 --- a/src/Spectre.Console/Prompts/SelectionPrompt.cs +++ b/src/Spectre.Console/Prompts/SelectionPrompt.cs @@ -99,7 +99,8 @@ public sealed class SelectionPrompt : IPrompt, IListPromptStrategy { // Create the list prompt var prompt = new ListPrompt(console, this); - var result = await prompt.Show(_tree, Mode, true, SearchEnabled, PageSize, WrapAround, cancellationToken).ConfigureAwait(false); + var converter = Converter ?? TypeConverterHelper.ConvertToString; + var result = await prompt.Show(_tree, converter, Mode, true, SearchEnabled, PageSize, WrapAround, cancellationToken).ConfigureAwait(false); // Return the selected item return result.Items[result.Index].Data; diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs index cda4f37..2a45b66 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs @@ -3,7 +3,10 @@ namespace Spectre.Console.Tests.Unit; public sealed class ListPromptStateTests { private ListPromptState CreateListPromptState(int count, int pageSize, bool shouldWrap, bool searchEnabled) - => new(Enumerable.Range(0, count).Select(i => new ListPromptItem(i.ToString())).ToList(), pageSize, shouldWrap, SelectionMode.Independent, true, searchEnabled); + => new( + Enumerable.Range(0, count).Select(i => new ListPromptItem(i.ToString())).ToList(), + text => text, + pageSize, shouldWrap, SelectionMode.Independent, true, searchEnabled); [Fact] public void Should_Have_Start_Index_Zero() diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs index c358b9b..4d95dc5 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs @@ -410,4 +410,45 @@ public sealed class TextPromptTests // Then return Verifier.Verify(console.Output); } + + [Fact] + public void Should_Search_In_Remapped_Result() + { + // Given + var console = new TestConsole(); + console.Profile.Capabilities.Interactive = true; + console.EmitAnsiSequences(); + console.Input.PushText("2"); + console.Input.PushKey(ConsoleKey.Enter); + + var choices = new List + { + new(33, "Item 1"), + new(34, "Item 2"), + }; + + var prompt = new SelectionPrompt() + .Title("Select one") + .EnableSearch() + .UseConverter(o => o.Name) + .AddChoices(choices); + + // When + var selection = prompt.Show(console); + + // Then + selection.ShouldBe(choices[1]); + } +} + +file sealed class CustomSelectionItem +{ + public int Value { get; } + public string Name { get; } + + public CustomSelectionItem(int value, string name) + { + Value = value; + Name = name ?? throw new ArgumentNullException(nameof(name)); + } } From 8e44a837373f1ad3c390cb4fd5af45624d0b5722 Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Thu, 5 Sep 2024 19:16:57 -0300 Subject: [PATCH 39/57] Simplify InternalsVisibleTo If the $(PublicKey) property is used, the SDK targets will automatically use it for the assembly attributes. See https://github.com/dotnet/sdk/pull/3439 Simplifies https://github.com/spectreconsole/spectre.console/pull/1623 --- src/Directory.Build.props | 2 +- src/Spectre.Console.Cli/Spectre.Console.Cli.csproj | 2 +- src/Spectre.Console.Testing/Spectre.Console.Testing.csproj | 4 ++-- src/Spectre.Console/Spectre.Console.csproj | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 5a3320a..f5089da 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -11,7 +11,7 @@ $(NoWarn);SA1633 true $(MSBuildThisFileDirectory)\..\resources\spectre.snk - 00240000048000009400000006020000002400005253413100040000010001006146d3789d31477cf4a3b508dcf772ff9ccad8613f6bd6b17b9c4a960a7a7b551ecd22e4f4119ced70ee8bbdf3ca0a117c99fd6248c16255ea9033110c2233d42e74e81bf4f3f7eb09bfe8b53ad399d957514f427171a86f5fe9fe0014be121d571c80c4a0cfc3531bdbf5a2900d936d93f2c94171b9134f7644a1ac3612a0d0 + 00240000048000009400000006020000002400005253413100040000010001006146d3789d31477cf4a3b508dcf772ff9ccad8613f6bd6b17b9c4a960a7a7b551ecd22e4f4119ced70ee8bbdf3ca0a117c99fd6248c16255ea9033110c2233d42e74e81bf4f3f7eb09bfe8b53ad399d957514f427171a86f5fe9fe0014be121d571c80c4a0cfc3531bdbf5a2900d936d93f2c94171b9134f7644a1ac3612a0d0 diff --git a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj index ca431bf..4eab385 100644 --- a/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj +++ b/src/Spectre.Console.Cli/Spectre.Console.Cli.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj index 9e61a36..4b65da9 100644 --- a/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj +++ b/src/Spectre.Console.Testing/Spectre.Console.Testing.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/src/Spectre.Console/Spectre.Console.csproj b/src/Spectre.Console/Spectre.Console.csproj index 8c73026..49a5504 100644 --- a/src/Spectre.Console/Spectre.Console.csproj +++ b/src/Spectre.Console/Spectre.Console.csproj @@ -7,7 +7,7 @@ - + From b9d2d2df6d74fc997e2e1ab3c9144e5739f9be4a Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Sun, 4 Aug 2024 16:01:41 -0300 Subject: [PATCH 40/57] Add spanish translation for help strings --- .../Resources/HelpProvider.es.resx | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/Spectre.Console.Cli/Resources/HelpProvider.es.resx diff --git a/src/Spectre.Console.Cli/Resources/HelpProvider.es.resx b/src/Spectre.Console.Cli/Resources/HelpProvider.es.resx new file mode 100644 index 0000000..0f710f5 --- /dev/null +++ b/src/Spectre.Console.Cli/Resources/HelpProvider.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ARGUMENTOS + + + COMANDO + + + COMMANDOS + + + POR DEFECTO + + + DESCRIPCION + + + EJEMPLOS + + + OPCIONES + + + Imprime información de ayuda + + + Imprime información de versión + + + USO + + \ No newline at end of file From 32361d3f15eaabed01f010fe880c1c3a7b7d91b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Luthi?= Date: Sat, 7 Sep 2024 16:19:55 +0200 Subject: [PATCH 41/57] Cleanup prompt tests (#1635) * Move Should_Search_In_Remapped_Result into the SelectionPromptTests class where it belongs * Use file sealed class for CustomItem, like it's done with CustomSelectionItem in the selection prompt tests --- .../Unit/Prompts/MultiSelectionPromptTests.cs | 38 ++++++++--------- .../Unit/Prompts/SelectionPromptTests.cs | 41 +++++++++++++++++++ .../Unit/Prompts/TextPromptTests.cs | 41 ------------------- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs index 70a27ba..405e154 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs @@ -2,25 +2,6 @@ namespace Spectre.Console.Tests.Unit; public sealed class MultiSelectionPromptTests { - private class CustomItem - { - public int X { get; set; } - public int Y { get; set; } - - public class Comparer : IEqualityComparer - { - public bool Equals(CustomItem x, CustomItem y) - { - return x.X == y.X && x.Y == y.Y; - } - - public int GetHashCode(CustomItem obj) - { - throw new NotSupportedException(); - } - } - } - [Fact] public void Should_Not_Mark_Item_As_Selected_By_Default() { @@ -147,3 +128,22 @@ public sealed class MultiSelectionPromptTests action.ShouldThrow(); } } + +file sealed class CustomItem +{ + public int X { get; set; } + public int Y { get; set; } + + public class Comparer : IEqualityComparer + { + public bool Equals(CustomItem x, CustomItem y) + { + return x.X == y.X && x.Y == y.Y; + } + + public int GetHashCode(CustomItem obj) + { + throw new NotSupportedException(); + } + } +} diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs index 5878c9d..9d3e7ac 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs @@ -85,4 +85,45 @@ public sealed class SelectionPromptTests // Then console.Output.ShouldContain($"{ESC}[38;5;12m> Item {ESC}[0m{ESC}[1;38;5;12;48;5;11m1{ESC}[0m"); } + + [Fact] + public void Should_Search_In_Remapped_Result() + { + // Given + var console = new TestConsole(); + console.Profile.Capabilities.Interactive = true; + console.EmitAnsiSequences(); + console.Input.PushText("2"); + console.Input.PushKey(ConsoleKey.Enter); + + var choices = new List + { + new(33, "Item 1"), + new(34, "Item 2"), + }; + + var prompt = new SelectionPrompt() + .Title("Select one") + .EnableSearch() + .UseConverter(o => o.Name) + .AddChoices(choices); + + // When + var selection = prompt.Show(console); + + // Then + selection.ShouldBe(choices[1]); + } +} + +file sealed class CustomSelectionItem +{ + public int Value { get; } + public string Name { get; } + + public CustomSelectionItem(int value, string name) + { + Value = value; + Name = name ?? throw new ArgumentNullException(nameof(name)); + } } diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs index 4d95dc5..c358b9b 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs @@ -410,45 +410,4 @@ public sealed class TextPromptTests // Then return Verifier.Verify(console.Output); } - - [Fact] - public void Should_Search_In_Remapped_Result() - { - // Given - var console = new TestConsole(); - console.Profile.Capabilities.Interactive = true; - console.EmitAnsiSequences(); - console.Input.PushText("2"); - console.Input.PushKey(ConsoleKey.Enter); - - var choices = new List - { - new(33, "Item 1"), - new(34, "Item 2"), - }; - - var prompt = new SelectionPrompt() - .Title("Select one") - .EnableSearch() - .UseConverter(o => o.Name) - .AddChoices(choices); - - // When - var selection = prompt.Show(console); - - // Then - selection.ShouldBe(choices[1]); - } -} - -file sealed class CustomSelectionItem -{ - public int Value { get; } - public string Name { get; } - - public CustomSelectionItem(int value, string name) - { - Value = value; - Name = name ?? throw new ArgumentNullException(nameof(name)); - } } From 32384f7b8d7a3c55b8138965e61177152c61de22 Mon Sep 17 00:00:00 2001 From: "d.piccinini" Date: Thu, 22 Jun 2023 12:12:43 +0200 Subject: [PATCH 42/57] Add custom highligh style for single calendar event --- .../Extensions/CalendarExtensions.cs | 22 +++++++++------- src/Spectre.Console/Widgets/Calendar.cs | 7 +++--- src/Spectre.Console/Widgets/CalendarEvent.cs | 25 +++++++++++++------ 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/Spectre.Console/Extensions/CalendarExtensions.cs b/src/Spectre.Console/Extensions/CalendarExtensions.cs index 8662626..7ea9358 100644 --- a/src/Spectre.Console/Extensions/CalendarExtensions.cs +++ b/src/Spectre.Console/Extensions/CalendarExtensions.cs @@ -10,10 +10,11 @@ public static class CalendarExtensions /// /// The calendar to add the calendar event to. /// The calendar event date. + /// The calendar event custom highlight style. /// The same instance so that multiple calls can be chained. - public static Calendar AddCalendarEvent(this Calendar calendar, DateTime date) + public static Calendar AddCalendarEvent(this Calendar calendar, DateTime date, Style? customEventHighlightStyle = null) { - return AddCalendarEvent(calendar, string.Empty, date.Year, date.Month, date.Day); + return AddCalendarEvent(calendar, string.Empty, date.Year, date.Month, date.Day, customEventHighlightStyle); } /// @@ -22,10 +23,11 @@ public static class CalendarExtensions /// The calendar to add the calendar event to. /// The calendar event description. /// The calendar event date. + /// The calendar event custom highlight style. /// The same instance so that multiple calls can be chained. - public static Calendar AddCalendarEvent(this Calendar calendar, string description, DateTime date) + public static Calendar AddCalendarEvent(this Calendar calendar, string description, DateTime date, Style? customEventHighlightStyle = null) { - return AddCalendarEvent(calendar, description, date.Year, date.Month, date.Day); + return AddCalendarEvent(calendar, description, date.Year, date.Month, date.Day, customEventHighlightStyle); } /// @@ -35,10 +37,11 @@ public static class CalendarExtensions /// The year of the calendar event. /// The month of the calendar event. /// The day of the calendar event. + /// The calendar event custom highlight style. /// The same instance so that multiple calls can be chained. - public static Calendar AddCalendarEvent(this Calendar calendar, int year, int month, int day) + public static Calendar AddCalendarEvent(this Calendar calendar, int year, int month, int day, Style? customEventHighlightStyle = null) { - return AddCalendarEvent(calendar, string.Empty, year, month, day); + return AddCalendarEvent(calendar, string.Empty, year, month, day, customEventHighlightStyle); } /// @@ -49,15 +52,16 @@ public static class CalendarExtensions /// The year of the calendar event. /// The month of the calendar event. /// The day of the calendar event. + /// The calendar event custom highlight style. /// The same instance so that multiple calls can be chained. - public static Calendar AddCalendarEvent(this Calendar calendar, string description, int year, int month, int day) + public static Calendar AddCalendarEvent(this Calendar calendar, string description, int year, int month, int day, Style? customEventHighlightStyle = null) { if (calendar is null) { throw new ArgumentNullException(nameof(calendar)); } - calendar.CalendarEvents.Add(new CalendarEvent(description, year, month, day)); + calendar.CalendarEvents.Add(new CalendarEvent(description, year, month, day, customEventHighlightStyle)); return calendar; } @@ -65,7 +69,7 @@ public static class CalendarExtensions /// Sets the calendar's highlight . /// /// The calendar. - /// The highlight style. + /// The default highlight style. /// The same instance so that multiple calls can be chained. public static Calendar HighlightStyle(this Calendar calendar, Style? style) { diff --git a/src/Spectre.Console/Widgets/Calendar.cs b/src/Spectre.Console/Widgets/Calendar.cs index 18f1589..0448cdd 100644 --- a/src/Spectre.Console/Widgets/Calendar.cs +++ b/src/Spectre.Console/Widgets/Calendar.cs @@ -195,10 +195,11 @@ public sealed class Calendar : JustInTimeRenderable, IHasCulture, IHasTableBorde while (currentDay <= daysInMonth) { if (weekdays[currentDay - 1] == weekday) - { - if (_calendarEvents.Any(e => e.Month == Month && e.Day == currentDay)) + { + var todayEvent = _calendarEvents.LastOrDefault(e => e.Month == Month && e.Day == currentDay); + if (todayEvent != null) { - row.Add(new Markup(currentDay.ToString(CultureInfo.InvariantCulture) + "*", _highlightStyle)); + row.Add(new Markup(currentDay.ToString(CultureInfo.InvariantCulture) + "*", todayEvent.CustomHighlightStyle ?? _highlightStyle)); } else { diff --git a/src/Spectre.Console/Widgets/CalendarEvent.cs b/src/Spectre.Console/Widgets/CalendarEvent.cs index 68f3dc7..588e720 100644 --- a/src/Spectre.Console/Widgets/CalendarEvent.cs +++ b/src/Spectre.Console/Widgets/CalendarEvent.cs @@ -25,29 +25,38 @@ public sealed class CalendarEvent /// public int Day { get; } + /// + /// Gets the custom highlight style of the calendar event. + /// + public Style? CustomHighlightStyle { get; } + /// /// Initializes a new instance of the class. /// /// The year of the calendar event. /// The month of the calendar event. - /// The day of the calendar event. - public CalendarEvent(int year, int month, int day) - : this(string.Empty, year, month, day) + /// The day of the calendar event. + /// The custom highlight style of the calendar event. + public CalendarEvent(int year, int month, int day, Style? customHighlightStyle = null) + : this(string.Empty, year, month, day, customHighlightStyle) { - } - + } + /// /// Initializes a new instance of the class. /// /// The calendar event description. /// The year of the calendar event. /// The month of the calendar event. - /// The day of the calendar event. - public CalendarEvent(string description, int year, int month, int day) + /// The day of the calendar event. + /// The custom highlight style of the calendar event. + public CalendarEvent(string description, int year, int month, int day, Style? customHighlightStyle = null) { Description = description ?? string.Empty; Year = year; Month = month; - Day = day; + Day = day; + CustomHighlightStyle = customHighlightStyle; + } } \ No newline at end of file From 3437130bf0680037e53564a8765c08a8b9717d6e Mon Sep 17 00:00:00 2001 From: "d.piccinini" Date: Thu, 22 Jun 2023 12:14:40 +0200 Subject: [PATCH 43/57] Removed blank line --- src/Spectre.Console/Widgets/CalendarEvent.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Spectre.Console/Widgets/CalendarEvent.cs b/src/Spectre.Console/Widgets/CalendarEvent.cs index 588e720..bc8bf52 100644 --- a/src/Spectre.Console/Widgets/CalendarEvent.cs +++ b/src/Spectre.Console/Widgets/CalendarEvent.cs @@ -56,7 +56,6 @@ public sealed class CalendarEvent Year = year; Month = month; Day = day; - CustomHighlightStyle = customHighlightStyle; - + CustomHighlightStyle = customHighlightStyle; } } \ No newline at end of file From 156d25420854fe954f82715a46de9743581a0d7b Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Wed, 21 Jun 2023 21:00:53 +0200 Subject: [PATCH 44/57] Fix issue 1153 on expanded tree --- src/Spectre.Console/Widgets/Tree.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Spectre.Console/Widgets/Tree.cs b/src/Spectre.Console/Widgets/Tree.cs index 289884e..859b53f 100644 --- a/src/Spectre.Console/Widgets/Tree.cs +++ b/src/Spectre.Console/Widgets/Tree.cs @@ -23,10 +23,19 @@ public sealed class Tree : Renderable, IHasTreeNodes /// public List Nodes => _root.Nodes; + private bool _expanded { get; set; } = true; /// /// Gets or sets a value indicating whether or not the tree is expanded or not. /// - public bool Expanded { get; set; } = true; + public bool Expanded + { + get => _expanded; + set + { + _expanded = value; + _root.Expand(value); + } + } /// /// Initializes a new instance of the class. From 322ed2efbbe8151c49ee3411fdbc30e6e7cbb421 Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Wed, 21 Jun 2023 21:43:21 +0200 Subject: [PATCH 45/57] Fix error SA1300 in full property creation --- src/Spectre.Console/Widgets/Tree.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Spectre.Console/Widgets/Tree.cs b/src/Spectre.Console/Widgets/Tree.cs index 859b53f..6b6b220 100644 --- a/src/Spectre.Console/Widgets/Tree.cs +++ b/src/Spectre.Console/Widgets/Tree.cs @@ -7,6 +7,7 @@ namespace Spectre.Console; public sealed class Tree : Renderable, IHasTreeNodes { private readonly TreeNode _root; + private bool _expanded = true; /// /// Gets or sets the tree style. @@ -23,7 +24,6 @@ public sealed class Tree : Renderable, IHasTreeNodes /// public List Nodes => _root.Nodes; - private bool _expanded { get; set; } = true; /// /// Gets or sets a value indicating whether or not the tree is expanded or not. /// @@ -36,7 +36,6 @@ public sealed class Tree : Renderable, IHasTreeNodes _root.Expand(value); } } - /// /// Initializes a new instance of the class. /// From dba7ad087530387f0823fb46d179be2724436b1a Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Wed, 21 Jun 2023 22:08:01 +0200 Subject: [PATCH 46/57] Fix SA1513 line 38 Tree.cs --- src/Spectre.Console/Widgets/Tree.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Spectre.Console/Widgets/Tree.cs b/src/Spectre.Console/Widgets/Tree.cs index 6b6b220..91f1540 100644 --- a/src/Spectre.Console/Widgets/Tree.cs +++ b/src/Spectre.Console/Widgets/Tree.cs @@ -36,6 +36,7 @@ public sealed class Tree : Renderable, IHasTreeNodes _root.Expand(value); } } + /// /// Initializes a new instance of the class. /// From f8a4b2271de9e733ce0d763175c03b50f4b80dd3 Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Thu, 29 Jun 2023 21:32:58 +0200 Subject: [PATCH 47/57] Add unit test to ensure code coverage --- .../Unit/Widgets/TreeTests.cs | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs index c731af9..73912a0 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs @@ -72,4 +72,57 @@ public class TreeTests // Then result.ShouldBeOfType(); } + + [Fact] + [Expectation("Render_NoChildren_OfCollapsed")] + public void Should_Render_Tree_With_No_Child_Of_Collapsed_Nodes_Correctly() + { + // Given + var console = new TestConsole(); + var tree = new Tree(new Text("Root node")); + var node1 = new TreeNode(new Text("Node level 1")); + node1.AddNode(new TreeNode(new Text("Node level 2"))); + tree.AddNode(node1); + node1.Expanded = false; + + // When + console.Write(tree); + + // Then + console.Output.SplitLines() + .Select(x => x.Trim()) + .ToArray() + .ShouldBeEquivalentTo(new[] + { + "Root node", + "└── Node level 1", + string.Empty, + }); + } + + [Fact] + [Expectation("Render_NoChildren_IfRouteCollapsed")] + public void Should_Render_Tree_With_No_Child_If_Route_Collapsed_Correctly() + { + // Given + var console = new TestConsole(); + var tree = new Tree(new Text("Root node")); + var node1 = new TreeNode(new Text("Node level 1")); + node1.AddNode(new TreeNode(new Text("Node level 2"))); + tree.AddNode(node1); + tree.Expanded = false; + + // When + console.Write(tree); + + // Then + console.Output.SplitLines() + .Select(x => x.Trim()) + .ToArray() + .ShouldBeEquivalentTo(new[] + { + "Root node", + string.Empty, + }); + } } From a55b80220d23b714139281bb2ee8c28a0b6ebad3 Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Mon, 9 Sep 2024 16:35:01 +0200 Subject: [PATCH 48/57] Enhance the style of the checkboxes for multi-selection (#1244) * Enhance the checkboxes' style for multi-selection by applying the selected style, if available, to the checkboxes currently selected. --- .../Prompts/List/ListPromptConstants.cs | 11 +++++++++++ .../Prompts/MultiSelectionPrompt.cs | 3 +-- src/Spectre.Console/Widgets/Calendar.cs | 2 +- src/Spectre.Console/Widgets/CalendarEvent.cs | 14 +++++++------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Spectre.Console/Prompts/List/ListPromptConstants.cs b/src/Spectre.Console/Prompts/List/ListPromptConstants.cs index 4c0e2b0..ea1f32e 100644 --- a/src/Spectre.Console/Prompts/List/ListPromptConstants.cs +++ b/src/Spectre.Console/Prompts/List/ListPromptConstants.cs @@ -9,4 +9,15 @@ internal sealed class ListPromptConstants public const string InstructionsMarkup = "[grey](Press to select, to accept)[/]"; public const string MoreChoicesMarkup = "[grey](Move up and down to reveal more choices)[/]"; public const string SearchPlaceholderMarkup = "[grey](Type to search)[/]"; + + public static string GetSelectedCheckbox(bool isGroup, SelectionMode mode, Style? style = null) + { + if (style != null) + { + return "[[" + $"[{style.ToMarkup()}]X[/]" + "]]"; + } + + return isGroup && mode == SelectionMode.Leaf + ? GroupSelectedCheckbox : SelectedCheckbox; + } } \ No newline at end of file diff --git a/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs b/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs index 8c63e2e..ffc3f4e 100644 --- a/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs +++ b/src/Spectre.Console/Prompts/MultiSelectionPrompt.cs @@ -257,8 +257,7 @@ public sealed class MultiSelectionPrompt : IPrompt>, IListPromptStrat } var checkbox = item.Node.IsSelected - ? (item.Node.IsGroup && Mode == SelectionMode.Leaf - ? ListPromptConstants.GroupSelectedCheckbox : ListPromptConstants.SelectedCheckbox) + ? ListPromptConstants.GetSelectedCheckbox(item.Node.IsGroup, Mode, HighlightStyle) : ListPromptConstants.Checkbox; grid.AddRow(new Markup(indent + prompt + " " + checkbox + " " + text, style)); diff --git a/src/Spectre.Console/Widgets/Calendar.cs b/src/Spectre.Console/Widgets/Calendar.cs index 0448cdd..124b62c 100644 --- a/src/Spectre.Console/Widgets/Calendar.cs +++ b/src/Spectre.Console/Widgets/Calendar.cs @@ -195,7 +195,7 @@ public sealed class Calendar : JustInTimeRenderable, IHasCulture, IHasTableBorde while (currentDay <= daysInMonth) { if (weekdays[currentDay - 1] == weekday) - { + { var todayEvent = _calendarEvents.LastOrDefault(e => e.Month == Month && e.Day == currentDay); if (todayEvent != null) { diff --git a/src/Spectre.Console/Widgets/CalendarEvent.cs b/src/Spectre.Console/Widgets/CalendarEvent.cs index bc8bf52..3231823 100644 --- a/src/Spectre.Console/Widgets/CalendarEvent.cs +++ b/src/Spectre.Console/Widgets/CalendarEvent.cs @@ -28,34 +28,34 @@ public sealed class CalendarEvent /// /// Gets the custom highlight style of the calendar event. /// - public Style? CustomHighlightStyle { get; } - + public Style? CustomHighlightStyle { get; } + /// /// Initializes a new instance of the class. /// /// The year of the calendar event. /// The month of the calendar event. - /// The day of the calendar event. + /// The day of the calendar event. /// The custom highlight style of the calendar event. public CalendarEvent(int year, int month, int day, Style? customHighlightStyle = null) : this(string.Empty, year, month, day, customHighlightStyle) { - } - + } + /// /// Initializes a new instance of the class. /// /// The calendar event description. /// The year of the calendar event. /// The month of the calendar event. - /// The day of the calendar event. + /// The day of the calendar event. /// The custom highlight style of the calendar event. public CalendarEvent(string description, int year, int month, int day, Style? customHighlightStyle = null) { Description = description ?? string.Empty; Year = year; Month = month; - Day = day; + Day = day; CustomHighlightStyle = customHighlightStyle; } } \ No newline at end of file From 78f3f80b177440f832aa092d3ef88bd071dd5542 Mon Sep 17 00:00:00 2001 From: Davide Piccinini Date: Tue, 10 Sep 2024 09:03:20 +0200 Subject: [PATCH 49/57] Update documentation: add example for the Text Prompt usage (#1636) --- docs/input/prompts/text.md | 118 +++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/docs/input/prompts/text.md b/docs/input/prompts/text.md index 953fd54..4e19e25 100644 --- a/docs/input/prompts/text.md +++ b/docs/input/prompts/text.md @@ -27,6 +27,32 @@ you can use the `Prompt`. Run prompt example? [y/n] (y): _ ``` +### Usage + +```csharp +// Ask the user to confirm +var confirmation = AnsiConsole.Prompt( + new TextPrompt("Run prompt example?") + .AddChoice(true) + .AddChoice(false) + .DefaultValue(true) + .WithConverter(choice => choice ? "y" : "n")); + +// Echo the confirmation back to the terminal +Console.WriteLine(confirmation ? "Confirmed" : "Declined"); +``` + +Otherwise it is possible to use the `ConfirmationPrompt` + +```csharp +// Ask the user to confirm +var confirmation = AnsiConsole.Prompt( + new ConfirmationPrompt("Run prompt example?")); + +// Echo the confirmation back to the terminal +Console.WriteLine(confirmation ? "Confirmed" : "Declined"); +``` + ## Simple @@ -36,6 +62,30 @@ What's your name? Patrik What's your age? 37 ``` +### Usage + +```csharp +// Ask the user a couple of simple questions +var name = AnsiConsole.Prompt( + new TextPrompt("What's your name?")); +var age = AnsiConsole.Prompt( + new TextPrompt("What's your age?")); + +// Echo the name and age back to the terminal +AnsiConsole.WriteLine($"So you're {name} and you're {age} years old"); +``` + +Otherwise it is possible to use the `Ask` method + +```csharp +// Ask the user a couple of simple questions +var name = AnsiConsole.Ask("What's your name?"); +var age = AnsiConsole.Ask("What's your age?"); + +// Echo the name and age back to the terminal +AnsiConsole.WriteLine($"So you're {name} and you're {age} years old"); +``` + ## Choices @@ -44,6 +94,19 @@ What's your age? 37 What's your favorite fruit? [Apple/Banana/Orange] (Orange): _ ``` +### Usage + +```csharp +// Ask for the user's favorite fruit +var fruit = AnsiConsole.Prompt( + new TextPrompt("What's your favorite fruit?") + .AddChoices(["Apple", "Banana", "Orange"]) + .DefaultValue("Orange")); + +// Echo the fruit back to the terminal +Console.WriteLine($"I agree. {fruit} is tasty!"); +``` + ## Validation @@ -56,6 +119,23 @@ Too high What's the secret number? _ ``` +### Usage + +```csharp +// Ask the user to guess the secret number +var number = AnsiConsole.Prompt( + new TextPrompt("What's the secret number?") + .Validate((n) => n switch + { + < 50 => ValidationResult.Error("Too low"), + 50 => ValidationResult.Success(), + > 50 => ValidationResult.Error("Too high"), + })); + +// Echo the user's success back to the terminal +Console.WriteLine($"Correct! The secret number is {number}."); +``` + ## Secrets @@ -65,6 +145,18 @@ What's the secret number? _ Enter password: ************_ ``` +### Usage + +```csharp +// Ask the user to enter the password +var password = AnsiConsole.Prompt( + new TextPrompt("Enter password:") + .Secret()); + +// Echo the password back to the terminal +Console.WriteLine($"Joking is not a secret that your password is {password}"); +``` + ## Masks @@ -82,10 +174,36 @@ You can utilize a null character to completely hide input. Enter password: _ ``` +### Usage + +```csharp +// Ask the user to enter the password +var password = AnsiConsole.Prompt( + new TextPrompt("Enter password:") + .Secret('-')); + +// Echo the password back to the terminal +Console.WriteLine($"Joking is not a secret that your password is {password}"); +``` + ## Optional ```text [Optional] Favorite color? _ +``` + +### Usage + +```csharp +// Ask the user to enter the password +var color = AnsiConsole.Prompt( + new TextPrompt("[[Optional]] Favorite color?") + .AllowEmpty()); + +// Echo the color back to the terminal +Console.WriteLine(string.IsNullOrWhiteSpace(color) + ? "You're right, all colors are beautiful" + : $"I agree. {color} is a very beautiful color"); ``` \ No newline at end of file From 1345a6347af32d3839a26830ec27f7dc991af2a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 08:52:25 +0200 Subject: [PATCH 50/57] chore: Update dependency MinVer to v6 (#1629) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 35573dc..f2dc269 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,7 +4,7 @@ - + From 23b160a3f590910b5b74642f28cf1ebb2f64894a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 08:57:27 +0200 Subject: [PATCH 51/57] chore: Update dependency Verify.Xunit to 26.4.4 (#1624) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index f2dc269..6952c31 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -12,7 +12,7 @@ - + From b470af11f7ba3fc97e29a51ab5e55aecf5346aba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:00:27 +0200 Subject: [PATCH 52/57] chore: Update dependency Microsoft.NET.Test.Sdk to 17.11.1 (#1630) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 6952c31..1fa1eff 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -9,7 +9,7 @@ - + From c70a8b8fc55bfa388773f923e648a9f7e51287b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Luthi?= Date: Tue, 10 Sep 2024 14:01:32 +0200 Subject: [PATCH 53/57] Improve exception if a (multi)selection prompt is used incorrectly Before this commit, the selection prompt would throw an `InvalidOperationException` (Sequence contains no elements) and the multi selection prompt would throw an `ArgumentOutOfRangeException` (Index was out of range. Must be non-negative and less than the size of the collection.) Both would occur because the prompts were never meant to be empty. --- src/Spectre.Console/Prompts/List/ListPrompt.cs | 5 +++++ .../Unit/Prompts/MultiSelectionPromptTests.cs | 17 +++++++++++++++++ .../Unit/Prompts/SelectionPromptTests.cs | 16 ++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/Spectre.Console/Prompts/List/ListPrompt.cs b/src/Spectre.Console/Prompts/List/ListPrompt.cs index c668502..ca0fa3f 100644 --- a/src/Spectre.Console/Prompts/List/ListPrompt.cs +++ b/src/Spectre.Console/Prompts/List/ListPrompt.cs @@ -42,6 +42,11 @@ internal sealed class ListPrompt } var nodes = tree.Traverse().ToList(); + if (nodes.Count == 0) + { + throw new InvalidOperationException("Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt."); + } + var state = new ListPromptState(nodes, converter, _strategy.CalculatePageSize(_console, nodes.Count, requestedPageSize), wrapAround, selectionMode, skipUnselectableItems, searchEnabled); var hook = new ListPromptRenderHook(_console, () => BuildRenderable(state)); diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs index 405e154..43b1d5c 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs @@ -127,6 +127,23 @@ public sealed class MultiSelectionPromptTests // Then action.ShouldThrow(); } + + [Fact] public void Should_Throw_Meaningful_Exception_For_Empty_Prompt() + { + // Given + var console = new TestConsole(); + console.Profile.Capabilities.Interactive = true; + console.Input.PushKey(ConsoleKey.Spacebar); + + var prompt = new MultiSelectionPrompt(); + + // When + Action action = () => prompt.Show(console); + + // Then + var exception = action.ShouldThrow(); + exception.Message.ShouldBe("Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt."); + } } file sealed class CustomItem diff --git a/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs index 9d3e7ac..2e066c5 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs @@ -114,6 +114,22 @@ public sealed class SelectionPromptTests // Then selection.ShouldBe(choices[1]); } + + [Fact] public void Should_Throw_Meaningful_Exception_For_Empty_Prompt() + { + // Given + var console = new TestConsole(); + console.Profile.Capabilities.Interactive = true; + + var prompt = new SelectionPrompt(); + + // When + Action action = () => prompt.Show(console); + + // Then + var exception = action.ShouldThrow(); + exception.Message.ShouldBe("Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt."); + } } file sealed class CustomSelectionItem From 7f8ed509bba6d22a8345d85fd231369f86485774 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Sat, 14 Sep 2024 12:59:19 +0200 Subject: [PATCH 54/57] Fix strange sentence in docs --- docs/input/prompts/text.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/input/prompts/text.md b/docs/input/prompts/text.md index 4e19e25..1c75b55 100644 --- a/docs/input/prompts/text.md +++ b/docs/input/prompts/text.md @@ -154,7 +154,7 @@ var password = AnsiConsole.Prompt( .Secret()); // Echo the password back to the terminal -Console.WriteLine($"Joking is not a secret that your password is {password}"); +Console.WriteLine($"Your password is {password}"); ``` ## Masks @@ -183,7 +183,7 @@ var password = AnsiConsole.Prompt( .Secret('-')); // Echo the password back to the terminal -Console.WriteLine($"Joking is not a secret that your password is {password}"); +Console.WriteLine($"Your password is {password}"); ``` ## Optional From 22d1cbe01f1cb4d90428c56994c3e7c12cd3be06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:16:01 +0000 Subject: [PATCH 55/57] chore: Update dependency Roslynator.Analyzers to 4.12.5 --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 1fa1eff..8a0f0d6 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -24,7 +24,7 @@ - + \ No newline at end of file From 75547b24366c3898d919c9a69f86c1d611fdf536 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:36:56 +0000 Subject: [PATCH 56/57] chore: Update dependency Verify.Xunit to 26.4.5 --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 8a0f0d6..0c9ab6e 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -12,7 +12,7 @@ - + From a32dc8030b17e1205d01a24957a13431b4cf33dc Mon Sep 17 00:00:00 2001 From: Arman Ossi Loko Date: Thu, 17 Oct 2024 23:38:15 +0200 Subject: [PATCH 57/57] Fixed docs examples URLs redirecting to the examples repository --- docs/input/cli/command-help.md | 2 +- docs/input/cli/commandApp.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/input/cli/command-help.md b/docs/input/cli/command-help.md index f83eca6..0e4a6e9 100644 --- a/docs/input/cli/command-help.md +++ b/docs/input/cli/command-help.md @@ -71,5 +71,5 @@ public static class Program } ``` -There is a working [example of a custom help provider](https://github.com/spectreconsole/spectre.console/tree/main/examples/Cli/Help) demonstrating this. +There is a working [example of a custom help provider](https://github.com/spectreconsole/examples/tree/main/examples/Cli/Help) demonstrating this. diff --git a/docs/input/cli/commandApp.md b/docs/input/cli/commandApp.md index 182cb37..ff479b6 100644 --- a/docs/input/cli/commandApp.md +++ b/docs/input/cli/commandApp.md @@ -75,7 +75,7 @@ var app = new CommandApp(registrar); return app.Run(args); ``` -`TypeRegistrar` is a custom class that must be created by the user. This [example using `Microsoft.Extensions.DependencyInjection` as the container](https://github.com/spectreconsole/spectre.console/tree/main/examples/Cli/Injection) provides an example `TypeRegistrar` and `TypeResolver` that can be added to your application with small adjustments for your DI container. +`TypeRegistrar` is a custom class that must be created by the user. This [example using `Microsoft.Extensions.DependencyInjection` as the container](https://github.com/spectreconsole/examples/tree/main/examples/Cli/Injection) provides an example `TypeRegistrar` and `TypeResolver` that can be added to your application with small adjustments for your DI container. Hint: If you do write your own implementation of `TypeRegistrar` and `TypeResolver` and you have some form of unit tests in place for your project, there is a utility `TypeRegistrarBaseTests` available that can be used to ensure your implementations adhere to the required implementation. Simply call `TypeRegistrarBaseTests.RunAllTests()` and expect no `TypeRegistrarBaseTests.TestFailedException` to be thrown. @@ -89,4 +89,4 @@ This provides an opportunity to modify the result and also to tear down any infr The `Intercept`-Method of each interceptor is run before the command is executed and the `InterceptResult`-Method is run after it. These are typically used for configuring logging or other infrastructure concerns. -For an example of using the interceptor to configure logging, see the [Serilog demo](https://github.com/spectreconsole/spectre.console/tree/main/examples/Cli/Logging). +For an example of using the interceptor to configure logging, see the [Serilog demo](https://github.com/spectreconsole/examples/tree/main/examples/Cli/Logging). \ No newline at end of file