Add support for table footers

This commit is contained in:
Patrik Svensson
2020-10-24 17:15:19 +02:00
committed by Patrik Svensson
parent c9c0ad733f
commit 03334f693d
31 changed files with 504 additions and 132 deletions

View File

@@ -42,10 +42,11 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(3);
console.Lines.Count.ShouldBe(4);
console.Lines[0].ShouldBe("Header 1 Header 2");
console.Lines[1].ShouldBe("Cell Cell ");
console.Lines[2].ShouldBe("Cell Cell ");
console.Lines[3].ShouldBe("Footer 1 Footer 2");
}
}
@@ -85,13 +86,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("+---------------------+");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("|----------+----------|");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe("+---------------------+");
console.Lines[5].ShouldBe("|----------+----------|");
console.Lines[6].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[7].ShouldBe("+---------------------+");
}
}
@@ -131,13 +134,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("+----------+----------+");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("|----------+----------|");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe("+----------+----------+");
console.Lines[5].ShouldBe("|----------+----------|");
console.Lines[6].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[7].ShouldBe("+----------+----------+");
}
}
@@ -177,13 +182,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("+----------+----------+");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("|==========+==========|");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe("+----------+----------+");
console.Lines[6].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[7].ShouldBe("+----------+----------+");
}
}
@@ -223,13 +230,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("┌──────────┬──────────┐");
console.Lines[1].ShouldBe("│ Header 1 │ Header 2 │");
console.Lines[2].ShouldBe("├──────────┼──────────┤");
console.Lines[3].ShouldBe("│ Cell │ Cell │");
console.Lines[4].ShouldBe("│ Cell │ Cell │");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[6].ShouldBe("│ Footer 1 │ Footer 2 │");
console.Lines[7].ShouldBe("└──────────┴──────────┘");
}
}
@@ -269,13 +278,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("╭──────────┬──────────╮");
console.Lines[1].ShouldBe("│ Header 1 │ Header 2 │");
console.Lines[2].ShouldBe("├──────────┼──────────┤");
console.Lines[3].ShouldBe("│ Cell │ Cell │");
console.Lines[4].ShouldBe("│ Cell │ Cell │");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[6].ShouldBe("│ Footer 1 │ Footer 2 │");
console.Lines[7].ShouldBe("╰──────────┴──────────╯");
}
}
@@ -315,13 +326,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
console.Lines[2].ShouldBe(" ──────────┼────────── ");
console.Lines[3].ShouldBe(" Cell │ Cell ");
console.Lines[4].ShouldBe(" Cell │ Cell ");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe(" ──────────┼────────── ");
console.Lines[6].ShouldBe(" Footer 1 │ Footer 2 ");
console.Lines[7].ShouldBe(" ");
}
}
@@ -361,13 +374,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
console.Lines[2].ShouldBe(" ━━━━━━━━━━┿━━━━━━━━━━ ");
console.Lines[3].ShouldBe(" Cell │ Cell ");
console.Lines[4].ShouldBe(" Cell │ Cell ");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe(" ━━━━━━━━━━┿━━━━━━━━━━ ");
console.Lines[6].ShouldBe(" Footer 1 │ Footer 2 ");
console.Lines[7].ShouldBe(" ");
}
}
@@ -407,13 +422,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
console.Lines[2].ShouldBe(" ══════════╪══════════ ");
console.Lines[3].ShouldBe(" Cell │ Cell ");
console.Lines[4].ShouldBe(" Cell │ Cell ");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe(" ══════════╪══════════ ");
console.Lines[6].ShouldBe(" Footer 1 │ Footer 2 ");
console.Lines[7].ShouldBe(" ");
}
}
@@ -453,13 +470,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
console.Lines[2].ShouldBe("───────────────────────");
console.Lines[3].ShouldBe(" Cell Cell ");
console.Lines[4].ShouldBe(" Cell Cell ");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("───────────────────────");
console.Lines[6].ShouldBe(" Footer 1 Footer 2 ");
console.Lines[7].ShouldBe(" ");
}
}
@@ -499,13 +518,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("───────────────────────");
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
console.Lines[2].ShouldBe("───────────────────────");
console.Lines[3].ShouldBe(" Cell Cell ");
console.Lines[4].ShouldBe(" Cell Cell ");
console.Lines[5].ShouldBe("───────────────────────");
console.Lines[6].ShouldBe(" Footer 1 Footer 2 ");
console.Lines[7].ShouldBe("───────────────────────");
}
}
@@ -545,13 +566,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
console.Lines[2].ShouldBe("━━━━━━━━━━━━━━━━━━━━━━━");
console.Lines[3].ShouldBe(" Cell Cell ");
console.Lines[4].ShouldBe(" Cell Cell ");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("━━━━━━━━━━━━━━━━━━━━━━━");
console.Lines[6].ShouldBe(" Footer 1 Footer 2 ");
console.Lines[7].ShouldBe(" ");
}
}
@@ -591,13 +614,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("┏━━━━━━━━━━┳━━━━━━━━━━┓");
console.Lines[1].ShouldBe("┃ Header 1 ┃ Header 2 ┃");
console.Lines[2].ShouldBe("┣━━━━━━━━━━╋━━━━━━━━━━┫");
console.Lines[3].ShouldBe("┃ Cell ┃ Cell ┃");
console.Lines[4].ShouldBe("┃ Cell ┃ Cell ┃");
console.Lines[5].ShouldBe("━━━━━━━━━━━━━━━━━━━━");
console.Lines[5].ShouldBe("━━━━━━━━━━━━━━━━━━━━");
console.Lines[6].ShouldBe("┃ Footer 1 ┃ Footer 2 ┃");
console.Lines[7].ShouldBe("┗━━━━━━━━━━┻━━━━━━━━━━┛");
}
}
@@ -637,13 +662,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("┏━━━━━━━━━━┯━━━━━━━━━━┓");
console.Lines[1].ShouldBe("┃ Header 1 │ Header 2 ┃");
console.Lines[2].ShouldBe("┠──────────┼──────────┨");
console.Lines[3].ShouldBe("┃ Cell │ Cell ┃");
console.Lines[4].ShouldBe("┃ Cell │ Cell ┃");
console.Lines[5].ShouldBe("┗━━━━━━━━━━┷━━━━━━━━━━┛");
console.Lines[5].ShouldBe("┠──────────┼──────────┨");
console.Lines[6].ShouldBe("┃ Footer 1 │ Footer 2 ┃");
console.Lines[7].ShouldBe("┗━━━━━━━━━━┷━━━━━━━━━━┛");
}
}
@@ -683,13 +710,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("┏━━━━━━━━━━┳━━━━━━━━━━┓");
console.Lines[1].ShouldBe("┃ Header 1 ┃ Header 2 ┃");
console.Lines[2].ShouldBe("┡━━━━━━━━━━╇━━━━━━━━━━┩");
console.Lines[3].ShouldBe("│ Cell │ Cell │");
console.Lines[4].ShouldBe("│ Cell │ Cell │");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[5].ShouldBe("────────────────────");
console.Lines[6].ShouldBe("│ Footer 1 │ Footer 2 │");
console.Lines[7].ShouldBe("└──────────┴──────────┘");
}
}
@@ -729,13 +758,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("╔══════════╦══════════╗");
console.Lines[1].ShouldBe("║ Header 1 ║ Header 2 ║");
console.Lines[2].ShouldBe("╠══════════╬══════════╣");
console.Lines[3].ShouldBe("║ Cell ║ Cell ║");
console.Lines[4].ShouldBe("║ Cell ║ Cell ║");
console.Lines[5].ShouldBe("════════════════════");
console.Lines[5].ShouldBe("════════════════════");
console.Lines[6].ShouldBe("║ Footer 1 ║ Footer 2 ║");
console.Lines[7].ShouldBe("╚══════════╩══════════╝");
}
}
@@ -775,13 +806,15 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("╔══════════╤══════════╗");
console.Lines[1].ShouldBe("║ Header 1 │ Header 2 ║");
console.Lines[2].ShouldBe("╟──────────┼──────────╢");
console.Lines[3].ShouldBe("║ Cell │ Cell ║");
console.Lines[4].ShouldBe("║ Cell │ Cell ║");
console.Lines[5].ShouldBe("╚══════════╧══════════╝");
console.Lines[5].ShouldBe("╟──────────┼──────────╢");
console.Lines[6].ShouldBe("║ Footer 1 │ Footer 2 ║");
console.Lines[7].ShouldBe("╚══════════╧══════════╝");
}
}
@@ -821,13 +854,14 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(7);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("| -------- | -------- |");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[6].ShouldBe(" ");
}
[Fact]
@@ -841,13 +875,14 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(7);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("| -------- | :------- |");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[6].ShouldBe(" ");
}
[Fact]
@@ -861,13 +896,14 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(7);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("| -------- | :------: |");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[6].ShouldBe(" ");
}
[Fact]
@@ -881,13 +917,14 @@ namespace Spectre.Console.Tests.Unit
console.Render(table);
// Then
console.Lines.Count.ShouldBe(6);
console.Lines.Count.ShouldBe(7);
console.Lines[0].ShouldBe(" ");
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
console.Lines[2].ShouldBe("| -------- | -------: |");
console.Lines[3].ShouldBe("| Cell | Cell |");
console.Lines[4].ShouldBe("| Cell | Cell |");
console.Lines[5].ShouldBe(" ");
console.Lines[5].ShouldBe("| Footer 1 | Footer 2 |");
console.Lines[6].ShouldBe(" ");
}
}
@@ -896,8 +933,8 @@ namespace Spectre.Console.Tests.Unit
public static Table GetTable(Justify? header1 = null, Justify? header2 = null)
{
var table = new Table();
table.AddColumn("Header 1", c => c.Alignment = header1);
table.AddColumn("Header 2", c => c.Alignment = header2);
table.AddColumn("Header 1", c => c.Alignment(header1).Footer("Footer 1"));
table.AddColumn("Header 2", c => c.Alignment(header2).Footer("Footer 2"));
table.AddRow("Cell", "Cell");
table.AddRow("Cell", "Cell");
return table;

View File

@@ -168,6 +168,33 @@ namespace Spectre.Console.Tests.Unit
console.Lines[5].ShouldBe("└────────┴────────┴───────┘");
}
[Fact]
public void Should_Render_Table_With_Footers_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
var table = new Table();
table.AddColumn(new TableColumn("Foo").Footer("Oof").RightAligned());
table.AddColumn("Bar");
table.AddColumns(new TableColumn("Baz").Footer("Zab"));
table.AddRow("Qux", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred");
// When
console.Render(table);
// Then
console.Lines.Count.ShouldBe(8);
console.Lines[0].ShouldBe("┌────────┬────────┬───────┐");
console.Lines[1].ShouldBe("│ Foo │ Bar │ Baz │");
console.Lines[2].ShouldBe("├────────┼────────┼───────┤");
console.Lines[3].ShouldBe("│ Qux │ Corgi │ Waldo │");
console.Lines[4].ShouldBe("│ Grault │ Garply │ Fred │");
console.Lines[5].ShouldBe("├────────┼────────┼───────┤");
console.Lines[6].ShouldBe("│ Oof │ │ Zab │");
console.Lines[7].ShouldBe("└────────┴────────┴───────┘");
}
[Fact]
public void Should_Left_Align_Table_Correctly()
{
@@ -460,13 +487,13 @@ namespace Spectre.Console.Tests.Unit
}
[Fact]
public void Should_Render_Table_With_Title_And_Footnote_Correctly()
public void Should_Render_Table_With_Title_And_Caption_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
var table = new Table { Border = TableBorder.Rounded };
table.Heading = new TableTitle("Hello World");
table.Footnote = new TableTitle("Goodbye World");
table.Title = new TableTitle("Hello World");
table.Caption = new TableTitle("Goodbye World");
table.AddColumns("Foo", "Bar", "Baz");
table.AddRow("Qux", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred");
@@ -487,14 +514,14 @@ namespace Spectre.Console.Tests.Unit
}
[Fact]
public void Should_Left_Align_Table_With_Title_And_Footnote_Correctly()
public void Should_Left_Align_Table_With_Title_And_Caption_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
var table = new Table { Border = TableBorder.Rounded };
table.LeftAligned();
table.Heading = new TableTitle("Hello World");
table.Footnote = new TableTitle("Goodbye World");
table.Title = new TableTitle("Hello World");
table.Caption = new TableTitle("Goodbye World");
table.AddColumns("Foo", "Bar", "Baz");
table.AddRow("Qux", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred");
@@ -515,14 +542,14 @@ namespace Spectre.Console.Tests.Unit
}
[Fact]
public void Should_Center_Table_With_Title_And_Footnote_Correctly()
public void Should_Center_Table_With_Title_And_Caption_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
var table = new Table { Border = TableBorder.Rounded };
table.Centered();
table.Heading = new TableTitle("Hello World");
table.Footnote = new TableTitle("Goodbye World");
table.Title = new TableTitle("Hello World");
table.Caption = new TableTitle("Goodbye World");
table.AddColumns("Foo", "Bar", "Baz");
table.AddRow("Qux", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred");
@@ -543,14 +570,14 @@ namespace Spectre.Console.Tests.Unit
}
[Fact]
public void Should_Right_Align_Table_With_Title_And_Footnote_Correctly()
public void Should_Right_Align_Table_With_Title_And_Caption_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
var table = new Table { Border = TableBorder.Rounded };
table.RightAligned();
table.Heading = new TableTitle("Hello World");
table.Footnote = new TableTitle("Goodbye World");
table.Title = new TableTitle("Hello World");
table.Caption = new TableTitle("Goodbye World");
table.AddColumns("Foo", "Bar", "Baz");
table.AddRow("Qux", "Corgi", "Waldo");
table.AddRow("Grault", "Garply", "Fred");