From e0ded712e8dad8cd2923075a2e45df560d9ad115 Mon Sep 17 00:00:00 2001 From: Jeppe Roi Kristensen Date: Mon, 12 Jun 2023 21:03:13 +0200 Subject: [PATCH] Add fix to avoid exception on Rows with no children --- src/Spectre.Console/Widgets/Rows.cs | 13 +++++++++---- .../Rows/Render_Empty.Output.verified.txt | 6 ++++++ .../Spectre.Console.Tests.csproj | 3 +++ .../Unit/Widgets/RowsTests.cs | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt diff --git a/src/Spectre.Console/Widgets/Rows.cs b/src/Spectre.Console/Widgets/Rows.cs index 9539440..2ee2723 100644 --- a/src/Spectre.Console/Widgets/Rows.cs +++ b/src/Spectre.Console/Widgets/Rows.cs @@ -37,10 +37,15 @@ public sealed class Rows : Renderable, IExpandable } else { - var measurements = _children.Select(c => c.Measure(options, maxWidth)); - return new Measurement( - measurements.Min(c => c.Min), - measurements.Min(c => c.Max)); + var measurements = _children.Select(c => c.Measure(options, maxWidth)).ToArray(); + if (measurements.Length > 0) + { + return new Measurement( + measurements.Min(c => c.Min), + measurements.Min(c => c.Max)); + } + + return new Measurement(0, 0); } } diff --git a/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt b/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt new file mode 100644 index 0000000..47ab765 --- /dev/null +++ b/test/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt @@ -0,0 +1,6 @@ +┌─────────────┬─────┐ +│ Foo │ Bar │ +├─────────────┼─────┤ +│ HELLO WORLD │ │ +│ │ Qux │ +└─────────────┴─────┘ diff --git a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj b/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj index e9e959e..e01a0f5 100644 --- a/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj +++ b/test/Spectre.Console.Tests/Spectre.Console.Tests.csproj @@ -12,6 +12,9 @@ + + Always + diff --git a/test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs b/test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs index 9ebb6f9..9d95e64 100644 --- a/test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs +++ b/test/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs @@ -50,6 +50,25 @@ public sealed class RowsTests return Verifier.Verify(console.Output); } + [Fact] + [Expectation("Render_Empty")] + public Task Should_Not_Throw_Exception_On_Empty_Rows() + { + // Given + var console = new TestConsole().Width(60); + var table = new Table() + .AddColumns("Foo", "Bar") + .AddRow("HELLO WORLD") + .AddRow( + new Rows(), new Text("Qux")); + + // When + console.Write(table); + + // Then + return Verifier.Verify(console.Output); + } + [Fact] [Expectation("Render_Expanded_And_Nested")] public Task Should_Render_Rows_Correctly_Inside_Other_Widget_When_Expanded()