diff --git a/src/Sample/Program.cs b/src/Sample/Program.cs
index 252e115..8ee07ea 100644
--- a/src/Sample/Program.cs
+++ b/src/Sample/Program.cs
@@ -87,7 +87,7 @@ namespace Sample
table.AddRow("Hej ๐", "[green]Vรคrlden[/]");
AnsiConsole.Render(table);
- table = new Table(BorderKind.Ascii);
+ table = new Table(BorderKind.Rounded);
table.AddColumns("[red underline]Foo[/]", "Bar");
table.AddRow("[blue][underline]Hell[/]o[/]", "World ๐");
table.AddRow("[yellow]Patrik [green]\"Lol[/]\" Svensson[/]", "Was [underline]here[/]!");
diff --git a/src/Spectre.Console.Tests/Unit/Composition/BorderTests.cs b/src/Spectre.Console.Tests/Unit/Composition/BorderTests.cs
index b25fceb..bfebaea 100644
--- a/src/Spectre.Console.Tests/Unit/Composition/BorderTests.cs
+++ b/src/Spectre.Console.Tests/Unit/Composition/BorderTests.cs
@@ -12,6 +12,7 @@ namespace Spectre.Console.Tests.Unit.Composition
[Theory]
[InlineData(BorderKind.Ascii, typeof(AsciiBorder))]
[InlineData(BorderKind.Square, typeof(SquareBorder))]
+ [InlineData(BorderKind.Rounded, typeof(RoundedBorder))]
public void Should_Return_Correct_Border_For_Specified_Kind(BorderKind kind, Type expected)
{
// Given, When
diff --git a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs
index d293fc4..58aed3f 100644
--- a/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs
+++ b/src/Spectre.Console.Tests/Unit/Composition/TableTests.cs
@@ -111,7 +111,7 @@ namespace Spectre.Console.Tests.Unit.Composition
}
[Fact]
- public void Should_Render_Table_With_Specified_Border_Correctly()
+ public void Should_Render_Table_With_Ascii_Border_Correctly()
{
// Given
var console = new PlainConsole(width: 80);
@@ -132,6 +132,28 @@ namespace Spectre.Console.Tests.Unit.Composition
console.Lines[5].ShouldBe("+-------------------------+");
}
+ [Fact]
+ public void Should_Render_Table_With_Rounded_Border_Correctly()
+ {
+ // Given
+ var console = new PlainConsole(width: 80);
+ var table = new Table(BorderKind.Rounded);
+ table.AddColumns("Foo", "Bar", "Baz");
+ table.AddRow("Qux", "Corgi", "Waldo");
+ table.AddRow("Grault", "Garply", "Fred");
+
+ // When
+ console.Render(table);
+
+ // Then
+ 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("โฐโโโโโโโโโดโโโโโโโโโดโโโโโโโโฏ");
+ }
+
[Fact]
public void Should_Render_Table_With_No_Border_Correctly()
{
diff --git a/src/Spectre.Console/Composition/Border.cs b/src/Spectre.Console/Composition/Border.cs
index 2b4659f..3e999f2 100644
--- a/src/Spectre.Console/Composition/Border.cs
+++ b/src/Spectre.Console/Composition/Border.cs
@@ -17,6 +17,7 @@ namespace Spectre.Console.Composition
{ BorderKind.None, new NoBorder() },
{ BorderKind.Ascii, new AsciiBorder() },
{ BorderKind.Square, new SquareBorder() },
+ { BorderKind.Rounded, new RoundedBorder() },
};
///
diff --git a/src/Spectre.Console/Composition/BorderKind.cs b/src/Spectre.Console/Composition/BorderKind.cs
index 010d7c5..37bf537 100644
--- a/src/Spectre.Console/Composition/BorderKind.cs
+++ b/src/Spectre.Console/Composition/BorderKind.cs
@@ -19,5 +19,10 @@ namespace Spectre.Console
/// An old school ASCII border.
///
Ascii = 2,
+
+ ///
+ /// A rounded border.
+ ///
+ Rounded = 3,
}
}
diff --git a/src/Spectre.Console/Composition/Borders/RoundedBorder.cs b/src/Spectre.Console/Composition/Borders/RoundedBorder.cs
new file mode 100644
index 0000000..8b84e99
--- /dev/null
+++ b/src/Spectre.Console/Composition/Borders/RoundedBorder.cs
@@ -0,0 +1,37 @@
+using System;
+
+namespace Spectre.Console.Composition
+{
+ ///
+ /// Represents a rounded border.
+ ///
+ public sealed class RoundedBorder : Border
+ {
+ ///
+ protected override string GetBoxPart(BorderPart part)
+ {
+ return part switch
+ {
+ BorderPart.HeaderTopLeft => "โญ",
+ BorderPart.HeaderTop => "โ",
+ BorderPart.HeaderTopSeparator => "โฌ",
+ BorderPart.HeaderTopRight => "โฎ",
+ BorderPart.HeaderLeft => "โ",
+ BorderPart.HeaderSeparator => "โ",
+ BorderPart.HeaderRight => "โ",
+ BorderPart.HeaderBottomLeft => "โ",
+ BorderPart.HeaderBottom => "โ",
+ BorderPart.HeaderBottomSeparator => "โผ",
+ BorderPart.HeaderBottomRight => "โค",
+ BorderPart.CellLeft => "โ",
+ BorderPart.CellSeparator => "โ",
+ BorderPart.ColumnRight => "โ",
+ BorderPart.FooterBottomLeft => "โฐ",
+ BorderPart.FooterBottom => "โ",
+ BorderPart.FooterBottomSeparator => "โด",
+ BorderPart.FooterBottomRight => "โฏ",
+ _ => throw new InvalidOperationException("Unknown box part."),
+ };
+ }
+ }
+}