From 28de1053f6151a889b497036d603c36f131cf31e Mon Sep 17 00:00:00 2001 From: Tyrrrz Date: Mon, 19 Jul 2021 20:59:48 +0300 Subject: [PATCH] Workaround for Spectre parallelization issue in tests --- .../Utils/Extensions/ConsoleExtensions.cs | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs b/DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs index c19e45cf..85194db2 100644 --- a/DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs +++ b/DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs @@ -7,14 +7,31 @@ namespace DiscordChatExporter.Cli.Utils.Extensions { internal static class ConsoleExtensions { - public static IAnsiConsole CreateAnsiConsole(this IConsole console) => AnsiConsole.Create( - new AnsiConsoleSettings - { - Ansi = AnsiSupport.Detect, - ColorSystem = ColorSystemSupport.Detect, - Out = new AnsiConsoleOutput(console.Output) - } - ); + private class NoopExclusivityMode : IExclusivityMode + { + public T Run(Func func) => func(); + + public Task Run(Func> func) => func(); + } + + public static IAnsiConsole CreateAnsiConsole(this IConsole console) + { + // Don't require exclusivity in tests. + // Workaround for: https://github.com/spectreconsole/spectre.console/issues/494 + var exclusivityMode = console is FakeConsole + ? new NoopExclusivityMode() + : null; + + return AnsiConsole.Create( + new AnsiConsoleSettings + { + Ansi = AnsiSupport.Detect, + ColorSystem = ColorSystemSupport.Detect, + Out = new AnsiConsoleOutput(console.Output), + ExclusivityMode = exclusivityMode + } + ); + } public static Progress CreateProgressTicker(this IConsole console) => console .CreateAnsiConsole()