mirror of
				https://github.com/spectreconsole/spectre.console.git
				synced 2025-10-25 15:19:23 +00:00 
			
		
		
		
	
				
					committed by
					
						 Patrik Svensson
						Patrik Svensson
					
				
			
			
				
	
			
			
			
						parent
						
							3847a8949f
						
					
				
				
					commit
					b197f278ed
				
			
							
								
								
									
										96
									
								
								src/Spectre.Console.Tests/Unit/RowsTests.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/Spectre.Console.Tests/Unit/RowsTests.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| using Shouldly; | ||||
| using Spectre.Console.Rendering; | ||||
| using Xunit; | ||||
|  | ||||
| namespace Spectre.Console.Tests.Unit | ||||
| { | ||||
|     public sealed class RowsTests | ||||
|     { | ||||
|         [Fact] | ||||
|         public void Should_Render_Rows() | ||||
|         { | ||||
|             // Given | ||||
|             var console = new PlainConsole(width: 60); | ||||
|             var rows = new Rows( | ||||
|                 new IRenderable[] | ||||
|                 { | ||||
|                     new Markup("Hello"), | ||||
|                     new Table() | ||||
|                         .AddColumns("Foo", "Bar") | ||||
|                         .AddRow("Baz", "Qux"), | ||||
|                     new Markup("World"), | ||||
|                 }); | ||||
|  | ||||
|             // When | ||||
|             console.Render(rows); | ||||
|  | ||||
|             // Then | ||||
|             console.Lines.Count.ShouldBe(7); | ||||
|             console.Lines[0].ShouldBe("Hello"); | ||||
|             console.Lines[1].ShouldBe("┌─────┬─────┐"); | ||||
|             console.Lines[2].ShouldBe("│ Foo │ Bar │"); | ||||
|             console.Lines[3].ShouldBe("├─────┼─────┤"); | ||||
|             console.Lines[4].ShouldBe("│ Baz │ Qux │"); | ||||
|             console.Lines[5].ShouldBe("└─────┴─────┘"); | ||||
|             console.Lines[6].ShouldBe("World"); | ||||
|         } | ||||
|  | ||||
|         [Fact] | ||||
|         public void Should_Render_Rows_Correctly_Inside_Other_Widget() | ||||
|         { | ||||
|             // Given | ||||
|             var console = new PlainConsole(width: 60); | ||||
|             var table = new Table() | ||||
|                 .AddColumns("Foo", "Bar") | ||||
|                 .AddRow("HELLO WORLD") | ||||
|                 .AddRow( | ||||
|                 new Rows(new IRenderable[] | ||||
|                 { | ||||
|                     new Markup("Hello"), | ||||
|                     new Markup("World"), | ||||
|                 }), new Text("Qux")); | ||||
|  | ||||
|             // When | ||||
|             console.Render(table); | ||||
|  | ||||
|             // Then | ||||
|             console.Lines.Count.ShouldBe(7); | ||||
|             console.Lines[0].ShouldBe("┌─────────────┬─────┐"); | ||||
|             console.Lines[1].ShouldBe("│ Foo         │ Bar │"); | ||||
|             console.Lines[2].ShouldBe("├─────────────┼─────┤"); | ||||
|             console.Lines[3].ShouldBe("│ HELLO WORLD │     │"); | ||||
|             console.Lines[4].ShouldBe("│ Hello       │ Qux │"); | ||||
|             console.Lines[5].ShouldBe("│ World       │     │"); | ||||
|             console.Lines[6].ShouldBe("└─────────────┴─────┘"); | ||||
|         } | ||||
|  | ||||
|         [Fact] | ||||
|         public void Should_Render_Rows_Correctly_Inside_Other_Widget_When_Expanded() | ||||
|         { | ||||
|             // Given | ||||
|             var console = new PlainConsole(width: 60); | ||||
|             var table = new Table() | ||||
|                 .AddColumns("Foo", "Bar") | ||||
|                 .AddRow("HELLO WORLD") | ||||
|                 .AddRow( | ||||
|                 new Rows(new IRenderable[] | ||||
|                 { | ||||
|                     new Markup("Hello"), | ||||
|                     new Markup("World"), | ||||
|                 }).Expand(), new Text("Qux")); | ||||
|  | ||||
|             // When | ||||
|             console.Render(table); | ||||
|  | ||||
|             // Then | ||||
|             console.Lines.Count.ShouldBe(7); | ||||
|             console.Lines[0].ShouldBe("┌────────────────────────────────────────────────────┬─────┐"); | ||||
|             console.Lines[1].ShouldBe("│ Foo                                                │ Bar │"); | ||||
|             console.Lines[2].ShouldBe("├────────────────────────────────────────────────────┼─────┤"); | ||||
|             console.Lines[3].ShouldBe("│ HELLO WORLD                                        │     │"); | ||||
|             console.Lines[4].ShouldBe("│ Hello                                              │ Qux │"); | ||||
|             console.Lines[5].ShouldBe("│ World                                              │     │"); | ||||
|             console.Lines[6].ShouldBe("└────────────────────────────────────────────────────┴─────┘"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										65
									
								
								src/Spectre.Console/Widgets/Rows.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/Spectre.Console/Widgets/Rows.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using Spectre.Console.Internal; | ||||
| using Spectre.Console.Rendering; | ||||
|  | ||||
| namespace Spectre.Console | ||||
| { | ||||
|     /// <summary> | ||||
|     /// Renders things in rows. | ||||
|     /// </summary> | ||||
|     public sealed class Rows : Renderable, IExpandable | ||||
|     { | ||||
|         private readonly List<IRenderable> _children; | ||||
|  | ||||
|         /// <inheritdoc/> | ||||
|         public bool Expand { get; set; } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Initializes a new instance of the <see cref="Rows"/> class. | ||||
|         /// </summary> | ||||
|         /// <param name="children">The children to render.</param> | ||||
|         public Rows(IEnumerable<IRenderable> children) | ||||
|         { | ||||
|             _children = new List<IRenderable>(children ?? throw new ArgumentNullException(nameof(children))); | ||||
|         } | ||||
|  | ||||
|         /// <inheritdoc/> | ||||
|         protected override Measurement Measure(RenderContext context, int maxWidth) | ||||
|         { | ||||
|             if (Expand) | ||||
|             { | ||||
|                 return new Measurement(maxWidth, maxWidth); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 var measurements = _children.Select(c => c.Measure(context, maxWidth)); | ||||
|                 return new Measurement( | ||||
|                     measurements.Min(c => c.Min), | ||||
|                     measurements.Min(c => c.Max)); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         /// <inheritdoc/> | ||||
|         protected override IEnumerable<Segment> Render(RenderContext context, int maxWidth) | ||||
|         { | ||||
|             foreach (var child in _children) | ||||
|             { | ||||
|                 var segments = child.Render(context, maxWidth); | ||||
|                 foreach (var (_, _, last, segment) in segments.Enumerate()) | ||||
|                 { | ||||
|                     yield return segment; | ||||
|  | ||||
|                     if (last) | ||||
|                     { | ||||
|                         if (!segment.IsLineBreak) | ||||
|                         { | ||||
|                             yield return Segment.LineBreak; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user