diff --git a/Terminal.Gui/View/Layout/PosDim.cs b/Terminal.Gui/View/Layout/PosDim.cs index ce9fb50a0..3445fe427 100644 --- a/Terminal.Gui/View/Layout/PosDim.cs +++ b/Terminal.Gui/View/Layout/PosDim.cs @@ -648,7 +648,7 @@ public class Pos public class Dim { /// - /// Specifies how will compute the dimension. + /// Specifies how will compute the dimension. /// [Flags] public enum DimAutoStyle @@ -731,18 +731,18 @@ public class Dim /// /// The object. /// - /// Specifies how will compute the dimension. The default is . + /// Specifies how will compute the dimension. The default is . /// - /// Specifies the minimum dimension that view will be automatically sized to. - /// Specifies the maximum dimension that view will be automatically sized to. NOT CURRENTLY SUPPORTED. - public static Dim Auto (DimAutoStyle style = DimAutoStyle.Auto, Dim min = null, Dim max = null) + /// The minimum dimension the View's ContentSize will be constrained to. + /// The maximum dimension the View's ContentSize will be fit to. NOT CURRENTLY SUPPORTED. + public static Dim Auto (DimAutoStyle style = DimAutoStyle.Auto, Dim minimumContentDim = null, Dim maximumContentDim = null) { - if (max != null) + if (maximumContentDim != null) { - throw new NotImplementedException (@"max is not implemented"); + throw new NotImplementedException (@"maximumContentDim is not implemented"); } - return new DimAuto (style, min, max); + return new DimAuto (style, minimumContentDim, maximumContentDim); } /// Determines whether the specified object is equal to the current object. @@ -928,33 +928,33 @@ public class Dim /// /// Specifies how will compute the dimension. The default is . /// - /// Specifies the minimum dimension that view will be automatically sized to. - /// Specifies the maximum dimension that view will be automatically sized to. NOT CURRENTLY SUPPORTED. - public class DimAuto (DimAutoStyle style, Dim min, Dim max) : Dim + /// The minimum dimension the View's ContentSize will be constrained to. + /// The maximum dimension the View's ContentSize will be fit to. NOT CURRENTLY SUPPORTED. + public class DimAuto (DimAutoStyle style, Dim minimumContentDim, Dim maximumContentDim) : Dim { - internal readonly Dim _max = max; - internal readonly Dim _min = min; + internal readonly Dim _minContentDim = minimumContentDim; + internal readonly Dim _maxContentDim = maximumContentDim; internal readonly DimAutoStyle _style = style; internal int _size; /// - public override bool Equals (object other) { return other is DimAuto auto && auto._min == _min && auto._max == _max && auto._style == _style; } + public override bool Equals (object other) { return other is DimAuto auto && auto._minContentDim == _minContentDim && auto._maxContentDim == _maxContentDim && auto._style == _style; } /// - public override int GetHashCode () { return HashCode.Combine (base.GetHashCode (), _min, _max, _style); } + public override int GetHashCode () { return HashCode.Combine (base.GetHashCode (), _minContentDim, _maxContentDim, _style); } /// - public override string ToString () { return $"Auto({_style},{_min},{_max})"; } + public override string ToString () { return $"Auto({_style},{_minContentDim},{_maxContentDim})"; } internal override int Calculate (int location, int superviewContentSize, View us, Dimension dimension) { if (us == null) { - return _max?.Anchor (0) ?? 0; + return _maxContentDim?.Anchor (0) ?? 0; } var textSize = 0; var subviewsSize = 0; - int autoMin = _min?.Anchor (superviewContentSize) ?? 0; + int autoMin = _minContentDim?.Anchor (superviewContentSize) ?? 0; if (superviewContentSize < autoMin) { @@ -1005,10 +1005,15 @@ public class Dim } } + // All sizes here are content-relative; ignoring adornments. + // We take the larger of text and content. int max = int.Max (textSize, subviewsSize); - Thickness thickness = us.GetAdornmentsThickness (); + // And, if min: is set, it wins if larger + max = int.Max (max, autoMin); + // Factor in adornments + Thickness thickness = us.GetAdornmentsThickness (); if (dimension == Dimension.Width) { max += thickness.Horizontal; @@ -1018,8 +1023,8 @@ public class Dim max += thickness.Vertical; } - max = int.Max (max, autoMin); - return int.Min (max, _max?.Anchor (superviewContentSize) ?? superviewContentSize); + // If max: is set, clamp the return - BUGBUG: Not tested + return int.Min (max, _maxContentDim?.Anchor (superviewContentSize) ?? superviewContentSize); } /// @@ -1029,7 +1034,7 @@ public class Dim internal override bool ReferencesOtherViews () { // BUGBUG: This is not correct. _contentSize may be null. - return _style.HasFlag (Dim.DimAutoStyle.Content); + return false;//_style.HasFlag (Dim.DimAutoStyle.Content); } } diff --git a/Terminal.Gui/View/Layout/ViewLayout.cs b/Terminal.Gui/View/Layout/ViewLayout.cs index 4f0b5176a..7247394fa 100644 --- a/Terminal.Gui/View/Layout/ViewLayout.cs +++ b/Terminal.Gui/View/Layout/ViewLayout.cs @@ -101,12 +101,9 @@ public partial class View // This is the only place where _frame should be set directly. Use Frame = or SetFrame instead. _frame = frame; - OnViewportChanged (new (IsInitialized ? Viewport : Rectangle.Empty, oldViewport)); + SetTextFormatterSize (); - if (!TextFormatter.AutoSize) - { - TextFormatter.Size = ContentSize; - } + OnViewportChanged (new (IsInitialized ? Viewport : Rectangle.Empty, oldViewport)); } /// Gets the with a screen-relative location. @@ -155,10 +152,10 @@ public partial class View } Point superViewViewportOffset = SuperView.GetViewportOffsetFromFrame (); - superViewViewportOffset.Offset(-SuperView.Viewport.X, -SuperView.Viewport.Y); + superViewViewportOffset.Offset (-SuperView.Viewport.X, -SuperView.Viewport.Y); Point frame = location; - frame.Offset(-superViewViewportOffset.X, -superViewViewportOffset.Y); + frame.Offset (-superViewViewportOffset.X, -superViewViewportOffset.Y); frame = SuperView.ScreenToFrame (frame); frame.Offset (-Frame.X, -Frame.Y); @@ -1033,31 +1030,30 @@ public partial class View // Diagnostics to highlight when X or Y is read before the view has been initialized private Pos VerifyIsInitialized (Pos pos, string member) { -#if DEBUG - if ((pos.ReferencesOtherViews () || pos.ReferencesOtherViews ()) && !IsInitialized) - { - Debug.WriteLine ( - $"WARNING: The {pos} of {this} is dependent on other views and {member} " - + $"is being accessed before the View has been initialized. This is likely a bug." - ); - } -#endif // DEBUG +//#if DEBUG +// if (pos.ReferencesOtherViews () && !IsInitialized) +// { +// Debug.WriteLine ( +// $"WARNING: {member} = {pos} of {this} is dependent on other views and {member} " +// + $"is being accessed before the View has been initialized. This is likely a bug." +// ); +// } +//#endif // DEBUG return pos; } // Diagnostics to highlight when Width or Height is read before the view has been initialized private Dim VerifyIsInitialized (Dim dim, string member) { -#if DEBUG - if ((dim.ReferencesOtherViews () || dim.ReferencesOtherViews ()) && !IsInitialized) - { - Debug.WriteLine ( - $"WARNING: The {member} of {this} is dependent on other views and is " - + $"is being accessed before the View has been initialized. This is likely a bug. " - + $"{member} is {dim}" - ); - } -#endif // DEBUG +//#if DEBUG +// if (dim.ReferencesOtherViews () && !IsInitialized) +// { +// Debug.WriteLine ( +// $"WARNING: {member} = {dim} of {this} is dependent on other views and {member} " +// + $"is being accessed before the View has been initialized. This is likely a bug." +// ); +// } +//#endif // DEBUG return dim; } @@ -1087,13 +1083,13 @@ public partial class View // Verify none of the subviews are using Dim objects that depend on the SuperView's dimensions. foreach (View view in Subviews) { - if (Width is Dim.DimAuto { _min: null }) + if (Width is Dim.DimAuto { _minContentDim: null }) { ThrowInvalid (view, view.Width, nameof (view.Width)); ThrowInvalid (view, view.X, nameof (view.X)); } - if (Height is Dim.DimAuto { _min: null }) + if (Height is Dim.DimAuto { _minContentDim: null }) { ThrowInvalid (view, view.Height, nameof (view.Height)); ThrowInvalid (view, view.Y, nameof (view.Y)); diff --git a/Terminal.Gui/View/ViewText.cs b/Terminal.Gui/View/ViewText.cs index 9b705709e..e30573a74 100644 --- a/Terminal.Gui/View/ViewText.cs +++ b/Terminal.Gui/View/ViewText.cs @@ -186,8 +186,8 @@ public partial class View // Use _width & _height instead of Width & Height to avoid debug spew Dim.DimAuto widthAuto = _width as Dim.DimAuto; Dim.DimAuto heightAuto = _height as Dim.DimAuto; - if ((widthAuto is {} && widthAuto._style.HasFlag (Dim.DimAutoStyle.Text)) - || (heightAuto is {} && heightAuto._style.HasFlag (Dim.DimAutoStyle.Text))) + if ((widthAuto is { } && widthAuto._style.HasFlag (Dim.DimAutoStyle.Text)) + || (heightAuto is { } && heightAuto._style.HasFlag (Dim.DimAutoStyle.Text))) { size = TextFormatter.GetAutoSize (); diff --git a/Terminal.Gui/Views/Button.cs b/Terminal.Gui/Views/Button.cs index 8f0fb55c1..437d62f38 100644 --- a/Terminal.Gui/Views/Button.cs +++ b/Terminal.Gui/Views/Button.cs @@ -45,8 +45,8 @@ public class Button : View _leftDefault = Glyphs.LeftDefaultIndicator; _rightDefault = Glyphs.RightDefaultIndicator; - Height = Dim.Auto (Dim.DimAutoStyle.Text); Width = Dim.Auto (Dim.DimAutoStyle.Text); + Height = Dim.Auto (Dim.DimAutoStyle.Text, minimumContentDim: 1); CanFocus = true; HighlightStyle |= HighlightStyle.Pressed; diff --git a/Terminal.Gui/Views/CheckBox.cs b/Terminal.Gui/Views/CheckBox.cs index b8720338d..d6fe755e7 100644 --- a/Terminal.Gui/Views/CheckBox.cs +++ b/Terminal.Gui/Views/CheckBox.cs @@ -20,8 +20,8 @@ public class CheckBox : View _charChecked = Glyphs.Checked; _charUnChecked = Glyphs.UnChecked; - Height = Dim.Auto (Dim.DimAutoStyle.Text); Width = Dim.Auto (Dim.DimAutoStyle.Text); + Height = Dim.Auto (Dim.DimAutoStyle.Text, minimumContentDim: 1); CanFocus = true; diff --git a/Terminal.Gui/Views/ProgressBar.cs b/Terminal.Gui/Views/ProgressBar.cs index 7a0db915c..66ed44c50 100644 --- a/Terminal.Gui/Views/ProgressBar.cs +++ b/Terminal.Gui/Views/ProgressBar.cs @@ -61,7 +61,7 @@ public class ProgressBar : View set { _bidirectionalMarquee = value; - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); } } @@ -74,7 +74,7 @@ public class ProgressBar : View { _fraction = Math.Min (value, 1); _isActivity = false; - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); } } @@ -87,7 +87,7 @@ public class ProgressBar : View set { _progressBarFormat = value; - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); } } @@ -119,7 +119,7 @@ public class ProgressBar : View break; } - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); } } @@ -130,7 +130,7 @@ public class ProgressBar : View set { _segmentCharacter = value; - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); } } @@ -279,7 +279,7 @@ public class ProgressBar : View private void ProgressBar_Initialized (object sender, EventArgs e) { - SetContentSize (Viewport.Size with { Height = 1 }); + // SetContentSize (Viewport.Size with { Height = 1 }); ColorScheme = new ColorScheme (ColorScheme ?? SuperView?.ColorScheme ?? Colors.ColorSchemes ["Base"]) { @@ -289,7 +289,7 @@ public class ProgressBar : View private void SetInitialProperties () { - Height = Dim.Auto (Dim.DimAutoStyle.Content); + Height = Dim.Auto (Dim.DimAutoStyle.Content, minimumContentDim: 1); CanFocus = false; _fraction = 0; Initialized += ProgressBar_Initialized; diff --git a/UICatalog/Scenarios/AllViewsTester.cs b/UICatalog/Scenarios/AllViewsTester.cs index 2b8a6f37e..f5d795ff5 100644 --- a/UICatalog/Scenarios/AllViewsTester.cs +++ b/UICatalog/Scenarios/AllViewsTester.cs @@ -407,7 +407,7 @@ public class AllViewsTester : Scenario view.Width = _wRadioGroup.SelectedItem switch { - 0 => Dim.Auto (min: _wVal), + 0 => Dim.Auto (minimumContentDim: _wVal), 1 => Dim.Percent (_wVal), 2 => Dim.Fill (_wVal), 3 => Dim.Sized (_wVal), @@ -416,7 +416,7 @@ public class AllViewsTester : Scenario view.Height = _hRadioGroup.SelectedItem switch { - 0 => Dim.Auto (min: _hVal), + 0 => Dim.Auto (minimumContentDim: _hVal), 1 => Dim.Percent (_hVal), 2 => Dim.Fill (_hVal), 3 => Dim.Sized (_hVal), diff --git a/UICatalog/Scenarios/DimAutoDemo.cs b/UICatalog/Scenarios/DimAutoDemo.cs index db62cd405..457171806 100644 --- a/UICatalog/Scenarios/DimAutoDemo.cs +++ b/UICatalog/Scenarios/DimAutoDemo.cs @@ -15,17 +15,19 @@ public class DimAutoDemo : Scenario // Setup - Create a top-level application window and configure it. Window appWindow = new () { - Title = $"{Application.QuitKey} to Quit - Scenario: {GetName ()}" + Title = $"{Application.QuitKey} to Quit - Scenario: {GetName ()}", }; + appWindow.Padding.Thickness = new Thickness (1); var view = new FrameView { Title = "Type to make View grow", - X = 1, - Y = 1, - Width = Auto (DimAutoStyle.Content, 40), - Height = Auto (DimAutoStyle.Content, 10) + X = 0, + Y = 0, + Width = Auto (DimAutoStyle.Content, minimumContentDim: Dim.Percent (25)), + Height = Auto (DimAutoStyle.Content, minimumContentDim: 10) }; + view.Margin.Thickness = new Thickness (1); view.ValidatePosDim = true; var textEdit = new TextView @@ -110,7 +112,7 @@ public class DimAutoDemo : Scenario var movingButton = new Button { - Text = "_Move down", + Text = "_Click\nTo Move\nDown", X = Pos.Right (vlabel), Y = Pos.Bottom (vlabel) }; @@ -121,7 +123,7 @@ public class DimAutoDemo : Scenario { Text = "_Reset Button (AnchorEnd)", X = Pos.AnchorEnd (), - Y = Pos.Top (movingButton) + Y = Pos.AnchorEnd () }; resetButton.Accept += (s, e) => { movingButton.Y = Pos.Bottom (hlabel); }; @@ -150,7 +152,7 @@ public class DimAutoDemo : Scenario var dlg = new Dialog { Title = "Test Dialog", - Width = Auto (min: Percent (10)) + Width = Auto (minimumContentDim: Percent (10)) //Height = Dim.Auto (min: Dim.Percent (50)) }; @@ -158,7 +160,7 @@ public class DimAutoDemo : Scenario { ValidatePosDim = true, Text = "TextField: X=1; Y=Pos.Bottom (label)+1, Width=Dim.Fill (0); Height=1", - TextFormatter = new() { WordWrap = true }, + TextFormatter = new () { WordWrap = true }, X = 0, Y = 0, //Pos.Bottom (label) + 1, Width = Fill (10), diff --git a/UICatalog/Scenarios/ProgressBarStyles.cs b/UICatalog/Scenarios/ProgressBarStyles.cs index 2b4279885..77d9c2390 100644 --- a/UICatalog/Scenarios/ProgressBarStyles.cs +++ b/UICatalog/Scenarios/ProgressBarStyles.cs @@ -52,8 +52,8 @@ public class ProgressBarStyles : Scenario Title = "Focused ProgressBar", Y = 0, X = Pos.Center (), - Width = 30, - Height = 7, + Width = Dim.Auto (), + Height = Dim.Auto (), BorderStyle = LineStyle.Single }; @@ -168,7 +168,7 @@ public class ProgressBarStyles : Scenario Title = "Blocks", X = Pos.Center (), Y = Pos.Bottom (button) + 1, - Width = Dim.Width (pbList), + Width = Dim.Percent(50), BorderStyle = LineStyle.Single, CanFocus = true }; @@ -179,7 +179,7 @@ public class ProgressBarStyles : Scenario Title = "Continuous", X = Pos.Center (), Y = Pos.Bottom (blocksPB) + 1, - Width = Dim.Width (pbList), + Width = Dim.Percent (50), ProgressBarStyle = ProgressBarStyle.Continuous, BorderStyle = LineStyle.Single, CanFocus = true @@ -229,7 +229,7 @@ public class ProgressBarStyles : Scenario Title = "Marquee Blocks", X = Pos.Center (), Y = Pos.Bottom (ckbBidirectional) + 1, - Width = Dim.Width (pbList), + Width = Dim.Percent (50), ProgressBarStyle = ProgressBarStyle.MarqueeBlocks, BorderStyle = LineStyle.Single, CanFocus = true @@ -241,7 +241,7 @@ public class ProgressBarStyles : Scenario Title = "Marquee Continuous", X = Pos.Center (), Y = Pos.Bottom (marqueesBlocksPB) + 1, - Width = Dim.Width (pbList), + Width = Dim.Percent (50), ProgressBarStyle = ProgressBarStyle.MarqueeContinuous, BorderStyle = LineStyle.Single, CanFocus = true diff --git a/UnitTests/View/Layout/Dim.AutoTests.cs b/UnitTests/View/Layout/Dim.AutoTests.cs index 27398c166..e381d3c09 100644 --- a/UnitTests/View/Layout/Dim.AutoTests.cs +++ b/UnitTests/View/Layout/Dim.AutoTests.cs @@ -42,8 +42,8 @@ public class DimAutoTests (ITestOutputHelper output) { X = 0, Y = 0, - Width = Dim.Auto (min: 10), - Height = Dim.Auto (min: 10), + Width = Dim.Auto (minimumContentDim: 10), + Height = Dim.Auto (minimumContentDim: 10), ValidatePosDim = true }; @@ -66,6 +66,68 @@ public class DimAutoTests (ITestOutputHelper output) Assert.Equal (10, superView.Frame.Height); } + [Theory] + [InlineData (0, 2, 4)] + [InlineData (1, 2, 4)] + [InlineData (2, 2, 4)] + [InlineData (3, 2, 5)] + [InlineData (1, 0, 3)] + public void Min_Absolute_Is_Content_Relative (int contentSize, int minAbsolute, int expected) + { + var view = new View + { + X = 0, + Y = 0, + Width = Dim.Auto (minimumContentDim: minAbsolute), + BorderStyle = LineStyle.Single, // a 1 thick adornment + ValidatePosDim = true + }; + + view.SetContentSize (new (contentSize, 0)); + + Assert.Equal (expected, view.Frame.Width); + } + + + [Theory] + [InlineData (1, 100, 100)] + [InlineData (1, 50, 50)] + public void Min_Percent (int contentSize, int minPercent, int expected) + { + var view = new View + { + X = 0, + Y = 0, + Width = Dim.Auto (minimumContentDim: Dim.Percent (minPercent)), + ValidatePosDim = true + }; + + view.SetContentSize (new (contentSize, 0)); + view.SetRelativeLayout (new (100, 100)); + + Assert.Equal (expected, view.Frame.Width); + } + + [Theory] + [InlineData (1, 100, 100)] + [InlineData (1, 50, 50)] + public void Min_Percent_Is_Content_Relative (int contentSize, int minPercent, int expected) + { + var view = new View + { + X = 0, + Y = 0, + Width = Dim.Auto (minimumContentDim: Dim.Percent (minPercent)), + BorderStyle = LineStyle.Single, // a 1 thick adornment + ValidatePosDim = true + }; + + view.SetContentSize (new (contentSize, 0)); + view.SetRelativeLayout (new (100, 100)); + + Assert.Equal (expected, view.Frame.Width); + } + // what happens if DimAuto (min: 10) and the subview moves to a negative coord? [Fact] public void Min_Resets_If_Subview_Moves_Negative () @@ -74,8 +136,8 @@ public class DimAutoTests (ITestOutputHelper output) { X = 0, Y = 0, - Width = Dim.Auto (min: 10), - Height = Dim.Auto (min: 10), + Width = Dim.Auto (minimumContentDim: 10), + Height = Dim.Auto (minimumContentDim: 10), ValidatePosDim = true }; @@ -116,8 +178,8 @@ public class DimAutoTests (ITestOutputHelper output) { X = 0, Y = 0, - Width = Dim.Auto (min: 10), - Height = Dim.Auto (min: 10), + Width = Dim.Auto (minimumContentDim: 10), + Height = Dim.Auto (minimumContentDim: 10), ValidatePosDim = true }; @@ -517,7 +579,7 @@ public class DimAutoTests (ITestOutputHelper output) { X = 0, Y = 0, - Width = Dim.Auto (min: min), + Width = Dim.Auto (minimumContentDim: min), Height = 1, ValidatePosDim = true }; @@ -548,7 +610,7 @@ public class DimAutoTests (ITestOutputHelper output) { X = 0, Y = 0, - Width = Dim.Auto (min: superMinWidth), + Width = Dim.Auto (minimumContentDim: superMinWidth), Height = 1, ValidatePosDim = true }; @@ -692,6 +754,22 @@ public class DimAutoTests (ITestOutputHelper output) } + // TextFormatter.Size normally tracks ContentSize, but with DimAuto, tracks the text size + [Theory] + [InlineData ("", 0, 0)] + [InlineData (" ", 1, 1)] + [InlineData ("01234", 5, 1)] + public void DimAutoStyle_Text_TextFormatter_Size_Ignores_ContentSize (string text, int expectedW, int expectedH) + { + var view = new View (); + view.Width = Auto (DimAutoStyle.Text); + view.Height = Auto (DimAutoStyle.Text); + view.SetContentSize (new (1, 1)); + view.Text = text; + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.Size); + } + + // Test that changing TextFormatter does not impact View dimensions if Dim.Auto is not in play [Fact] public void Not_Used_TextFormatter_Does_Not_Change_View_Size () @@ -1102,8 +1180,8 @@ public class DimAutoTests (ITestOutputHelper output) [Fact (Skip = "TextOnly")] public void With_Subview_At_PosAnchorEnd () { - var dimWidth = Dim.Auto (min: 50); - var dimHeight = Dim.Auto (min: 50); + var dimWidth = Dim.Auto (minimumContentDim: 50); + var dimHeight = Dim.Auto (minimumContentDim: 50); var view = new View () { diff --git a/UnitTests/View/TextTests.cs b/UnitTests/View/TextTests.cs index 5bc8b51be..7c5a15354 100644 --- a/UnitTests/View/TextTests.cs +++ b/UnitTests/View/TextTests.cs @@ -12,6 +12,31 @@ public class TextTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; + // TextFormatter.Size should be empty unless DimAuto is set or ContentSize is set + [Theory] + [InlineData ("", 0, 0)] + [InlineData (" ", 0, 0)] + [InlineData ("01234", 0, 0)] + public void TextFormatter_Size_Default (string text, int expectedW, int expectedH) + { + var view = new View (); + view.Text = text; + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.Size); + } + + // TextFormatter.Size should track ContentSize (without DimAuto) + [Theory] + [InlineData ("", 1, 1)] + [InlineData (" ", 1, 1)] + [InlineData ("01234", 1, 1)] + public void TextFormatter_Size_Tracks_ContentSize (string text, int expectedW, int expectedH) + { + var view = new View (); + view.SetContentSize(new (1,1)); + view.Text = text; + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.Size); + } + [Fact] [SetupFakeDriver] public void Setting_With_Height_Horizontal ()