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 c0f1cd81..eb3f1be1 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 76b7581d..7004c8ff 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 23bff61c..0d171668 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 00000000..e296413d --- /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 9df30384..18379bdc 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 00000000..56a04ab6 --- /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 b12a8feb..224a1d31 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 dc6ee2fc..dd40949e 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 e93dabf5..8604355d 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 fd01732a..85a6e1f1 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 02a39478..06d4157b 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 f84f33a9..7e58591d 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 c175ec4b..89a2876b 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 8127416f..acd3b605 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 0c34da5b..2c2b1594 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 00000000..ea775cff --- /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 e74335a6..69ba6c24 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 00000000..ec88fd13 --- /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 54152a0e..e4fad73a 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 78f01ebb..27e6edbc 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 716bd310..4080c6e2 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 92febae3..378ec16c 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 6064bb5f..e9e38dc2 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 7004c8ff..082ca668 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 749052fd..15f66ab4 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 00000000..f6b856e9 --- /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 b0036d85..a7f9d036 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 222b3d4a..ca18f0fb 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 e7fe5f72..2872bf88 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 2c2b1594..22eeb208 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 3da02da4..721960bd 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 6e29ed29..9a82776d 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 e4a56cd5..f2bd5397 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 ad99fbb6..f2bd5397 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 aa1978d8..b53a06eb 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 cd5b1e4f..58c2ec53 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 aa1978d8..b53a06eb 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 ba0602d8..8f21e005 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 d4a59337..905156f8 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 126de22d..a555c1c1 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 2292492b..45fd6c0c 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 4bea738d..5b0f4264 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 30421ace..82570d3a 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 a0bb7b25..2b92a199 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 b53e7717..9662e05f 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 7288aefa..b96464bf 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 6a792dad..21227697 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 f214d32a..7e3e079c 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 00000000..9a82776d --- /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 366b6b38..aa3dcc3b 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 c660618c..2c6e498b 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 3488e38c..82ba4675 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 47e373aa..e2b67c8a 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 3e5a6d93..7b486e1f 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 3377d2a9..21227697 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 8924b555..82ba4675 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 8b753619..088dd1b8 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 63bded9a..e236c9b5 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 53228a04..75de3a14 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 07178cbc..b6b89b68 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 00000000..a07a2666 --- /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 3c2b8ca8..9ce30cc2 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 e9e38dc2..e0a48ee2 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 eb3f1be1..80895e30 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 832872d0..c2b1e594 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 c2d29dec..af3eb740 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 06d4157b..d8f66cad 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 7e58591d..ade39514 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 56a04ab6..5a3ac5f0 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 b063831c..ba44d707 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 b33f08a2..19011e7c 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 db78e3a6..fede880e 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 f36509d4..1004369b 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 d7eef9b0..12594728 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 e4fad73a..d985dcbd 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 27e6edbc..840b072c 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 00000000..0432fe41 --- /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 00000000..03c68750 --- /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 9ce30cc2..8d3af800 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 2316734d..1893f72c 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 1893f72c..4c95b297 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 7d7c13c7..20dc867d 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 69ba6c24..73a306d5 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 31f36a07..0343f39e 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 84a882e1..ee7fd0ce 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 7769e33a..2d6a4cb0 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 9eec6edb..3ebcd935 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 85a6e1f1..9724aaa5 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 f88a3e7d..267dab19 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 981bb5bb..f6298737 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 a51f9850..a79bcc41 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 3c894843..00000000 --- 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 233fbdff..00000000 --- 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 a91df345..00000000 --- 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 1166d08c..00000000 --- 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 33e2b8a8..00000000 --- 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 c8f02ec9..00000000 --- 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 a1aa675e..00000000 --- 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 58d12710..00000000 --- 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 8e4f05c7..00000000 --- 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 f6c34032..00000000 --- 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 4445927b..00000000 --- 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 84fc3b47..00000000 --- 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 739192f2..00000000 --- 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 60128cbb..00000000 --- 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 9dc916f0..00000000 --- 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 fd9c01fb..00000000 --- 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 71613d0a..00000000 --- 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 d93c525d..00000000 --- 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 aba42b03..00000000 --- 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 b31cc8a2..00000000 --- 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 1ff49fb7..00000000 --- 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 6651e679..00000000 --- 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 f3cf618d..00000000 --- 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 a07bc9fe..00000000 --- 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 813560db..00000000 --- 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 21e82444..00000000 --- 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 890953de..00000000 --- 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 54e2653c..00000000 --- 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 266260dd..00000000 --- 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 f1169fc3..00000000 --- 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 bd2b5f7d..00000000 --- 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 72fe265d..00000000 --- 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 bfab659d..00000000 --- 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 e048827b..00000000 --- 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 4415ab0d..00000000 --- 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 40307152..00000000 --- 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 2b755ae8..00000000 --- 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 c888117e..00000000 --- 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 d2701158..00000000 --- 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 ddd0d8a8..00000000 --- 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 3e537ddf..00000000 --- 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 f08d5b95..00000000 --- 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 5aadfa8a..00000000 --- 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 0258570a..00000000 --- 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 946cb3de..00000000 --- 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 471c83b2..00000000 --- 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 3a93ef45..00000000 --- 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 f2e76810..00000000 --- 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 0f3a3ea6..00000000 --- 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 3ea7785a..00000000 --- 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 8541965c..00000000 --- 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 e689df51..00000000 --- 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 f4def1bb..00000000 --- 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 3fe6e0fb..00000000 --- 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 7ce802e0..00000000 --- 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 032908a9..00000000 --- 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 c44b0089..00000000 --- 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 a8310145..00000000 --- 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 f7c55272..00000000 --- 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 ee9d0e9a..00000000 --- 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 c06d19a8..00000000 --- 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 8bd5177b..00000000 --- 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 7e31ed3b..00000000 --- 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 2dc4df69..00000000 --- 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 344ec91b..00000000 --- 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 835b6147..00000000 --- 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 21653003..00000000 --- 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 6b1a4598..00000000 --- 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 c69b546d..00000000 --- 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 4d5bdbc3..00000000 --- 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 56272a42..00000000 --- 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 b3fc2539..00000000 --- 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 6c76d1fd..00000000 --- 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 b0f2cfe9..00000000 --- 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 6de47a34..00000000 --- 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 ceab0e60..00000000 --- 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 dc9ecb84..00000000 --- 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 cad7fccf..00000000 --- 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 ff88429c..00000000 --- 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 0bdb0643..00000000 --- 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 268c826e..00000000 --- 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 d231a4bb..00000000 --- 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 216d029f..00000000 --- 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 137ee610..00000000 --- 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 442ed3fa..00000000 --- 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 8d0660f3..00000000 --- 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 f3ddd991..00000000 --- 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 abb1e239..00000000 --- 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 f624fbee..00000000 --- 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 ee28916f..00000000 --- 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 df43d6ca..00000000 --- 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 751477cc..00000000 --- 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 9dd65f37..00000000 --- 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 7e550664..00000000 --- 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 90114114..00000000 --- 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 3080093e..00000000 --- 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 31664663..00000000 --- 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 7438c9dc..00000000 --- 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 cdc6657a..00000000 --- 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 811bcd78..00000000 --- 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 00000000..898df57f --- /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 00000000..2203159d --- /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 00000000..e03bf9fe --- /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 00000000..7dc3537d --- /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 00000000..a46f26cb --- /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 64be45be..d2c43aa4 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 daea4307..894e1307 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 a28cf1d1..e01b77d5 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 d8f66cad..a3df9548 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 00000000..b98339b9 --- /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 00000000..02412277 --- /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 00000000..1c75fef8 --- /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 65463c46..00000000 --- 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 fe852743..00000000 --- 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 0d2c821e..00000000 --- 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 10420ac9..00000000 --- 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 379103b0..00000000 --- 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 bae73637..00000000 --- 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 749716ea..00000000 --- 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 54436c8a..00000000 --- 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 9f027393..00000000 --- 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 e6170716..00000000 --- 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 592a6df5..00000000 --- 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 922524fa..00000000 --- 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 d930d5cc..00000000 --- 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 a90d99da..00000000 --- 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 6cedc688..00000000 --- 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 b48e0f2d..00000000 --- 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 c25a8e1f..00000000 --- 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 9d857317..4eab3855 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 73a306d5..00000000 --- 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 03e23d98..00000000 --- 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 3dd0bacd..4b65da97 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 5b772532..756d7c13 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 5b882221..00000000 --- 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 10420ac9..00000000 --- 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 4805f895..49a55049 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 00000000..2f818b03 --- /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 e4a56cd5..ad99fbb6 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 00000000..10e189c7 --- /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 8fe90202..8ce3ee14 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 082ca668..34d85200 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 00000000..97100e1f --- /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 ade39514..00000000 --- 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 860fcc88..00000000 --- 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 9cfb44d0..00000000 --- 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 394e6fe2..00000000 --- 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 19011e7c..00000000 --- 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 eb333f27..00000000 --- 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 423ba05f..00000000 --- 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 c08e79ee..00000000 --- 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 68450192..00000000 --- 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 094315f0..00000000 --- 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 34fc7859..00000000 --- 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 b0eadad6..00000000 --- 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 fede880e..00000000 --- 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 1004369b..00000000 --- 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 b98339b9..b69fb1b7 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 4eab3855..ca431bfe 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 4b65da97..9e61a369 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 49a55049..8c73026e 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 2f818b03..fc0cdc79 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 370d250f..c93be95b 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 c93be95b..9c23962a 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 9c23962a..c907d9d9 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 c907d9d9..370d250f 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 451a0547..7ecd2893 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 af3eb740..7c3a1a19 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 b69fb1b7..eb618972 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 5a3ac5f0..7f08d629 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 eb618972..35573dc1 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 fc0cdc79..9932e25e 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 7f6948c1..c6685025 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 177b97ed..fdbe3c80 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 0a023773..8c63e2e4 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 e6ed46b8..c9f55690 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 cda4f375..2a45b66b 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 c358b9be..4d95dc59 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 5a3320a0..f5089dad 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 ca431bfe..4eab3855 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 9e61a369..4b65da97 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 8c73026e..49a55049 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 00000000..0f710f5f --- /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 70a27ba1..405e1543 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 5878c9df..9d3e7ac5 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 4d95dc59..c358b9be 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 86626266..7ea93583 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 18f15892..0448cdd0 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 68f3dc76..588e7209 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 588e7209..bc8bf523 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 289884ed..859b53f8 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 859b53f8..6b6b2205 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 6b6b2205..91f1540b 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 c731af99..73912a03 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 4c0e2b08..ea1f32ec 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 8c63e2e4..ffc3f4e5 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 0448cdd0..124b62c1 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 bc8bf523..32318234 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 953fd547..4e19e256 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 35573dc1..f2dc269c 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 f2dc269c..6952c31a 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 6952c31a..1fa1eff1 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 c6685025..ca0fa3fe 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 405e1543..43b1d5c3 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 9d3e7ac5..2e066c5f 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 4e19e256..1c75b551 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 1fa1eff1..8a0f0d6d 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 8a0f0d6d..0c9ab6ef 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 f83eca6c..0e4a6e92 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 182cb37d..ff479b6b 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