From f4d1796e400aea021a03c9004e7fc319d9852b01 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Sun, 9 Aug 2020 11:49:58 +0200 Subject: [PATCH] Do not split lines if width is 0 Closes #32 --- .../Unit/Composition/TableTests.cs | 19 +++++++++++++++++++ .../Composition/Table.Calculations.cs | 10 ++++++++-- src/Spectre.Console/Composition/Table.cs | 3 ++- src/Spectre.Console/Composition/Text.cs | 5 +++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs index ee35dcf..bc17ff0 100644 --- a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs +++ b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs @@ -307,5 +307,24 @@ namespace Spectre.Console.Tests.Unit.Composition console.Lines[5].ShouldBe("│ Grault │ Garply │ Fred │"); console.Lines[6].ShouldBe("└────────┴────────┴──────────┘"); } + + [Fact] + public void Should_Render_Table_Without_Footer_If_No_Rows_Are_Added() + { + // Given + var console = new PlainConsole(width: 80); + var table = new Table(); + table.AddColumns("Foo", "Bar"); + table.AddColumn(new TableColumn("Baz") { Padding = new Padding(3, 2) }); + + // When + console.Render(table); + + // Then + console.Lines.Count.ShouldBe(3); + console.Lines[0].ShouldBe("┌─────┬─────┬────────┐"); + console.Lines[1].ShouldBe("│ Foo │ Bar │ Baz │"); + console.Lines[2].ShouldBe("└─────┴─────┴────────┘"); + } } } diff --git a/src/Spectre.Console/Composition/Table.Calculations.cs b/src/Spectre.Console/Composition/Table.Calculations.cs index 8316cb3..98e36d0 100644 --- a/src/Spectre.Console/Composition/Table.Calculations.cs +++ b/src/Spectre.Console/Composition/Table.Calculations.cs @@ -61,7 +61,7 @@ namespace Spectre.Console .Where(x => x.allowWrap) .Max(x => x.width); - var secondMaxColumn = widths.Zip(wrappable, (width, allowWrap) => allowWrap && width != maxColumn ? width : 0).Max(); + var secondMaxColumn = widths.Zip(wrappable, (width, allowWrap) => allowWrap && width != maxColumn ? width : 1).Max(); var columnDifference = maxColumn - secondMaxColumn; var ratios = widths.Zip(wrappable, (width, allowWrap) => width == maxColumn && allowWrap ? 1 : 0).ToList(); @@ -96,9 +96,15 @@ namespace Spectre.Console var minWidths = new List(); var maxWidths = new List(); + + // Include columns in measurement + var measure = ((IRenderable)column.Text).Measure(options, maxWidth); + minWidths.Add(measure.Min); + maxWidths.Add(measure.Max); + foreach (var row in rows) { - var measure = ((IRenderable)row).Measure(options, maxWidth); + measure = ((IRenderable)row).Measure(options, maxWidth); minWidths.Add(measure.Min); maxWidths.Add(measure.Max); } diff --git a/src/Spectre.Console/Composition/Table.cs b/src/Spectre.Console/Composition/Table.cs index d0e3c42..17ce99c 100644 --- a/src/Spectre.Console/Composition/Table.cs +++ b/src/Spectre.Console/Composition/Table.cs @@ -178,6 +178,7 @@ namespace Spectre.Console var showBorder = Border != BorderKind.None; var hideBorder = Border == BorderKind.None; + var hasRows = _rows.Count > 0; var maxWidth = width; if (Width != null) @@ -303,7 +304,7 @@ namespace Spectre.Console } // Show header separator? - if (firstRow && showBorder && ShowHeaders) + if (firstRow && showBorder && ShowHeaders && hasRows) { result.Add(new Segment(border.GetPart(BorderPart.HeaderBottomLeft))); foreach (var (columnIndex, first, lastColumn, columnWidth) in columnWidths.Enumerate()) diff --git a/src/Spectre.Console/Composition/Text.cs b/src/Spectre.Console/Composition/Text.cs index 4978206..d7de7dd 100644 --- a/src/Spectre.Console/Composition/Text.cs +++ b/src/Spectre.Console/Composition/Text.cs @@ -141,6 +141,11 @@ namespace Spectre.Console return Array.Empty(); } + if (width == 0) + { + return Array.Empty(); + } + var result = new List(); var segments = SplitLineBreaks(CreateSegments());