123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xunit;
- using Xunit.Abstractions;
- namespace Terminal.Gui.Views {
- public class PanelViewTests {
- readonly ITestOutputHelper output;
- public PanelViewTests (ITestOutputHelper output)
- {
- this.output = output;
- }
- [Fact]
- public void Constructor_Defaults ()
- {
- var pv = new PanelView ();
- Assert.False (pv.CanFocus);
- Assert.False (pv.Visible);
- Assert.False (pv.UsePanelFrame);
- Assert.Null (pv.Child);
- pv = new PanelView (new Label ("This is a test."));
- Assert.False (pv.CanFocus);
- Assert.True (pv.Visible);
- Assert.False (pv.UsePanelFrame);
- Assert.NotNull (pv.Child);
- Assert.NotNull (pv.Border);
- Assert.NotNull (pv.Child.Border);
- }
- [Fact]
- public void Child_Sets_To_Null_Remove_From_Subviews_PanelView ()
- {
- var pv = new PanelView (new Label ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- pv.Child = null;
- Assert.Null (pv.Child);
- Assert.Equal (0, pv.Subviews [0].Subviews.Count);
- }
- [Fact]
- public void Add_View_Also_Sets_Child ()
- {
- var pv = new PanelView ();
- Assert.Null (pv.Child);
- Assert.Equal (0, pv.Subviews [0].Subviews.Count);
- pv.Add (new Label ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- }
- [Fact]
- public void Add_More_Views_Remove_Last_Child_Before__Only_One_Is_Allowed ()
- {
- var pv = new PanelView (new Label ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- Assert.IsType<Label> (pv.Child);
- pv.Add (new TextField ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- Assert.IsNotType<Label> (pv.Child);
- Assert.IsType<TextField> (pv.Child);
- }
- [Fact]
- public void Remove_RemoveAll_View_Also_Sets_Child_To_Null ()
- {
- var pv = new PanelView (new Label ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- pv.Remove (pv.Child);
- Assert.Null (pv.Child);
- Assert.Equal (0, pv.Subviews [0].Subviews.Count);
- pv = new PanelView (new Label ("This is a test."));
- Assert.NotNull (pv.Child);
- Assert.Equal (1, pv.Subviews [0].Subviews.Count);
- pv.RemoveAll ();
- Assert.Null (pv.Child);
- Assert.Equal (0, pv.Subviews [0].Subviews.Count);
- }
- [Fact]
- [AutoInitShutdown]
- public void AdjustContainer_Without_Border ()
- {
- var top = Application.Top;
- var win = new Window ();
- var pv = new PanelView (new Label ("This is a test."));
- win.Add (pv);
- top.Add (win);
- Application.Begin (top);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- }
- [Fact]
- [AutoInitShutdown]
- public void AdjustContainer_With_Border_Absolute_Values ()
- {
- var top = Application.Top;
- var win = new Window ();
- var pv = new PanelView (new Label ("This is a test.") {
- Border = new Border () {
- BorderStyle = BorderStyle.Double,
- BorderThickness = new Thickness (1, 2, 3, 4),
- Padding = new Thickness (1, 2, 3, 4)
- }
- });
- win.Add (pv);
- top.Add (win);
- Application.Begin (top);
- Assert.False (pv.Child.Border.Effect3D);
- Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- pv.Child.Border.Effect3D = true;
- Assert.True (pv.Child.Border.Effect3D);
- Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- pv.Child.Border.Effect3DOffset = new Point (-1, -1);
- Assert.Equal (new Point (-1, -1), pv.Child.Border.Effect3DOffset);
- Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- }
- [Fact]
- [AutoInitShutdown]
- public void AdjustContainer_With_Border_Computed_Values ()
- {
- var top = Application.Top;
- var win = new Window ();
- var pv = new PanelView (new TextView () {
- Width = Dim.Fill (),
- Height = Dim.Fill (),
- Border = new Border () {
- BorderStyle = BorderStyle.Double,
- BorderThickness = new Thickness (1, 2, 3, 4),
- Padding = new Thickness (1, 2, 3, 4)
- }
- });
- var pv1 = new PanelView (new TextView () {
- Width = Dim.Fill (1),
- Height = Dim.Fill (1),
- Border = new Border () {
- BorderStyle = BorderStyle.Double,
- BorderThickness = new Thickness (1, 2, 3, 4),
- Padding = new Thickness (1, 2, 3, 4)
- }
- });
- var pv2 = new PanelView (new TextView () {
- Width = Dim.Fill (2),
- Height = Dim.Fill (2),
- Border = new Border () {
- BorderStyle = BorderStyle.Double,
- BorderThickness = new Thickness (1, 2, 3, 4),
- Padding = new Thickness (1, 2, 3, 4)
- }
- });
- win.Add (pv, pv1, pv2);
- top.Add (win);
- Application.Begin (top);
- Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
- Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
- Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
- Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
- Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
- Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
- pv.Child.Border.Effect3D = pv1.Child.Border.Effect3D = pv2.Child.Border.Effect3D = true;
- Assert.True (pv.Child.Border.Effect3D);
- Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
- Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
- Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
- Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
- Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
- Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
- pv.Child.Border.Effect3DOffset = pv1.Child.Border.Effect3DOffset = pv2.Child.Border.Effect3DOffset = new Point (-1, -1);
- Assert.Equal (new Point (-1, -1), pv.Child.Border.Effect3DOffset);
- Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
- Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
- Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
- Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
- Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
- Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
- }
- [Fact]
- [AutoInitShutdown]
- public void UsePanelFrame_False_PanelView_Always_Respect_The_PanelView_Upper_Left_Corner_Position_And_The_Child_Size ()
- {
- var top = Application.Top;
- var win = new Window ();
- var pv = new PanelView (new Label ("This is a test.")) {
- X = 2,
- Y = 4,
- Width = 20,
- Height = 10
- };
- var pv1 = new PanelView (new TextField (3, 4, 15, "This is a test.")) {
- X = 2,
- Y = 4,
- Width = 20,
- Height = 10
- };
- var pv2 = new PanelView (new TextView () {
- X = 5,
- Y = 6,
- Width = Dim.Fill (),
- Height = Dim.Fill ()
- }) {
- X = 2,
- Y = 4,
- Width = 20,
- Height = 10
- };
- win.Add (pv, pv1, pv2);
- top.Add (win);
- Application.Begin (top);
- Assert.False (pv.UsePanelFrame);
- Assert.False (pv.Border.Effect3D);
- Assert.Equal (pv.Child.Border, pv.Border);
- Assert.False (pv1.UsePanelFrame);
- Assert.False (pv1.Border.Effect3D);
- Assert.Equal (pv1.Child.Border, pv1.Border);
- Assert.False (pv2.UsePanelFrame);
- Assert.False (pv2.Border.Effect3D);
- Assert.Equal (pv2.Child.Border, pv2.Border);
- Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
- Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
- Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
- Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
- pv.Border.Effect3D = pv1.Border.Effect3D = pv2.Border.Effect3D = true;
- Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
- Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
- Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
- Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
- pv.Border.Effect3DOffset = pv1.Border.Effect3DOffset = pv2.Border.Effect3DOffset = new Point (-1, -1);
- Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
- Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
- Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
- Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
- Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
- Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
- }
- [Fact]
- [AutoInitShutdown]
- public void UsePanelFrame_True_PanelView_Position_And_Size_Are_Used_Depending_On_Effect3DOffset ()
- {
- var top = Application.Top;
- var win = new Window ();
- var pv = new PanelView (new TextView () {
- X = 2,
- Y = 4,
- Width = 20,
- Height = 10
- }) {
- X = 5,
- Y = 6,
- Width = Dim.Fill (),
- Height = Dim.Fill (),
- UsePanelFrame = true
- };
- var pv1 = new PanelView (new TextView () {
- X = 5,
- Y = 6,
- Width = Dim.Fill (),
- Height = Dim.Fill ()
- }) {
- X = 2,
- Y = 4,
- Width = 20,
- Height = 10,
- UsePanelFrame = true
- };
- win.Add (pv, pv1);
- top.Add (win);
- Application.Begin (top);
- Assert.Equal (new Rect (5, 6, 73, 17), pv.Frame);
- Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
- Assert.Equal (new Rect (2, 4, 20, 10), pv1.Frame);
- Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
- pv.Border.Effect3D = pv1.Border.Effect3D = true;
- Assert.Equal (new Rect (5, 6, 73, 17), pv.Frame);
- Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
- Assert.Equal (new Rect (2, 4, 20, 10), pv1.Frame);
- Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
- pv.Border.Effect3DOffset = pv1.Border.Effect3DOffset = new Point (-1, -1);
- Assert.Equal (new Rect (6, 7, 73, 17), pv.Frame);
- Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
- Assert.Equal (new Rect (3, 5, 20, 10), pv1.Frame);
- Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
- }
- [Fact, AutoInitShutdown]
- public void Setting_Child_Size_Disable_AutoSize ()
- {
- var top = Application.Top;
- var win = new Window ();
- var label = new Label () {
- ColorScheme = Colors.TopLevel,
- Text = "This is a test\nwith a \nPanelView",
- TextAlignment = TextAlignment.Centered,
- Width = 24,
- Height = 13,
- AutoSize = false
- };
- var pv = new PanelView (label) {
- Width = 24,
- Height = 13,
- Border = new Border () {
- BorderStyle = BorderStyle.Single,
- DrawMarginFrame = true,
- BorderThickness = new Thickness (2),
- BorderBrush = Color.Red,
- Padding = new Thickness (2),
- Background = Color.BrightGreen,
- Effect3D = true
- },
- };
- win.Add (pv);
- top.Add (win);
- Application.Begin (top);
- Assert.False (label.AutoSize);
- Assert.Equal (new Rect (0, 0, 24, 13), label.Frame);
- Assert.Equal (new Rect (0, 0, 34, 23), pv.Frame);
- Assert.Equal (new Rect (0, 0, 80, 25), win.Frame);
- Assert.Equal (new Rect (0, 0, 80, 25), Application.Top.Frame);
- var expected = @"
- ┌──────────────────────────────────────────────────────────────────────────────┐
- │ │
- │ │
- │ │
- │ │
- │ ┌────────────────────────┐ │
- │ │ This is a test │ │
- │ │ with a │ │
- │ │ PanelView │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ └────────────────────────┘ │
- │ │
- │ │
- │ │
- │ │
- └──────────────────────────────────────────────────────────────────────────────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (0, 0, 80, 25), pos);
- }
- [Fact, AutoInitShutdown]
- public void Not_Setting_Child_Size_Default_AutoSize_True ()
- {
- var top = Application.Top;
- var win = new Window ();
- var label = new Label () {
- ColorScheme = Colors.TopLevel,
- Text = "This is a test\nwith a \nPanelView",
- TextAlignment = TextAlignment.Centered
- };
- var pv = new PanelView (label) {
- Width = 24,
- Height = 13,
- Border = new Border () {
- BorderStyle = BorderStyle.Single,
- DrawMarginFrame = true,
- BorderThickness = new Thickness (2),
- BorderBrush = Color.Red,
- Padding = new Thickness (2),
- Background = Color.BrightGreen,
- Effect3D = true
- },
- };
- win.Add (pv);
- top.Add (win);
- Application.Begin (top);
- Assert.True (label.AutoSize);
- Assert.False (pv.UsePanelFrame);
- Assert.Equal (new Rect (0, 0, 14, 3), label.Frame);
- Assert.Equal (new Rect (0, 0, 24, 13), pv.Frame);
- Assert.Equal (new Rect (0, 0, 80, 25), win.Frame);
- Assert.Equal (new Rect (0, 0, 80, 25), Application.Top.Frame);
- var expected = @"
- ┌──────────────────────────────────────────────────────────────────────────────┐
- │ │
- │ │
- │ │
- │ │
- │ ┌──────────────┐ │
- │ │This is a test│ │
- │ │ with a │ │
- │ │ PanelView │ │
- │ └──────────────┘ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └──────────────────────────────────────────────────────────────────────────────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (0, 0, 80, 25), pos);
- }
- }
- }
|