using System.Runtime.CompilerServices; using System.Text; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; /// /// Tests of the and properties (independent of /// AutoSize). /// public class TextTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; // Test that View.PreserveTrailingSpaces removes trailing spaces [Fact] public void PreserveTrailingSpaces_Removes_Trailing_Spaces () { var view = new View { Text = "Hello World " }; Assert.Equal ("Hello World ", view.TextFormatter.Text); view.TextFormatter.WordWrap = true; view.TextFormatter.Size = new (5, 3); view.PreserveTrailingSpaces = false; Assert.Equal ($"Hello{Environment.NewLine}World", view.TextFormatter.Format ()); view.PreserveTrailingSpaces = true; Assert.Equal ($"Hello{Environment.NewLine} {Environment.NewLine}World", view.TextFormatter.Format ()); } // View.PreserveTrailingSpaces Gets or sets whether trailing spaces at the end of word-wrapped lines are preserved // or not when is enabled. // If trailing spaces at the end of wrapped lines will be removed when // is formatted for display.The default is . [Fact] public void PreserveTrailingSpaces_Set_Get () { var view = new View { Text = "Hello World" }; Assert.False (view.PreserveTrailingSpaces); view.PreserveTrailingSpaces = true; Assert.True (view.PreserveTrailingSpaces); } // Setting TextFormatter DOES NOT update Text [Fact] public void SettingTextFormatterDoesNotUpdateText () { var view = new View (); view.TextFormatter.Text = "Hello World"; Assert.True (string.IsNullOrEmpty (view.Text)); } // Setting Text updates TextFormatter [Fact] public void SettingTextUpdatesTextFormatter () { var view = new View { Text = "Hello World" }; Assert.Equal ("Hello World", view.Text); Assert.Equal ("Hello World", view.TextFormatter.Text); } // Setting Text does NOT set the HotKey [Fact] public void Text_Does_Not_Set_HotKey () { var view = new View { HotKeySpecifier = (Rune)'_', Text = "_Hello World" }; Assert.NotEqual (Key.H, view.HotKey); } // Test that TextFormatter is init only [Fact] public void TextFormatterIsInitOnly () { var view = new View (); // Use reflection to ensure the TextFormatter property is `init` only Assert.Contains ( typeof (IsExternalInit), typeof (View).GetMethod ("set_TextFormatter") .ReturnParameter.GetRequiredCustomModifiers ()); } // Test that the Text property is set correctly. [Fact] public void TextProperty () { var view = new View { Text = "Hello World" }; Assert.Equal ("Hello World", view.Text); } // Test view.UpdateTextFormatterText overridden in a subclass updates TextFormatter.Text [Fact] public void UpdateTextFormatterText_Overridden () { var view = new TestView { Text = "Hello World" }; Assert.Equal ("Hello World", view.Text); Assert.Equal (">Hello World<", view.TextFormatter.Text); } private class TestView : View { protected override void UpdateTextFormatterText () { TextFormatter.Text = $">{Text}<"; } } [Fact] public void TextDirection_Horizontal_Dims_Correct () { // Initializes a view with a vertical direction var view = new View { Text = "01234", TextDirection = TextDirection.LeftRight_TopBottom, Width = Dim.Auto (Dim.DimAutoStyle.Text), Height = Dim.Auto (Dim.DimAutoStyle.Text) }; Assert.Equal (new Rectangle (0, 0, 5, 1), view.Frame); Assert.Equal (new Rectangle (0, 0, 5, 1), view.Viewport); view.BeginInit (); view.EndInit (); Assert.Equal (new Rectangle (0, 0, 5, 1), view.Frame); Assert.Equal (new Rectangle (0, 0, 5, 1), view.Viewport); } [Fact] public void TextDirection_Vertical_Dims_Correct () { // Initializes a view with a vertical direction var view = new View { TextDirection = TextDirection.TopBottom_LeftRight, Text = "01234", Width = Dim.Auto (Dim.DimAutoStyle.Text), Height = Dim.Auto (Dim.DimAutoStyle.Text), }; Assert.Equal (new Rectangle (0, 0, 1, 5), view.Frame); Assert.Equal (new Rectangle (0, 0, 1, 5), view.Viewport); view.BeginInit (); Assert.Equal (new Rectangle (0, 0, 1, 5), view.Frame); view.EndInit (); Assert.Equal (new Rectangle (0, 0, 1, 5), view.Frame); Assert.Equal (new Rectangle (0, 0, 1, 5), view.Viewport); } // Test behavior of AutoSize property. // - Default is false // - Setting to true invalidates Height/Width // - Setting to false invalidates Height/Width }