using System.Collections.Generic;
using Xunit;
using Xunit.Abstractions;
namespace Terminal.Gui.ViewTests;
///
/// Tests of the property with set to false.
///
public class TextTests {
readonly ITestOutputHelper _output;
public TextTests (ITestOutputHelper output) => _output = output;
[Fact]
[AutoInitShutdown]
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 win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (view);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (10, 4);
Assert.Equal (5, text.Length);
Assert.False (view.AutoSize);
Assert.Equal (new Rect (0, 0, 3, 1), view.Frame);
Assert.Equal (new Size (3, 1), view.TextFormatter.Size);
Assert.Equal (new List { "Vie" }, view.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
Assert.Equal (new Rect (0, 0, 10, 4), Application.Top.Frame);
var expected = @"
┌────────┐
│Vie │
│ │
└────────┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
view.Width = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.Equal (new Rect (0, 0, 0, 1), view.Frame);
Assert.Equal (new Size (0, 1), view.TextFormatter.Size);
Assert.Equal (new List { string.Empty }, view.TextFormatter.Lines);
expected = @"
┌────────┐
│ │
│ │
└────────┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_View_IsEmpty_True_Minimum_Height ()
{
var text = "Views";
var view = new View {
Width = Dim.Fill () - text.Length,
Text = text
};
var win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (view);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (10, 4);
Assert.Equal (5, text.Length);
Assert.False (view.AutoSize);
Assert.Equal (new Rect (0, 0, 3, 1), view.Frame);
Assert.Equal (new Size (3, 1), view.TextFormatter.Size);
Assert.Single (view.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
Assert.Equal (new Rect (0, 0, 10, 4), Application.Top.Frame);
var expected = @"
┌────────┐
│Vie │
│ │
└────────┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
view.Width = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.Equal (new Rect (0, 0, 0, 1), view.Frame);
Assert.Equal (new Size (0, 1), view.TextFormatter.Size);
var exception = Record.Exception (() => Assert.Equal (new List { string.Empty }, view.TextFormatter.Lines));
Assert.Null (exception);
expected = @"
┌────────┐
│ │
│ │
└────────┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_Label_IsEmpty_True_Return_Null_Lines ()
{
var text = "Label";
var label = new Label {
Width = Dim.Fill () - text.Length,
Height = 1,
Text = text,
AutoSize = false
};
var win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (label);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (10, 4);
Assert.Equal (5, text.Length);
Assert.False (label.AutoSize);
Assert.Equal (new Rect (0, 0, 3, 1), label.Frame);
Assert.Equal (new Size (3, 1), label.TextFormatter.Size);
Assert.Equal (new List { "Lab" }, label.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
Assert.Equal (new Rect (0, 0, 10, 4), Application.Top.Frame);
var expected = @"
┌────────┐
│Lab │
│ │
└────────┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
label.Width = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.False (label.AutoSize);
Assert.Equal (new Rect (0, 0, 0, 1), label.Frame);
Assert.Equal (new Size (0, 1), label.TextFormatter.Size);
Assert.Equal (new List { string.Empty }, label.TextFormatter.Lines);
expected = @"
┌────────┐
│ │
│ │
└────────┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_Label_Height_Zero_Returns_Minimum_Height ()
{
var text = "Label";
var label = new Label {
Width = Dim.Fill () - text.Length,
Text = text,
AutoSize = false
};
var win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (label);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (10, 4);
Assert.Equal (5, text.Length);
Assert.False (label.AutoSize);
Assert.Equal (new Rect (0, 0, 3, 1), label.Frame);
Assert.Equal (new Size (3, 1), label.TextFormatter.Size);
Assert.Single (label.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
Assert.Equal (new Rect (0, 0, 10, 4), Application.Top.Frame);
var expected = @"
┌────────┐
│Lab │
│ │
└────────┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
label.Width = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.Equal (new Rect (0, 0, 0, 1), label.Frame);
Assert.Equal (new Size (0, 1), label.TextFormatter.Size);
var exception = Record.Exception (() => Assert.Equal (new List { string.Empty }, label.TextFormatter.Lines));
Assert.Null (exception);
expected = @"
┌────────┐
│ │
│ │
└────────┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 10, 4), pos);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_View_Width_Null_Returns_Host_Frame_Width ()
{
var text = "Views";
var view = new View {
TextDirection = TextDirection.TopBottom_LeftRight,
Height = Dim.Fill () - text.Length,
Text = text
};
var win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (view);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (4, 10);
Assert.Equal (5, text.Length);
Assert.False (view.AutoSize);
Assert.Equal (new Rect (0, 0, 1, 3), view.Frame);
Assert.Equal (new Size (1, 3), view.TextFormatter.Size);
Assert.Single (view.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 4, 10), win.Frame);
Assert.Equal (new Rect (0, 0, 4, 10), Application.Top.Frame);
var expected = @"
┌──┐
│V │
│i │
│e │
│ │
│ │
│ │
│ │
│ │
└──┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 4, 10), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
view.Height = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.Equal (new Rect (0, 0, 1, 0), view.Frame);
Assert.Equal (new Size (1, 0), view.TextFormatter.Size);
var exception = Record.Exception (() => Assert.Equal (new List { string.Empty }, view.TextFormatter.Lines));
Assert.Null (exception);
expected = @"
┌──┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└──┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 4, 10), pos);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_View_Width_Zero_Returns_Minimum_Width_With_Wide_Rune ()
{
var text = "界View";
var view = new View {
TextDirection = TextDirection.TopBottom_LeftRight,
Height = Dim.Fill () - text.Length,
Text = text
};
var win = new Window {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
win.Add (view);
Application.Top.Add (win);
Application.Begin (Application.Top);
((FakeDriver)Application.Driver).SetBufferSize (4, 10);
Assert.Equal (5, text.Length);
Assert.False (view.AutoSize);
Assert.Equal (new Rect (0, 0, 2, 3), view.Frame);
Assert.Equal (new Size (2, 3), view.TextFormatter.Size);
Assert.Single (view.TextFormatter.Lines);
Assert.Equal (new Rect (0, 0, 4, 10), win.Frame);
Assert.Equal (new Rect (0, 0, 4, 10), Application.Top.Frame);
var expected = @"
┌──┐
│界│
│V │
│i │
│ │
│ │
│ │
│ │
│ │
└──┘
";
var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 4, 10), pos);
text = "0123456789";
Assert.Equal (10, text.Length);
view.Height = Dim.Fill () - text.Length;
Application.Refresh ();
Assert.Equal (new Rect (0, 0, 2, 0), view.Frame);
Assert.Equal (new Size (2, 0), view.TextFormatter.Size);
var exception = Record.Exception (() => Assert.Equal (new List { string.Empty }, view.TextFormatter.Lines));
Assert.Null (exception);
expected = @"
┌──┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└──┘
";
pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
Assert.Equal (new Rect (0, 0, 4, 10), pos);
}
[Fact]
public void AutoSize_False_If_Text_Empty ()
{
var view1 = new View ();
var view2 = new View ("");
var view3 = new View { Text = "" };
Assert.False (view1.AutoSize);
Assert.False (view2.AutoSize);
Assert.False (view3.AutoSize);
view1.Dispose ();
view2.Dispose ();
view3.Dispose ();
}
[Fact]
public void AutoSize_False_If_Text_Is_Not_Empty ()
{
var view1 = new View ();
view1.Text = "Hello World";
var view2 = new View ("Hello World");
var view3 = new View { Text = "Hello World" };
Assert.False (view1.AutoSize);
Assert.False (view2.AutoSize);
Assert.False (view3.AutoSize);
view1.Dispose ();
view2.Dispose ();
view3.Dispose ();
}
[Fact]
public void AutoSize_False_ResizeView_Is_Always_False ()
{
var super = new View ();
var label = new Label { AutoSize = false };
super.Add (label);
label.Text = "New text";
super.LayoutSubviews ();
Assert.False (label.AutoSize);
Assert.Equal ("(0,0,0,1)", label.Bounds.ToString ());
super.Dispose ();
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_ResizeView_With_Dim_Fill_After_IsInitialized ()
{
var win = new Window (new Rect (0, 0, 30, 80));
var label = new Label { AutoSize = false, Width = Dim.Fill (), Height = Dim.Fill () };
win.Add (label);
Application.Top.Add (win);
// #3127: Before: Text is empty but height=1 by default, see Label view
// After: Text is empty Dim.Fill is honored
Assert.False (label.AutoSize);
Assert.Equal ("(0,0,28,78)", label.Bounds.ToString ());
label.Text = "New text\nNew line";
Application.Top.LayoutSubviews ();
Assert.False (label.AutoSize);
Assert.Equal ("(0,0,28,78)", label.Bounds.ToString ());
Assert.False (label.IsInitialized);
var rs = Application.Begin (Application.Top);
Assert.True (label.IsInitialized);
Assert.False (label.AutoSize);
Assert.Equal ("(0,0,28,78)", label.Bounds.ToString ());
Application.End (rs);
}
[Fact]
[AutoInitShutdown]
public void AutoSize_False_Equal_Before_And_After_IsInitialized_With_Differents_Orders ()
{
var view1 = new View { Text = "Say Hello view1 你", AutoSize = false, Width = 10, Height = 5 };
var view2 = new View { Text = "Say Hello view2 你", Width = 10, Height = 5, AutoSize = false };
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 你",
Width = 10,
Height = 5,
AutoSize = false,
TextDirection = TextDirection.TopBottom_LeftRight
};
var view6 = new View {
AutoSize = false,
Width = 10,
Height = 5,
TextDirection = TextDirection.TopBottom_LeftRight,
Text = "Say Hello view6 你"
};
Application.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 Rect (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 Rect (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 Rect (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 Rect (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 Rect (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 Rect (0, 0, 10, 5), view6.Frame);
Assert.Equal ("Absolute(10)", view6.Width.ToString ());
Assert.Equal ("Absolute(5)", view6.Height.ToString ());
var rs = Application.Begin (Application.Top);
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 Rect (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 Rect (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 Rect (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 Rect (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 Rect (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 Rect (0, 0, 10, 5), view6.Frame);
Assert.Equal ("Absolute(10)", view6.Width.ToString ());
Assert.Equal ("Absolute(5)", view6.Height.ToString ());
Application.End (rs);
}
}