Fix maxWidth bug in Panel

Panel could pass a maxWidth to the child Render function that was greater than the maxWidth that was passed to the Panel render function.
I noticed this when trying to nest a table in a panel and the word wrapping was being disabled.

N.B It might be that Table.Measure ought to not return a measurment larger than maxWidth, but this Panel change seems defensivly sensible regardless.
This commit is contained in:
Fraser Waters 2021-04-22 18:11:05 +01:00 committed by Patrik Svensson
parent 79af013bf2
commit 91f910326c
3 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,16 @@
╔════════════════════════════╗
║ ┌────────┬───────┬───────┐ ║
║ │ Foo │ Bar │ Baz │ ║
║ ├────────┼───────┼───────┤ ║
║ │ Qux │ Corgi │ Waldo │ ║
║ │ With A │ │ │ ║
║ │ Long │ │ │ ║
║ │ Descri │ │ │ ║
║ │ ption │ │ │ ║
║ │ Grault │ Garpl │ Fred │ ║
║ │ │ y │ On A │ ║
║ │ │ │ Long │ ║
║ │ │ │ Long │ ║
║ │ │ │ Walk │ ║
║ └────────┴───────┴───────┘ ║
╚════════════════════════════╝

View File

@ -476,5 +476,26 @@ namespace Spectre.Console.Tests.Unit
// Then // Then
return Verifier.Verify(console.Output); return Verifier.Verify(console.Output);
} }
[Fact]
[Expectation("Render_Fold")]
public Task Should_Render_With_Folded_Text_Table_Correctly()
{
// Given
var console = new TestConsole().Width(30);
var table = new Table();
table.AddColumns("Foo", "Bar", "Baz");
table.AddRow("Qux With A Long Description", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred On A Long Long Walk");
var panel = new Panel(table);
panel.Border = BoxBorder.Double;
// When
console.Write(panel);
// Then
return Verifier.Verify(console.Output);
}
} }
} }

View File

@ -99,6 +99,7 @@ namespace Spectre.Console
var panelWidth = childWidth + edgeWidth; var panelWidth = childWidth + edgeWidth;
panelWidth = Math.Min(panelWidth, maxWidth); panelWidth = Math.Min(panelWidth, maxWidth);
childWidth = panelWidth - edgeWidth;
var result = new List<Segment>(); var result = new List<Segment>();