From dee3c0162975e5c52c921a683e18c041e8280ce3 Mon Sep 17 00:00:00 2001 From: Thomas Freudenberg Date: Wed, 13 Jan 2021 21:12:44 +0100 Subject: [PATCH] mask default value when prompt is a secret --- .../SecretDefaultValue.Output.verified.txt | 1 + src/Spectre.Console.Tests/Unit/PromptTests.cs | 18 ++++++++++++++++++ .../Widgets/Prompt/TextPrompt.cs | 5 +++-- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/Spectre.Console.Tests/Expectations/Widgets/Prompt/SecretDefaultValue.Output.verified.txt diff --git a/src/Spectre.Console.Tests/Expectations/Widgets/Prompt/SecretDefaultValue.Output.verified.txt b/src/Spectre.Console.Tests/Expectations/Widgets/Prompt/SecretDefaultValue.Output.verified.txt new file mode 100644 index 0000000..cba2d23 --- /dev/null +++ b/src/Spectre.Console.Tests/Expectations/Widgets/Prompt/SecretDefaultValue.Output.verified.txt @@ -0,0 +1 @@ +Favorite fruit? (******): ****** diff --git a/src/Spectre.Console.Tests/Unit/PromptTests.cs b/src/Spectre.Console.Tests/Unit/PromptTests.cs index 2802945..c273250 100644 --- a/src/Spectre.Console.Tests/Unit/PromptTests.cs +++ b/src/Spectre.Console.Tests/Unit/PromptTests.cs @@ -200,5 +200,23 @@ namespace Spectre.Console.Tests.Unit result.Item1.ShouldBe(2); return Verifier.Verify(console.Output); } + + [Fact] + [Expectation("SecretDefaultValue")] + public Task Should_Chose_Masked_Default_Value_If_Nothing_Is_Entered_And_Prompt_Is_Secret() + { + // Given + var console = new FakeConsole(); + console.Input.PushKey(ConsoleKey.Enter); + + // When + console.Prompt( + new TextPrompt("Favorite fruit?") + .Secret() + .DefaultValue("Banana")); + + // Then + return Verifier.Verify(console.Output); + } } } diff --git a/src/Spectre.Console/Widgets/Prompt/TextPrompt.cs b/src/Spectre.Console/Widgets/Prompt/TextPrompt.cs index 831630f..71af690 100644 --- a/src/Spectre.Console/Widgets/Prompt/TextPrompt.cs +++ b/src/Spectre.Console/Widgets/Prompt/TextPrompt.cs @@ -117,7 +117,7 @@ namespace Spectre.Console { if (DefaultValue != null) { - console.Write(converter(DefaultValue.Value), promptStyle); + console.Write(IsSecret ? "******" : converter(DefaultValue.Value), promptStyle); console.WriteLine(); return DefaultValue.Value; } @@ -186,10 +186,11 @@ namespace Spectre.Console if (ShowDefaultValue && DefaultValue != null) { + var converter = Converter ?? TypeConverterHelper.ConvertToString; builder.AppendFormat( CultureInfo.InvariantCulture, " [green]({0})[/]", - TypeConverterHelper.ConvertToString(DefaultValue.Value)); + IsSecret ? "******" : converter(DefaultValue.Value)); } var markup = builder.ToString().Trim();