From 04a65da17b371fe5625867deb44f83b74b3b6165 Mon Sep 17 00:00:00 2001 From: "C. Augusto Proiete" Date: Mon, 5 Dec 2022 01:29:14 -0400 Subject: [PATCH] Add support for terminals that redirect input such as MINGW64 --- src/Verify.Terminal/Commands/ReviewCommand.cs | 54 ++++++++++--------- src/Verify.Terminal/SnapshotDiffAction.cs | 1 + 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/Verify.Terminal/Commands/ReviewCommand.cs b/src/Verify.Terminal/Commands/ReviewCommand.cs index 9e2253e..bab0f97 100644 --- a/src/Verify.Terminal/Commands/ReviewCommand.cs +++ b/src/Verify.Terminal/Commands/ReviewCommand.cs @@ -57,7 +57,10 @@ public override int Execute( AnsiConsole.WriteLine(); AnsiConsole.MarkupLine($"[yellow b]Reviewing[/] [[{index + 1}/{snapshots.Count}]]"); + +RenderDiff: AnsiConsole.Write(_snapshotRenderer.Render(diff, Math.Max(0, settings.ContextLines))); + ShowHelp(); switch (ShowPrompt()) { @@ -69,6 +72,8 @@ public override int Execute( break; case SnapshotAction.Skip: continue; + case SnapshotAction.Unknown: + goto RenderDiff; } if (!last) @@ -81,6 +86,27 @@ public override int Execute( } private static SnapshotAction ShowPrompt() + { + AnsiConsole.Markup("Accept this change [[[green]a[/],[red]r[/],[yellow]s[/]]]? "); + + var answer = Console.ReadLine()?.ToLowerInvariant(); + + return answer switch + { + "a" => SnapshotAction.Accept, + "accept" => SnapshotAction.Accept, + + "r" => SnapshotAction.Reject, + "reject" => SnapshotAction.Reject, + + "s" => SnapshotAction.Skip, + "skip" => SnapshotAction.Skip, + + _ => SnapshotAction.Unknown, + }; + } + + private static void ShowHelp() { var grid = new Grid(); grid.AddColumn(new GridColumn().PadLeft(4)); @@ -88,34 +114,10 @@ private static SnapshotAction ShowPrompt() grid.AddRow("[[[green]a[/]]]ccept", "[grey]keep the new snapshot[/]"); grid.AddRow("[[[red]r[/]]]eject", "[grey]keep the old snapshot[/]"); grid.AddRow("[[[yellow]s[/]]]kip", "[grey]keep both for now[/]"); + AnsiConsole.WriteLine(); AnsiConsole.WriteLine(); AnsiConsole.Write(grid); - - try - { - AnsiConsole.Cursor.Hide(); - - while (true) - { - var key = Console.ReadKey(true); - var action = key.Key switch - { - ConsoleKey.A => SnapshotAction.Accept, - ConsoleKey.R => SnapshotAction.Reject, - ConsoleKey.S => SnapshotAction.Skip, - _ => (SnapshotAction?)null, - }; - - if (action != null) - { - return action.Value; - } - } - } - finally - { - AnsiConsole.Cursor.Show(); - } + AnsiConsole.WriteLine(); } } \ No newline at end of file diff --git a/src/Verify.Terminal/SnapshotDiffAction.cs b/src/Verify.Terminal/SnapshotDiffAction.cs index 62045c0..bb99e98 100644 --- a/src/Verify.Terminal/SnapshotDiffAction.cs +++ b/src/Verify.Terminal/SnapshotDiffAction.cs @@ -2,6 +2,7 @@ namespace Verify.Terminal; public enum SnapshotAction { + Unknown, Accept, Reject, Skip,