mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-04 02:25:28 +08:00 
			
		
		
		
	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:
		
				
					committed by
					
						
						Patrik Svensson
					
				
			
			
				
	
			
			
			
						parent
						
							865552c3f2
						
					
				
				
					commit
					2011cb2eff
				
			@@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "projects": [ "src", "tests" ],
 | 
					  "projects": [ "src", "tests" ],
 | 
				
			||||||
  "sdk": {
 | 
					  "sdk": {
 | 
				
			||||||
    "version": "5.0.202",
 | 
					    "version": "5.0.301",
 | 
				
			||||||
    "rollForward": "latestPatch"
 | 
					    "rollForward": "latestPatch"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -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 += ":";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					Enter command$ Orange
 | 
				
			||||||
@@ -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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								test/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								test/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs
									
									
									
									
									
										Normal 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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user