From bf3b91a535227aad6c817ab953f9fabac8a30edb Mon Sep 17 00:00:00 2001 From: Daniel Weber Date: Mon, 12 Feb 2024 20:44:34 +0100 Subject: [PATCH] Don't erase the prompt text when backspacing on a secret prompt with a null mask. --- .../Extensions/AnsiConsoleExtensions.Input.cs | 6 +++++- ...ValueBackspaceNullMask.Output.verified.txt | 1 + .../Unit/Prompts/TextPromptTests.cs | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt diff --git a/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs b/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs index f5299ad..7769e33 100644 --- a/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs +++ b/src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs @@ -53,7 +53,11 @@ public static partial class AnsiConsoleExtensions if (text.Length > 0) { text = text.Substring(0, text.Length - 1); - console.Write("\b \b"); + + if (mask != null) + { + console.Write("\b \b"); + } } continue; diff --git a/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt b/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt new file mode 100644 index 0000000..473c6d8 --- /dev/null +++ b/test/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt @@ -0,0 +1 @@ +Favorite fruit? diff --git a/test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs b/test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs index 52d26e7..c358b9b 100644 --- a/test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs +++ b/test/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs @@ -248,6 +248,25 @@ public sealed class TextPromptTests return Verifier.Verify(console.Output); } + [Fact] + [Expectation("SecretValueBackspaceNullMask")] + public Task Should_Not_Erase_Prompt_Text_On_Backspace_If_Prompt_Is_Secret_And_Mask_Is_Null() + { + // Given + var console = new TestConsole(); + console.Input.PushText("Bananas"); + console.Input.PushKey(ConsoleKey.Backspace); + console.Input.PushKey(ConsoleKey.Enter); + + // When + console.Prompt( + new TextPrompt("Favorite fruit?") + .Secret(null)); + + // Then + return Verifier.Verify(console.Output); + } + [Fact] [Expectation("SecretDefaultValueCustomMask")] public Task Should_Choose_Custom_Masked_Default_Value_If_Nothing_Is_Entered_And_Prompt_Is_Secret_And_Mask_Is_Custom()