From 22d4af4482377949b1f1cc77389b4fc3577d1ea2 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Mon, 10 Aug 2020 11:35:01 +0200 Subject: [PATCH] Preserve line breaks --- src/Spectre.Console.Tests/Fixtures/PlainConsole.cs | 1 + .../Unit/Composition/TextTests.cs | 14 ++++++++++++++ src/Spectre.Console/Composition/Text.cs | 9 ++++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Spectre.Console.Tests/Fixtures/PlainConsole.cs b/src/Spectre.Console.Tests/Fixtures/PlainConsole.cs index e1d6dad..887d983 100644 --- a/src/Spectre.Console.Tests/Fixtures/PlainConsole.cs +++ b/src/Spectre.Console.Tests/Fixtures/PlainConsole.cs @@ -18,6 +18,7 @@ namespace Spectre.Console.Tests public Color Background { get; set; } public StringWriter Writer { get; } + public string RawOutput => Writer.ToString(); public string Output => Writer.ToString().TrimEnd('\n'); public IReadOnlyList Lines => Output.Split(new char[] { '\n' }); diff --git a/src/Spectre.Console.Tests/Unit/Composition/TextTests.cs b/src/Spectre.Console.Tests/Unit/Composition/TextTests.cs index b94c6ac..360faf4 100644 --- a/src/Spectre.Console.Tests/Unit/Composition/TextTests.cs +++ b/src/Spectre.Console.Tests/Unit/Composition/TextTests.cs @@ -21,6 +21,20 @@ namespace Spectre.Console.Tests.Unit .ShouldBe("Hello World"); } + [Fact] + public void Should_Write_Line_Breaks() + { + // Given + var fixture = new PlainConsole(width: 5); + var text = Text.New("\n\n"); + + // When + fixture.Render(text); + + // Then + fixture.RawOutput.ShouldBe("\n\n"); + } + [Fact] public void Should_Split_Unstyled_Text_To_New_Lines_If_Width_Exceeds_Console_Width() { diff --git a/src/Spectre.Console/Composition/Text.cs b/src/Spectre.Console/Composition/Text.cs index d7de7dd..d55f9a6 100644 --- a/src/Spectre.Console/Composition/Text.cs +++ b/src/Spectre.Console/Composition/Text.cs @@ -136,7 +136,7 @@ namespace Spectre.Console /// IEnumerable IRenderable.Render(RenderContext context, int width) { - if (string.IsNullOrWhiteSpace(_text)) + if (string.IsNullOrEmpty(_text)) { return Array.Empty(); } @@ -192,7 +192,7 @@ namespace Spectre.Console } } - if (!last) + if (!last || line.Count == 0) { result.Add(Segment.LineBreak()); } @@ -214,7 +214,10 @@ namespace Spectre.Console var index = segment.Text.IndexOf("\n", StringComparison.OrdinalIgnoreCase); if (index == -1) { - result.Add(segment); + if (!string.IsNullOrEmpty(segment.Text)) + { + result.Add(segment); + } } else {