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 @@ <EmbeddedResource Include="Data\starwars.flf" /> <None Remove="Data\poison.flf" /> <EmbeddedResource Include="Data\poison.flf" /> + <None Update="Expectations\Widgets\Rows\Render_Empty.Output.verified.txt"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> </ItemGroup> <ItemGroup> 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()