From 05d3399f35cb099f73a842e50d17a329d19df644 Mon Sep 17 00:00:00 2001 From: Tig Date: Tue, 16 Apr 2024 11:19:10 -0600 Subject: [PATCH] Added primitive AnchorEnd tests --- UnitTests/View/Layout/AnchorEndTests.cs | 239 +++++++++++++++--------- 1 file changed, 152 insertions(+), 87 deletions(-) diff --git a/UnitTests/View/Layout/AnchorEndTests.cs b/UnitTests/View/Layout/AnchorEndTests.cs index d934f3c36..1d88bd160 100644 --- a/UnitTests/View/Layout/AnchorEndTests.cs +++ b/UnitTests/View/Layout/AnchorEndTests.cs @@ -1,25 +1,165 @@ using Xunit.Abstractions; +using static Terminal.Gui.Pos; namespace Terminal.Gui.ViewTests; public class AnchorEndTests (ITestOutputHelper output) { [Fact] - public void AnchorEnd_Equal () + public void PosAnchorEnd_Constructor () { - var n1 = 0; - var n2 = 0; - - Pos pos1 = Pos.AnchorEnd (n1); - Pos pos2 = Pos.AnchorEnd (n2); - Assert.Equal (pos1, pos2); - - // Test inequality - n2 = 5; - pos2 = Pos.AnchorEnd (n2); - Assert.NotEqual (pos1, pos2); + var posAnchorEnd = new PosAnchorEnd (10); + Assert.NotNull (posAnchorEnd); } + [Theory] + [InlineData (0, 0, true)] + [InlineData (10, 10, true)] + [InlineData (0, 10, false)] + [InlineData (10, 1, false)] + public void PosAnchorEnd_Equals (int offset1, int offset2, bool expectedEquals) + { + var posAnchorEnd1 = new PosAnchorEnd (offset1); + var posAnchorEnd2 = new PosAnchorEnd (offset2); + + Assert.Equal (expectedEquals, posAnchorEnd1.Equals (posAnchorEnd2)); + Assert.Equal (expectedEquals, posAnchorEnd2.Equals (posAnchorEnd1)); + } + + [Fact] + public void PosAnchorEnd_GetHashCode () + { + var posAnchorEnd = new PosAnchorEnd (10); + var expectedHashCode = 10.GetHashCode (); + + Assert.Equal (expectedHashCode, posAnchorEnd.GetHashCode ()); + } + + [Fact] + public void PosAnchorEnd_ToString () + { + var posAnchorEnd = new PosAnchorEnd (10); + var expectedString = "AnchorEnd(10)"; + + Assert.Equal (expectedString, posAnchorEnd.ToString ()); + } + + [Fact] + public void PosAnchorEnd_Anchor () + { + var posAnchorEnd = new PosAnchorEnd (10); + var width = 50; + var expectedAnchor = width - 10; + + Assert.Equal (expectedAnchor, posAnchorEnd.Anchor (width)); + } + + [Fact] + public void AnchorEnd_CreatesCorrectInstance () + { + var pos = Pos.AnchorEnd (10); + Assert.IsType (pos); + } + + [Fact] + public void AnchorEnd_Negative_Throws () + { + Pos pos; + int n = -1; + Assert.Throws (() => pos = Pos.AnchorEnd (n)); + } + + [Theory] + [InlineData (0)] + [InlineData (1)] + public void AnchorEnd_SetsValue_Anchor_Is_Negative (int offset) + { + Pos pos = Pos.AnchorEnd (offset); + Assert.Equal (offset, -pos.Anchor (0)); + } + + [Theory] + [InlineData (0, 0, 25)] + [InlineData (0, 10, 25)] + [InlineData (1, 10, 24)] + [InlineData (10, 10, 15)] + [InlineData (20, 10, 5)] + public void AnchorEnd_With_Offset_PositionsViewOffsetFromRight (int offset, int width, int expectedXPosition) + { + // Arrange + var superView = new View { Width = 25, Height = 25 }; + var view = new View + { + X = Pos.AnchorEnd (offset), + Width = width, + Height = 1 + }; + superView.Add (view); + superView.BeginInit (); + superView.EndInit (); + + // Act + superView.LayoutSubviews (); + + // Assert + Assert.Equal (expectedXPosition, view.Frame.X); + } + + // This test used to be Dialog_In_Window_With_TextField_And_Button_AnchorEnd in DialogTests. + [Fact] + [SetupFakeDriver] + public void AnchorEnd_View_And_Button () + { + ((FakeDriver)Application.Driver).SetBufferSize (20, 5); + + var b = $"{CM.Glyphs.LeftBracket} Ok {CM.Glyphs.RightBracket}"; + + var frame = new FrameView { Width = 18, Height = 3 }; + Assert.Equal (16, frame.Viewport.Width); + + Button btn = null; + + int Btn_Width () { return btn?.Viewport.Width ?? 0; } + + btn = new () { Text = "Ok", X = Pos.AnchorEnd (0) - Pos.Function (Btn_Width) }; + + var view = new View + { + Text = "0123456789abcdefghij", + + // Dim.Fill (1) fills remaining space minus 1 (16 - 1 = 15) + // Dim.Function (Btn_Width) is 6 + // Width should be 15 - 6 = 9 + Width = Dim.Fill (1) - Dim.Function (Btn_Width), + Height = 1 + }; + + frame.Add (btn, view); + frame.BeginInit (); + frame.EndInit (); + frame.Draw (); + + Assert.Equal (6, btn.Viewport.Width); + Assert.Equal (10, btn.Frame.X); // frame.Viewport.Width (16) - btn.Frame.Width (6) = 10 + Assert.Equal (0, btn.Frame.Y); + Assert.Equal (6, btn.Frame.Width); + Assert.Equal (1, btn.Frame.Height); + + Assert.Equal (9, view.Viewport.Width); // frame.Viewport.Width (16) - Dim.Fill (1) - Dim.Function (6) = 9 + Assert.Equal (0, view.Frame.X); + Assert.Equal (0, view.Frame.Y); + Assert.Equal (9, view.Frame.Width); + Assert.Equal (1, view.Frame.Height); + + var expected = $@" +┌────────────────┐ +│012345678 {b}│ +└────────────────┘ +"; + _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + } + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. [Fact] @@ -81,79 +221,4 @@ public class AnchorEndTests (ITestOutputHelper output) Application.End (rs); } - [Fact] - public void AnchorEnd_Negative_Throws () - { - Pos pos; - int n = -1; - Assert.Throws (() => pos = Pos.AnchorEnd (n)); - } - - [Fact] - public void AnchorEnd_SetsValue () - { - var n = 0; - Pos pos = Pos.AnchorEnd (0); - Assert.Equal ($"AnchorEnd({n})", pos.ToString ()); - - n = 5; - pos = Pos.AnchorEnd (n); - Assert.Equal ($"AnchorEnd({n})", pos.ToString ()); - } - - // This test used to be Dialog_In_Window_With_TextField_And_Button_AnchorEnd in DialogTests. - [Fact] - [SetupFakeDriver] - public void AnchorEnd_View_And_Button () - { - ((FakeDriver)Application.Driver).SetBufferSize (20, 5); - - var b = $"{CM.Glyphs.LeftBracket} Ok {CM.Glyphs.RightBracket}"; - - var frame = new FrameView { Width = 18, Height = 3 }; - Assert.Equal (16, frame.Viewport.Width); - - Button btn = null; - - int Btn_Width () { return btn?.Viewport.Width ?? 0; } - - btn = new() { Text = "Ok", X = Pos.AnchorEnd (0) - Pos.Function (Btn_Width) }; - - var view = new View - { - Text = "0123456789abcdefghij", - - // Dim.Fill (1) fills remaining space minus 1 (16 - 1 = 15) - // Dim.Function (Btn_Width) is 6 - // Width should be 15 - 6 = 9 - Width = Dim.Fill (1) - Dim.Function (Btn_Width), - Height = 1 - }; - - frame.Add (btn, view); - frame.BeginInit (); - frame.EndInit (); - frame.Draw (); - - Assert.Equal (6, btn.Viewport.Width); - Assert.Equal (10, btn.Frame.X); // frame.Viewport.Width (16) - btn.Frame.Width (6) = 10 - Assert.Equal (0, btn.Frame.Y); - Assert.Equal (6, btn.Frame.Width); - Assert.Equal (1, btn.Frame.Height); - - Assert.Equal (9, view.Viewport.Width); // frame.Viewport.Width (16) - Dim.Fill (1) - Dim.Function (6) = 9 - Assert.Equal (0, view.Frame.X); - Assert.Equal (0, view.Frame.Y); - Assert.Equal (9, view.Frame.Width); - Assert.Equal (1, view.Frame.Height); - - var expected = $@" -┌────────────────┐ -│012345678 { - b -}│ -└────────────────┘ -"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); - } }