using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; /// Tests of the property with set to false. public class AutoSizeFalseTests { private readonly ITestOutputHelper _output; public AutoSizeFalseTests (ITestOutputHelper output) { _output = output; } [Fact] public void AutoSize_False_Equal_Before_And_After_IsInitialized_With_Different_Orders () { var top = new View { Height = 25, Width = 80 }; var view1 = new View { Text = "Say Hello view1 你", AutoSize = false, Width = 10, Height = 5 }; var view2 = new View { Text = "Say Hello view2 你", AutoSize = false, Width = 10, Height = 5 }; var view3 = new View { AutoSize = false, Width = 10, Height = 5, Text = "Say Hello view3 你" }; var view4 = new View { Text = "Say Hello view4 你", AutoSize = false, Width = 10, Height = 5, TextDirection = TextDirection.TopBottom_LeftRight }; var view5 = new View { Text = "Say Hello view5 你", AutoSize = false, Width = 10, Height = 5, TextDirection = TextDirection.TopBottom_LeftRight }; var view6 = new View { AutoSize = false, Width = 10, Height = 5, TextDirection = TextDirection.TopBottom_LeftRight, Text = "Say Hello view6 你" }; top.Add (view1, view2, view3, view4, view5, view6); Assert.False (view1.IsInitialized); Assert.False (view2.IsInitialized); Assert.False (view3.IsInitialized); Assert.False (view4.IsInitialized); Assert.False (view5.IsInitialized); Assert.False (view1.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view1.Frame); Assert.Equal ("Absolute(10)", view1.Width.ToString ()); Assert.Equal ("Absolute(5)", view1.Height.ToString ()); Assert.False (view2.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view2.Frame); Assert.Equal ("Absolute(10)", view2.Width.ToString ()); Assert.Equal ("Absolute(5)", view2.Height.ToString ()); Assert.False (view3.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view3.Frame); Assert.Equal ("Absolute(10)", view3.Width.ToString ()); Assert.Equal ("Absolute(5)", view3.Height.ToString ()); Assert.False (view4.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view4.Frame); Assert.Equal ("Absolute(10)", view4.Width.ToString ()); Assert.Equal ("Absolute(5)", view4.Height.ToString ()); Assert.False (view5.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view5.Frame); Assert.Equal ("Absolute(10)", view5.Width.ToString ()); Assert.Equal ("Absolute(5)", view5.Height.ToString ()); Assert.False (view6.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view6.Frame); Assert.Equal ("Absolute(10)", view6.Width.ToString ()); Assert.Equal ("Absolute(5)", view6.Height.ToString ()); top.BeginInit (); top.EndInit (); Assert.True (view1.IsInitialized); Assert.True (view2.IsInitialized); Assert.True (view3.IsInitialized); Assert.True (view4.IsInitialized); Assert.True (view5.IsInitialized); Assert.False (view1.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view1.Frame); Assert.Equal ("Absolute(10)", view1.Width.ToString ()); Assert.Equal ("Absolute(5)", view1.Height.ToString ()); Assert.False (view2.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view2.Frame); Assert.Equal ("Absolute(10)", view2.Width.ToString ()); Assert.Equal ("Absolute(5)", view2.Height.ToString ()); Assert.False (view3.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view3.Frame); Assert.Equal ("Absolute(10)", view3.Width.ToString ()); Assert.Equal ("Absolute(5)", view3.Height.ToString ()); Assert.False (view4.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view4.Frame); Assert.Equal ("Absolute(10)", view4.Width.ToString ()); Assert.Equal ("Absolute(5)", view4.Height.ToString ()); Assert.False (view5.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view5.Frame); Assert.Equal ("Absolute(10)", view5.Width.ToString ()); Assert.Equal ("Absolute(5)", view5.Height.ToString ()); Assert.False (view6.AutoSize); Assert.Equal (new Rectangle (0, 0, 10, 5), view6.Frame); Assert.Equal ("Absolute(10)", view6.Width.ToString ()); Assert.Equal ("Absolute(5)", view6.Height.ToString ()); } [Fact] public void AutoSize_False_If_Text_Empty () { var view1 = new View (); var view3 = new View { Text = "" }; Assert.False (view1.AutoSize); Assert.False (view3.AutoSize); view1.Dispose (); view3.Dispose (); } [Fact] public void AutoSize_False_If_Text_Is_Not_Empty () { var view1 = new View (); view1.Text = "Hello World"; var view3 = new View { Text = "Hello World" }; Assert.False (view1.AutoSize); Assert.False (view3.AutoSize); view1.Dispose (); view3.Dispose (); } [Fact] public void AutoSize_False_ResizeView_Is_Always_False () { var super = new View (); var view = new View (); super.Add (view); view.Text = "New text"; super.LayoutSubviews (); Rectangle expectedViewBounds = new (0, 0, 0, 0); Assert.False (view.AutoSize); Assert.Equal (expectedViewBounds, view.Viewport); super.Dispose (); } [Fact] public void AutoSize_False_ResizeView_With_Dim_Fill_After_IsInitialized () { var super = new View { Frame = new Rectangle (0, 0, 30, 80) }; var view = new View { Width = Dim.Fill (), Height = Dim.Fill () }; super.Add (view); Assert.False (view.AutoSize); view.Text = "New text\nNew line"; super.LayoutSubviews (); Rectangle expectedViewBounds = new (0, 0, 30, 80); Assert.False (view.AutoSize); Assert.Equal (expectedViewBounds, view.Viewport); Assert.False (view.IsInitialized); super.BeginInit (); super.EndInit (); Assert.True (view.IsInitialized); Assert.False (view.AutoSize); Assert.Equal (expectedViewBounds, view.Viewport); } [Fact] [SetupFakeDriver] public void AutoSize_False_Setting_AutoSize_False_Keeps_Dims () { var super = new View { Width = 10, Height = 10 }; var view = new View (); view.Width = 2; view.Height = 1; Assert.Equal ("Absolute(2)", view.Width.ToString ()); Assert.Equal ("Absolute(1)", view.Height.ToString ()); super.Add (view); super.BeginInit (); super.EndInit (); super.LayoutSubviews (); Assert.Equal ("Absolute(2)", view.Width.ToString ()); Assert.Equal ("Absolute(1)", view.Height.ToString ()); view.AutoSize = true; // There's no Text, so the view should be sized (0, 0) Assert.Equal ("Absolute(0)", view.Width.ToString ()); Assert.Equal ("Absolute(0)", view.Height.ToString ()); view.AutoSize = false; Assert.Equal ("Absolute(0)", view.Width.ToString ()); Assert.Equal ("Absolute(0)", view.Height.ToString ()); view.Width = 2; view.Height = 1; Assert.Equal ("Absolute(2)", view.Width.ToString ()); Assert.Equal ("Absolute(1)", view.Height.ToString ()); view.AutoSize = false; Assert.Equal ("Absolute(2)", view.Width.ToString ()); Assert.Equal ("Absolute(1)", view.Height.ToString ()); } [Fact] public void AutoSize_False_Text_Does_Not_Change_Size () { var view = new View { Width = Dim.Fill (), Height = Dim.Fill () }; view.SetRelativeLayout (new (0, 0, 10, 4)); Assert.Equal (new (0, 0, 10, 4), view.Frame); Assert.Equal (new (0, 0), view.TextFormatter.Size); Assert.False (view.AutoSize); Assert.True (view.TextFormatter.NeedsFormat); Assert.Equal (string.Empty, view.TextFormatter.Format ()); // There's no size, so it returns an empty string Assert.False (view.TextFormatter.NeedsFormat); Assert.Single (view.TextFormatter.GetLines ()); Assert.True (string.IsNullOrEmpty (view.TextFormatter.GetLines () [0])); view.Text = "Views"; Assert.True (view.TextFormatter.NeedsFormat); Assert.Equal (new (0, 0), view.TextFormatter.Size); Assert.Equal (string.Empty, view.TextFormatter.Format ()); // There's no size, so it returns an empty string Assert.False (view.TextFormatter.NeedsFormat); Assert.Single (view.TextFormatter.GetLines ()); Assert.True (string.IsNullOrEmpty (view.TextFormatter.GetLines () [0])); } [Fact] [SetupFakeDriver] public void AutoSize_False_View_IsEmpty_False_Return_Null_Lines () { var text = "Views"; var view = new View { Width = Dim.Fill () - text.Length, Height = 1, Text = text }; var frame = new FrameView { Width = Dim.Fill (), Height = Dim.Fill () }; frame.Add (view); ((FakeDriver)Application.Driver).SetBufferSize (10, 4); frame.BeginInit (); frame.EndInit (); frame.LayoutSubviews (); Assert.Equal (5, text.Length); Assert.False (view.AutoSize); Assert.Equal (new (0, 0, 3, 1), view.Frame); Assert.Equal (new (3, 1), view.TextFormatter.Size); Assert.Equal (new List { "Vie" }, view.TextFormatter.GetLines ()); Assert.Equal (new (0, 0, 10, 4), frame.Frame); frame.LayoutSubviews (); frame.Clear (); frame.Draw (); var expected = @" ┌────────┐ │Vie │ │ │ └────────┘ "; Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); Assert.Equal (new (0, 0, 10, 4), pos); text = "0123456789"; Assert.Equal (10, text.Length); view.Width = Dim.Fill () - text.Length; frame.LayoutSubviews (); frame.Clear (); frame.Draw (); Assert.Equal (new (0, 0, 0, 1), view.Frame); Assert.Equal (new (0, 1), view.TextFormatter.Size); Assert.Equal (new List { string.Empty }, view.TextFormatter.GetLines ()); expected = @" ┌────────┐ │ │ │ │ └────────┘ "; pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); Assert.Equal (new (0, 0, 10, 4), pos); } [Fact] [SetupFakeDriver] public void AutoSize_False_Width_Height_SetMinWidthHeight_Narrow_Wide_Runes () { ((FakeDriver)Application.Driver).SetBufferSize (32, 32); var top = new View { Width = 32, Height = 32 }; var text = $"First line{Environment.NewLine}Second line"; var horizontalView = new View { Width = 20, Height = 1, Text = text }; // Autosize is off, so we have to explicitly set TextFormatter.Size horizontalView.TextFormatter.Size = new (20, 1); var verticalView = new View { Y = 3, Height = 20, Width = 1, Text = text, TextDirection = TextDirection.TopBottom_LeftRight }; // Autosize is off, so we have to explicitly set TextFormatter.Size verticalView.TextFormatter.Size = new (1, 20); var frame = new FrameView { Width = Dim.Fill (), Height = Dim.Fill (), Text = "Window" }; frame.Add (horizontalView, verticalView); top.Add (frame); top.BeginInit (); top.EndInit (); Assert.False (horizontalView.AutoSize); Assert.False (verticalView.AutoSize); Assert.Equal (new (0, 0, 20, 1), horizontalView.Frame); Assert.Equal (new (0, 3, 1, 20), verticalView.Frame); top.Draw (); var expected = @" ┌──────────────────────────────┐ │First line Second li │ │ │ │ │ │F │ │i │ │r │ │s │ │t │ │ │ │l │ │i │ │n │ │e │ │ │ │S │ │e │ │c │ │o │ │n │ │d │ │ │ │l │ │i │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────────────────────┘ "; Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); verticalView.Text = $"最初の行{Environment.NewLine}二行目"; Assert.True (verticalView.TextFormatter.NeedsFormat); // Autosize is off, so we have to explicitly set TextFormatter.Size // We know these glpyhs are 2 cols wide, so we need to widen the view verticalView.Width = 2; verticalView.TextFormatter.Size = new (2, 20); Assert.True (verticalView.TextFormatter.NeedsFormat); top.Draw (); Assert.Equal (new (0, 3, 2, 20), verticalView.Frame); expected = @" ┌──────────────────────────────┐ │First line Second li │ │ │ │ │ │最 │ │初 │ │の │ │行 │ │ │ │二 │ │行 │ │目 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────────────────────┘ "; pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); } }