123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- using Terminal.Gui.Graphs;
- using Xunit;
- using Xunit.Abstractions;
- namespace Terminal.Gui.Core {
- public class LineCanvasTests {
- readonly ITestOutputHelper output;
- public LineCanvasTests (ITestOutputHelper output)
- {
- this.output = output;
- }
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Dot ()
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 0, Orientation.Horizontal, BorderStyle.Single);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- .";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [InlineData (BorderStyle.Single)]
- [InlineData (BorderStyle.Rounded)]
- [Theory, AutoInitShutdown]
- public void TestLineCanvas_Horizontal (BorderStyle style)
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Horizontal, style);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ──";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Horizontal_Double ()
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Horizontal, BorderStyle.Double);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ══";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [InlineData (BorderStyle.Single)]
- [InlineData(BorderStyle.Rounded)]
- [Theory, AutoInitShutdown]
- public void TestLineCanvas_Vertical (BorderStyle style)
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Vertical, style);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- │
- │";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Vertical_Double ()
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Vertical, BorderStyle.Double);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ║
- ║";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- /// <summary>
- /// This test demonstrates that corners are only drawn when lines overlap.
- /// Not when they terminate adjacent to one another.
- /// </summary>
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Corner_NoOverlap()
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Horizontal, BorderStyle.Single);
- canvas.AddLine (new Point (0, 1), 1, Orientation.Vertical, BorderStyle.Single);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ──
- │
- │";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- /// <summary>
- /// This test demonstrates how to correctly trigger a corner. By
- /// overlapping the lines in the same cell
- /// </summary>
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Corner_Correct ()
- {
- var v = GetCanvas (out var canvas);
- canvas.AddLine (new Point (0, 0), 1, Orientation.Horizontal, BorderStyle.Single);
- canvas.AddLine (new Point (0, 0), 2, Orientation.Vertical, BorderStyle.Single);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ┌─
- │
- │";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
-
- }
- [Fact,AutoInitShutdown]
- public void TestLineCanvas_Window ()
- {
- var v = GetCanvas (out var canvas);
-
- // outer box
- canvas.AddLine (new Point (0, 0), 9, Orientation.Horizontal, BorderStyle.Single);
- canvas.AddLine (new Point (9, 0), 4, Orientation.Vertical, BorderStyle.Single);
- canvas.AddLine (new Point (9, 4), -9, Orientation.Horizontal, BorderStyle.Single);
- canvas.AddLine (new Point (0, 4), -4, Orientation.Vertical, BorderStyle.Single);
- canvas.AddLine (new Point (5, 0), 4, Orientation.Vertical, BorderStyle.Single);
- canvas.AddLine (new Point (0, 2), 9, Orientation.Horizontal, BorderStyle.Single);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ┌────┬───┐
- │ │ │
- ├────┼───┤
- │ │ │
- └────┴───┘";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- [Fact, AutoInitShutdown]
- public void TestLineCanvas_Window_Double ()
- {
- var v = GetCanvas (out var canvas);
- // outer box
- canvas.AddLine (new Point (0, 0), 9, Orientation.Horizontal, BorderStyle.Double);
- canvas.AddLine (new Point (9, 0), 4, Orientation.Vertical, BorderStyle.Double);
- canvas.AddLine (new Point (9, 4), -9, Orientation.Horizontal, BorderStyle.Double);
- canvas.AddLine (new Point (0, 4), -4, Orientation.Vertical, BorderStyle.Double);
- canvas.AddLine (new Point (5, 0), 4, Orientation.Vertical, BorderStyle.Double);
- canvas.AddLine (new Point (0, 2), 9, Orientation.Horizontal, BorderStyle.Double);
- v.Redraw (v.Bounds);
- string looksLike =
- @"
- ╔════╦═══╗
- ║ ║ ║
- ╠════╬═══╣
- ║ ║ ║
- ╚════╩═══╝";
- TestHelpers.AssertDriverContentsAre (looksLike, output);
- }
- private View GetCanvas (out LineCanvas canvas)
- {
- var v = new View {
- Width = 10,
- Height = 5,
- Bounds = new Rect (0, 0, 10, 5)
- };
- var canvasCopy = canvas = new LineCanvas (Application.Driver);
- v.DrawContentComplete += (r)=> canvasCopy.Draw (v, v.Bounds);
- return v;
- }
- }
- }
|