From 7119ee74ff4f95532f55f8da3f9e4434fbedd21e Mon Sep 17 00:00:00 2001 From: Tig Date: Fri, 8 Mar 2024 23:50:49 -0700 Subject: [PATCH] Adornment w/ subview unit tests --- Terminal.Gui/View/Adornment/Adornment.cs | 2 +- .../View/Adornment/AdornmentSubViewTests.cs | 43 +++++++++++++++---- UnitTests/View/Adornment/AdornmentTests.cs | 8 +--- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/Terminal.Gui/View/Adornment/Adornment.cs b/Terminal.Gui/View/Adornment/Adornment.cs index 58d81c92f..9d490e6a7 100644 --- a/Terminal.Gui/View/Adornment/Adornment.cs +++ b/Terminal.Gui/View/Adornment/Adornment.cs @@ -88,7 +88,7 @@ public class Adornment : View if (prev != _thickness) { - Parent.SetNeedsLayout (); + Parent?.SetNeedsLayout (); Parent?.LayoutSubviews (); OnThicknessChanged (prev); } diff --git a/UnitTests/View/Adornment/AdornmentSubViewTests.cs b/UnitTests/View/Adornment/AdornmentSubViewTests.cs index 6348a867a..b11cf25e0 100644 --- a/UnitTests/View/Adornment/AdornmentSubViewTests.cs +++ b/UnitTests/View/Adornment/AdornmentSubViewTests.cs @@ -6,25 +6,33 @@ public class AdornmentSubViewTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; - [Fact] - public void Adornment_WithSubView_FindDeepestView_Finds () + [Theory] + [InlineData (0, 0, false)] // Margin has no thickness, so false + [InlineData (0, 1, false)] // Margin has no thickness, so false + [InlineData (1, 0, true)] + [InlineData (1, 1, true)] + [InlineData (2, 1, true)] + public void Adornment_WithSubView_FindDeepestView_Finds (int viewMargin, int subViewMargin, bool expectedFound) { var view = new View () { Width = 10, Height = 10 - }; - view.Padding.Thickness = new Thickness (1); + view.Margin.Thickness = new Thickness (viewMargin); var subView = new View () { X = 0, Y =0, - Width = 1, - Height = 1 + Width = 5, + Height = 5 }; - view.Padding.Add (subView); + subView.Margin.Thickness = new Thickness (subViewMargin); + view.Margin.Add (subView); - Assert.Equal (subView, View.FindDeepestView (view, 0, 0)); + var foundView = View.FindDeepestView (view, 0, 0); + + bool found = foundView == subView || foundView == subView.Margin; + Assert.Equal (expectedFound, found); } [Fact] @@ -50,4 +58,23 @@ public class AdornmentSubViewTests (ITestOutputHelper output) Assert.Equal (view.Padding, View.FindDeepestView (view, 0, 0)); } + + [Fact] + public void Setting_Thickness_Causes_Adornment_SubView_Layout () + { + var view = new View (); + var subView = new View (); + view.Margin.Add (subView); + var raised = false; + + subView.LayoutStarted += LayoutStarted; + view.Margin.Thickness = new Thickness (1, 2, 3, 4); + Assert.True (raised); + + return; + void LayoutStarted (object sender, LayoutEventArgs e) + { + raised = true; + } + } } diff --git a/UnitTests/View/Adornment/AdornmentTests.cs b/UnitTests/View/Adornment/AdornmentTests.cs index 617ed32e9..1d6e5b6e0 100644 --- a/UnitTests/View/Adornment/AdornmentTests.cs +++ b/UnitTests/View/Adornment/AdornmentTests.cs @@ -358,11 +358,7 @@ public class AdornmentTests (ITestOutputHelper output) [Fact] public void Setting_Thickness_Causes_Adornment_Layout () { - var view = new View () - { - Width = 5, - Height = 5 - }; + var view = new View (); var raised = false; view.BeginInit (); view.EndInit (); @@ -376,7 +372,5 @@ public class AdornmentTests (ITestOutputHelper output) { raised = true; } - } - }