Do not append suffix to text prompt

Do not append suffix to text prompt unless
there are choices or a default value specified.

Closes #413
This commit is contained in:
Patrik Svensson 2021-07-02 19:06:12 +02:00 committed by Patrik Svensson
parent 865552c3f2
commit 2011cb2eff
5 changed files with 55 additions and 3 deletions

View File

@ -1,7 +1,7 @@
{ {
"projects": [ "src", "tests" ], "projects": [ "src", "tests" ],
"sdk": { "sdk": {
"version": "5.0.202", "version": "5.0.301",
"rollForward": "latestPatch" "rollForward": "latestPatch"
} }
} }

View File

@ -179,8 +179,10 @@ namespace Spectre.Console
var builder = new StringBuilder(); var builder = new StringBuilder();
builder.Append(_prompt.TrimEnd()); builder.Append(_prompt.TrimEnd());
var appendSuffix = false;
if (ShowChoices && Choices.Count > 0) if (ShowChoices && Choices.Count > 0)
{ {
appendSuffix = true;
var converter = Converter ?? TypeConverterHelper.ConvertToString; var converter = Converter ?? TypeConverterHelper.ConvertToString;
var choices = string.Join("/", Choices.Select(choice => converter(choice))); var choices = string.Join("/", Choices.Select(choice => converter(choice)));
builder.AppendFormat(CultureInfo.InvariantCulture, " [blue][[{0}]][/]", choices); builder.AppendFormat(CultureInfo.InvariantCulture, " [blue][[{0}]][/]", choices);
@ -188,6 +190,7 @@ namespace Spectre.Console
if (ShowDefaultValue && DefaultValue != null) if (ShowDefaultValue && DefaultValue != null)
{ {
appendSuffix = true;
var converter = Converter ?? TypeConverterHelper.ConvertToString; var converter = Converter ?? TypeConverterHelper.ConvertToString;
builder.AppendFormat( builder.AppendFormat(
CultureInfo.InvariantCulture, CultureInfo.InvariantCulture,
@ -196,8 +199,7 @@ namespace Spectre.Console
} }
var markup = builder.ToString().Trim(); var markup = builder.ToString().Trim();
if (!markup.EndsWith("?", StringComparison.OrdinalIgnoreCase) && if (appendSuffix)
!markup.EndsWith(":", StringComparison.OrdinalIgnoreCase))
{ {
markup += ":"; markup += ":";
} }

View File

@ -0,0 +1 @@
Enter command$ Orange

View File

@ -12,6 +12,20 @@ namespace Spectre.Console.Tests.Unit
[ExpectationPath("Widgets/Prompt/Text")] [ExpectationPath("Widgets/Prompt/Text")]
public sealed class TextPromptTests public sealed class TextPromptTests
{ {
[Fact]
public void Should_Return_Entered_Text()
{
// Given
var console = new TestConsole();
console.Input.PushTextWithEnter("Hello World");
// When
var result = console.Prompt(new TextPrompt<string>("Enter text:"));
// Then
result.ShouldBe("Hello World");
}
[Fact] [Fact]
[Expectation("ConversionError")] [Expectation("ConversionError")]
public Task Should_Return_Validation_Error_If_Value_Cannot_Be_Converted() public Task Should_Return_Validation_Error_If_Value_Cannot_Be_Converted()
@ -218,5 +232,22 @@ namespace Spectre.Console.Tests.Unit
// Then // Then
return Verifier.Verify(console.Output); return Verifier.Verify(console.Output);
} }
[Fact]
[Expectation("NoSuffix")]
[GitHubIssue(413)]
public Task Should_Not_Append_Questionmark_Or_Colon_If_No_Choices_Are_Set()
{
// Given
var console = new TestConsole();
console.Input.PushTextWithEnter("Orange");
// When
console.Prompt(
new TextPrompt<string>("Enter command$"));
// Then
return Verifier.Verify(console.Output);
}
} }
} }

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Spectre.Console.Tests
{
public sealed class GitHubIssueAttribute : Attribute
{
public int IssueId { get; }
public GitHubIssueAttribute(int issueId)
{
IssueId = issueId;
}
}
}