mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
Merge branch 'v2_develop' into v2_2489_scroll-scrollbar-new
This commit is contained in:
@@ -4,33 +4,36 @@ using static Terminal.Gui.Dim;
|
||||
|
||||
namespace Terminal.Gui.LayoutTests;
|
||||
|
||||
[Trait("Category", "Layout")]
|
||||
public partial class DimAutoTests (ITestOutputHelper output)
|
||||
{
|
||||
private readonly ITestOutputHelper _output = output;
|
||||
|
||||
private class DimAutoTestView : View
|
||||
[SetupFakeDriver]
|
||||
[Fact]
|
||||
public void Change_To_Non_Auto_Resets_ContentSize ()
|
||||
{
|
||||
public DimAutoTestView ()
|
||||
View view = new ()
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Width = Auto ();
|
||||
Height = Auto ();
|
||||
}
|
||||
Width = Auto (),
|
||||
Height = Auto (),
|
||||
Text = "01234"
|
||||
};
|
||||
view.SetRelativeLayout (new (100, 100));
|
||||
Assert.Equal (new (0, 0, 5, 1), view.Frame);
|
||||
Assert.Equal (new (5, 1), view.GetContentSize ());
|
||||
|
||||
public DimAutoTestView (Dim width, Dim height)
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
// Change text to a longer string
|
||||
view.Text = "0123456789";
|
||||
|
||||
public DimAutoTestView (string text, Dim width, Dim height)
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Text = text;
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
Assert.Equal (new (0, 0, 10, 1), view.Frame);
|
||||
Assert.Equal (new (10, 1), view.GetContentSize ());
|
||||
|
||||
// If ContentSize was reset, these should cause it to update
|
||||
view.Width = 5;
|
||||
view.Height = 1;
|
||||
|
||||
Assert.Equal (new (5, 1), view.GetContentSize ());
|
||||
}
|
||||
|
||||
[Theory]
|
||||
@@ -74,6 +77,46 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
Assert.Equal (new (0, 0, 10, expectedHeight), superView.Frame);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void HotKey_TextFormatter_Height_Correct ([CombinatorialValues ("1234", "_1234", "1_234", "____")] string text)
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
HotKeySpecifier = (Rune)'_',
|
||||
Text = text,
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToHeight);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
HotKeySpecifier = (Rune)'_',
|
||||
TextDirection = TextDirection.TopBottom_LeftRight,
|
||||
Text = text,
|
||||
Width = 1,
|
||||
Height = Auto ()
|
||||
};
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToHeight);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void HotKey_TextFormatter_Width_Correct ([CombinatorialValues ("1234", "_1234", "1_234", "____")] string text)
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Text = text,
|
||||
Height = 1,
|
||||
Width = Auto ()
|
||||
};
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToHeight);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NoSubViews_Does_Nothing ()
|
||||
{
|
||||
@@ -158,6 +201,122 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
Assert.Equal (new (0, 0, expectedWidth, expectedHeight), superView.Frame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestEquality ()
|
||||
{
|
||||
var a = new DimAuto (
|
||||
MaximumContentDim: null,
|
||||
MinimumContentDim: 1,
|
||||
Style: DimAutoStyle.Auto
|
||||
);
|
||||
|
||||
var b = new DimAuto (
|
||||
MaximumContentDim: null,
|
||||
MinimumContentDim: 1,
|
||||
Style: DimAutoStyle.Auto
|
||||
);
|
||||
|
||||
var c = new DimAuto(
|
||||
MaximumContentDim: 2,
|
||||
MinimumContentDim: 1,
|
||||
Style: DimAutoStyle.Auto
|
||||
);
|
||||
|
||||
var d = new DimAuto (
|
||||
MaximumContentDim: null,
|
||||
MinimumContentDim: 1,
|
||||
Style: DimAutoStyle.Content
|
||||
);
|
||||
|
||||
var e = new DimAuto (
|
||||
MaximumContentDim: null,
|
||||
MinimumContentDim: 2,
|
||||
Style: DimAutoStyle.Auto
|
||||
);
|
||||
|
||||
// Test equality with same values
|
||||
Assert.True (a.Equals (b));
|
||||
Assert.True (a.GetHashCode () == b.GetHashCode ());
|
||||
|
||||
// Test inequality with different MaximumContentDim
|
||||
Assert.False (a.Equals (c));
|
||||
Assert.False (a.GetHashCode () == c.GetHashCode ());
|
||||
|
||||
// Test inequality with different Style
|
||||
Assert.False (a.Equals (d));
|
||||
Assert.False (a.GetHashCode () == d.GetHashCode ());
|
||||
|
||||
// Test inequality with different MinimumContentDim
|
||||
Assert.False (a.Equals (e));
|
||||
Assert.False (a.GetHashCode () == e.GetHashCode ());
|
||||
|
||||
// Test inequality with null
|
||||
Assert.False (a.Equals (null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestEquality_Simple ()
|
||||
{
|
||||
Dim a = Auto ();
|
||||
Dim b = Auto ();
|
||||
Assert.True (a.Equals (b));
|
||||
Assert.True (a.GetHashCode () == b.GetHashCode ());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TextFormatter_Settings_Change_View_Size ()
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto ()
|
||||
};
|
||||
Assert.Equal (new (4, 0), view.Frame.Size);
|
||||
|
||||
view.Height = 1;
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
Assert.Equal (new (4, 1), view.Frame.Size);
|
||||
Size lastSize = view.Frame.Size;
|
||||
|
||||
view.TextAlignment = Alignment.Fill;
|
||||
Assert.Equal (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
|
||||
lastSize = view.Frame.Size;
|
||||
view.VerticalTextAlignment = Alignment.Center;
|
||||
Assert.Equal (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
lastSize = view.Frame.Size;
|
||||
view.HotKeySpecifier = (Rune)'*';
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
Assert.NotEqual (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
lastSize = view.Frame.Size;
|
||||
view.Text = "*ABCD";
|
||||
Assert.NotEqual (lastSize, view.Frame.Size);
|
||||
}
|
||||
|
||||
// Test validation
|
||||
[Fact]
|
||||
public void ValidatePosDim_True_Throws_When_SubView_Uses_SuperView_Dims ()
|
||||
@@ -410,46 +569,6 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
Assert.Equal (expectedWidth, superView.Frame.Width);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData (0, 1, 1)]
|
||||
[InlineData (1, 1, 1)]
|
||||
[InlineData (9, 1, 1)]
|
||||
[InlineData (10, 1, 1)]
|
||||
[InlineData (0, 10, 10)]
|
||||
[InlineData (1, 10, 10)]
|
||||
[InlineData (9, 10, 10)]
|
||||
[InlineData (10, 10, 10)]
|
||||
public void Width_Auto_Text_Does_Not_Constrain_To_SuperView (int subX, int textLen, int expectedSubWidth)
|
||||
{
|
||||
var superView = new View
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = 10,
|
||||
Height = 1,
|
||||
ValidatePosDim = true
|
||||
};
|
||||
|
||||
var subView = new View
|
||||
{
|
||||
Text = new ('*', textLen),
|
||||
X = subX,
|
||||
Y = 0,
|
||||
Width = Auto (DimAutoStyle.Text),
|
||||
Height = 1,
|
||||
ValidatePosDim = true
|
||||
};
|
||||
|
||||
superView.Add (subView);
|
||||
|
||||
superView.BeginInit ();
|
||||
superView.EndInit ();
|
||||
superView.SetRelativeLayout (superView.GetContentSize ());
|
||||
|
||||
superView.LayoutSubviews ();
|
||||
Assert.Equal (expectedSubWidth, subView.Frame.Width);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData (0, 1, 1)]
|
||||
[InlineData (1, 1, 1)]
|
||||
@@ -499,31 +618,69 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
Assert.Equal (expectedSubWidth, subView.Frame.Width);
|
||||
}
|
||||
|
||||
[SetupFakeDriver]
|
||||
[Fact]
|
||||
public void Change_To_Non_Auto_Resets_ContentSize ()
|
||||
[Theory]
|
||||
[InlineData (0, 1, 1)]
|
||||
[InlineData (1, 1, 1)]
|
||||
[InlineData (9, 1, 1)]
|
||||
[InlineData (10, 1, 1)]
|
||||
[InlineData (0, 10, 10)]
|
||||
[InlineData (1, 10, 10)]
|
||||
[InlineData (9, 10, 10)]
|
||||
[InlineData (10, 10, 10)]
|
||||
public void Width_Auto_Text_Does_Not_Constrain_To_SuperView (int subX, int textLen, int expectedSubWidth)
|
||||
{
|
||||
View view = new ()
|
||||
var superView = new View
|
||||
{
|
||||
Width = Auto (),
|
||||
Height = Auto (),
|
||||
Text = "01234"
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = 10,
|
||||
Height = 1,
|
||||
ValidatePosDim = true
|
||||
};
|
||||
view.SetRelativeLayout (new (100, 100));
|
||||
Assert.Equal (new (0, 0, 5, 1), view.Frame);
|
||||
Assert.Equal (new (5, 1), view.GetContentSize ());
|
||||
|
||||
// Change text to a longer string
|
||||
view.Text = "0123456789";
|
||||
var subView = new View
|
||||
{
|
||||
Text = new ('*', textLen),
|
||||
X = subX,
|
||||
Y = 0,
|
||||
Width = Auto (DimAutoStyle.Text),
|
||||
Height = 1,
|
||||
ValidatePosDim = true
|
||||
};
|
||||
|
||||
Assert.Equal (new (0, 0, 10, 1), view.Frame);
|
||||
Assert.Equal (new (10, 1), view.GetContentSize ());
|
||||
superView.Add (subView);
|
||||
|
||||
// If ContentSize was reset, these should cause it to update
|
||||
view.Width = 5;
|
||||
view.Height = 1;
|
||||
superView.BeginInit ();
|
||||
superView.EndInit ();
|
||||
superView.SetRelativeLayout (superView.GetContentSize ());
|
||||
|
||||
Assert.Equal (new (5, 1), view.GetContentSize ());
|
||||
superView.LayoutSubviews ();
|
||||
Assert.Equal (expectedSubWidth, subView.Frame.Width);
|
||||
}
|
||||
|
||||
private class DimAutoTestView : View
|
||||
{
|
||||
public DimAutoTestView ()
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Width = Auto ();
|
||||
Height = Auto ();
|
||||
}
|
||||
|
||||
public DimAutoTestView (Dim width, Dim height)
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
|
||||
public DimAutoTestView (string text, Dim width, Dim height)
|
||||
{
|
||||
ValidatePosDim = true;
|
||||
Text = text;
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
}
|
||||
|
||||
#region DimAutoStyle.Auto tests
|
||||
@@ -544,7 +701,6 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
|
||||
Assert.Equal (new (expectedW, expectedH), view.Frame.Size);
|
||||
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -653,7 +809,6 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
|
||||
Assert.Equal (new (expectedW, expectedH), view.Frame.Size);
|
||||
|
||||
}
|
||||
|
||||
[Theory]
|
||||
@@ -665,15 +820,14 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
public void DimAutoStyle_Text_Sizes_Correctly_With_Min (string text, int minWidth, int minHeight, int expectedW, int expectedH)
|
||||
{
|
||||
var view = new View ();
|
||||
view.Width = Auto (DimAutoStyle.Text, minimumContentDim: minWidth);
|
||||
view.Height = Auto (DimAutoStyle.Text, minimumContentDim: minHeight);
|
||||
view.Width = Auto (DimAutoStyle.Text, minWidth);
|
||||
view.Height = Auto (DimAutoStyle.Text, minHeight);
|
||||
|
||||
view.Text = text;
|
||||
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
|
||||
Assert.Equal (new (expectedW, expectedH), view.Frame.Size);
|
||||
|
||||
}
|
||||
|
||||
[Theory]
|
||||
@@ -699,7 +853,6 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
[InlineData ("01234", 5, 1)]
|
||||
[InlineData ("01234ABCDE", 10, 1)]
|
||||
[InlineData ("01234\nABCDE", 5, 2)]
|
||||
|
||||
public void DimAutoStyle_Text_NoMin_Not_Constrained_By_ContentSize (string text, int expectedW, int expectedH)
|
||||
{
|
||||
var view = new View ();
|
||||
@@ -711,7 +864,6 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
Assert.Equal (new (expectedW, expectedH), view.Frame.Size);
|
||||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[InlineData ("", 0, 0)]
|
||||
[InlineData (" ", 1, 1)]
|
||||
@@ -720,7 +872,7 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
[InlineData ("01234\nABCDE", 5, 2)]
|
||||
public void DimAutoStyle_Text_NoMin_Not_Constrained_By_SuperView (string text, int expectedW, int expectedH)
|
||||
{
|
||||
var superView = new View ()
|
||||
var superView = new View
|
||||
{
|
||||
Width = 1, Height = 1
|
||||
};
|
||||
@@ -870,100 +1022,5 @@ public partial class DimAutoTests (ITestOutputHelper output)
|
||||
|
||||
#endregion DimAutoStyle.Content tests
|
||||
|
||||
[Fact]
|
||||
public void TextFormatter_Settings_Change_View_Size ()
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto ()
|
||||
};
|
||||
Assert.Equal (new (4, 0), view.Frame.Size);
|
||||
|
||||
view.Height = 1;
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
Assert.Equal (new (4, 1), view.Frame.Size);
|
||||
Size lastSize = view.Frame.Size;
|
||||
|
||||
view.TextAlignment = Alignment.Fill;
|
||||
Assert.Equal (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
|
||||
lastSize = view.Frame.Size;
|
||||
view.VerticalTextAlignment = Alignment.Center;
|
||||
Assert.Equal (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
lastSize = view.Frame.Size;
|
||||
view.HotKeySpecifier = (Rune)'*';
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
Assert.NotEqual (lastSize, view.Frame.Size);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
Text = "_1234",
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
view.SetRelativeLayout (Application.Screen.Size);
|
||||
lastSize = view.Frame.Size;
|
||||
view.Text = "*ABCD";
|
||||
Assert.NotEqual (lastSize, view.Frame.Size);
|
||||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void HotKey_TextFormatter_Width_Correct ([CombinatorialValues ("1234", "_1234", "1_234", "____")] string text)
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
Text = text,
|
||||
Height = 1,
|
||||
Width = Auto ()
|
||||
};
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToHeight);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void HotKey_TextFormatter_Height_Correct ([CombinatorialValues ("1234", "_1234", "1_234", "____")] string text)
|
||||
{
|
||||
View view = new ()
|
||||
{
|
||||
HotKeySpecifier = (Rune)'_',
|
||||
Text = text,
|
||||
Width = Auto (),
|
||||
Height = 1
|
||||
};
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToHeight);
|
||||
|
||||
view = new ()
|
||||
{
|
||||
HotKeySpecifier = (Rune)'_',
|
||||
TextDirection = TextDirection.TopBottom_LeftRight,
|
||||
Text = text,
|
||||
Width = 1,
|
||||
Height = Auto ()
|
||||
};
|
||||
Assert.Equal (1, view.TextFormatter.ConstrainToWidth);
|
||||
Assert.Equal (4, view.TextFormatter.ConstrainToHeight);
|
||||
}
|
||||
|
||||
// Test variations of Frame
|
||||
}
|
||||
|
||||
@@ -14,9 +14,12 @@ public class DimFuncTests (ITestOutputHelper output)
|
||||
Func<int> f2 = () => 0;
|
||||
|
||||
Dim dim1 = Func (f1);
|
||||
Dim dim2 = Func (f2);
|
||||
Dim dim2 = Func (f1);
|
||||
Assert.Equal (dim1, dim2);
|
||||
|
||||
dim2 = Func (f2);
|
||||
Assert.NotEqual (dim1, dim2);
|
||||
|
||||
f2 = () => 1;
|
||||
dim2 = Func (f2);
|
||||
Assert.NotEqual (dim1, dim2);
|
||||
|
||||
@@ -15,7 +15,6 @@ public class DimPercentTests
|
||||
Assert.Equal (50, result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void DimPercent_Equals ()
|
||||
{
|
||||
@@ -63,6 +62,15 @@ public class DimPercentTests
|
||||
Assert.NotEqual (dim1, dim2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestEquality ()
|
||||
{
|
||||
var a = Dim.Percent (32);
|
||||
var b = Dim.Percent (32);
|
||||
Assert.True (a.Equals (b));
|
||||
Assert.True (a.GetHashCode () == b.GetHashCode ());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DimPercent_Invalid_Throws ()
|
||||
{
|
||||
@@ -157,7 +165,7 @@ public class DimPercentTests
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData (0)]
|
||||
[InlineData (1)]
|
||||
[InlineData (50)]
|
||||
[InlineData (100)]
|
||||
|
||||
@@ -27,58 +27,58 @@ public class PosAlignTests
|
||||
Assert.Equal (0, posAlign.Aligner.ContainerSize);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData (Alignment.Start, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
|
||||
[InlineData (Alignment.Center, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
|
||||
[InlineData (Alignment.Start, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
[InlineData (Alignment.Center, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
[InlineData (Alignment.Start, Alignment.Start, AlignmentModes.StartToEnd, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
public void PosAlign_Equals (Alignment align1, Alignment align2, AlignmentModes mode1, AlignmentModes mode2, bool expectedEquals)
|
||||
{
|
||||
var posAlign1 = new PosAlign
|
||||
{
|
||||
Aligner = new()
|
||||
{
|
||||
Alignment = align1,
|
||||
AlignmentModes = mode1
|
||||
}
|
||||
};
|
||||
//[Theory]
|
||||
//[InlineData (Alignment.Start, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
|
||||
//[InlineData (Alignment.Center, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
|
||||
//[InlineData (Alignment.Start, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
//[InlineData (Alignment.Center, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
//[InlineData (Alignment.Start, Alignment.Start, AlignmentModes.StartToEnd, AlignmentModes.AddSpaceBetweenItems, false)]
|
||||
//public void PosAlign_Equals (Alignment align1, Alignment align2, AlignmentModes mode1, AlignmentModes mode2, bool expectedEquals)
|
||||
//{
|
||||
// var posAlign1 = new PosAlign
|
||||
// {
|
||||
// Aligner = new ()
|
||||
// {
|
||||
// Alignment = align1,
|
||||
// AlignmentModes = mode1
|
||||
// }
|
||||
// };
|
||||
|
||||
var posAlign2 = new PosAlign
|
||||
{
|
||||
Aligner = new()
|
||||
{
|
||||
Alignment = align2,
|
||||
AlignmentModes = mode2
|
||||
}
|
||||
};
|
||||
// var posAlign2 = new PosAlign
|
||||
// {
|
||||
// Aligner = new ()
|
||||
// {
|
||||
// Alignment = align2,
|
||||
// AlignmentModes = mode2
|
||||
// }
|
||||
// };
|
||||
|
||||
Assert.Equal (expectedEquals, posAlign1.Equals (posAlign2));
|
||||
Assert.Equal (expectedEquals, posAlign2.Equals (posAlign1));
|
||||
}
|
||||
// Assert.Equal (expectedEquals, posAlign1.Equals (posAlign2));
|
||||
// Assert.Equal (expectedEquals, posAlign2.Equals (posAlign1));
|
||||
//}
|
||||
|
||||
[Fact]
|
||||
public void PosAlign_Equals_CachedLocation_Not_Used ()
|
||||
{
|
||||
View superView = new ()
|
||||
{
|
||||
Width = 10,
|
||||
Height = 25
|
||||
};
|
||||
View view = new ();
|
||||
superView.Add (view);
|
||||
//[Fact]
|
||||
//public void PosAlign_Equals_CachedLocation_Not_Used ()
|
||||
//{
|
||||
// View superView = new ()
|
||||
// {
|
||||
// Width = 10,
|
||||
// Height = 25
|
||||
// };
|
||||
// View view = new ();
|
||||
// superView.Add (view);
|
||||
|
||||
Pos posAlign1 = Pos.Align (Alignment.Center);
|
||||
view.X = posAlign1;
|
||||
int pos1 = posAlign1.Calculate (10, Dim.Absolute (0)!, view, Dimension.Width);
|
||||
// Pos posAlign1 = Pos.Align (Alignment.Center);
|
||||
// view.X = posAlign1;
|
||||
// int pos1 = posAlign1.Calculate (10, Dim.Absolute (0)!, view, Dimension.Width);
|
||||
|
||||
Pos posAlign2 = Pos.Align (Alignment.Center);
|
||||
view.Y = posAlign2;
|
||||
int pos2 = posAlign2.Calculate (25, Dim.Absolute (0)!, view, Dimension.Height);
|
||||
// Pos posAlign2 = Pos.Align (Alignment.Center);
|
||||
// view.Y = posAlign2;
|
||||
// int pos2 = posAlign2.Calculate (25, Dim.Absolute (0)!, view, Dimension.Height);
|
||||
|
||||
Assert.NotEqual (pos1, pos2);
|
||||
Assert.Equal (posAlign1, posAlign2);
|
||||
}
|
||||
// Assert.NotEqual (pos1, pos2);
|
||||
// Assert.Equal (posAlign1, posAlign2);
|
||||
//}
|
||||
|
||||
[Fact]
|
||||
public void PosAlign_ToString ()
|
||||
|
||||
@@ -27,15 +27,6 @@ public class PosAnchorEndTests (ITestOutputHelper output)
|
||||
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 ()
|
||||
{
|
||||
|
||||
@@ -15,16 +15,6 @@ public class PosCenterTests (ITestOutputHelper output)
|
||||
Assert.NotNull (posCenter);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PosCenter_Equals ()
|
||||
{
|
||||
var posCenter1 = new PosCenter ();
|
||||
var posCenter2 = new PosCenter ();
|
||||
|
||||
Assert.False (posCenter1.Equals (posCenter2));
|
||||
Assert.False (posCenter2.Equals (posCenter1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PosCenter_ToString ()
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ public class PosFuncTests (ITestOutputHelper output)
|
||||
Func<int> f2 = () => 0;
|
||||
|
||||
Pos pos1 = Pos.Func (f1);
|
||||
Pos pos2 = Pos.Func (f2);
|
||||
Pos pos2 = Pos.Func (f1);
|
||||
Assert.Equal (pos1, pos2);
|
||||
|
||||
f2 = () => 1;
|
||||
|
||||
@@ -145,21 +145,6 @@ public class PosTests ()
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PosFunction_Equal ()
|
||||
{
|
||||
Func<int> f1 = () => 0;
|
||||
Func<int> f2 = () => 0;
|
||||
|
||||
Pos pos1 = Pos.Func (f1);
|
||||
Pos pos2 = Pos.Func (f2);
|
||||
Assert.Equal (pos1, pos2);
|
||||
|
||||
f2 = () => 1;
|
||||
pos2 = Pos.Func (f2);
|
||||
Assert.NotEqual (pos1, pos2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PosFunction_SetsValue ()
|
||||
{
|
||||
|
||||
@@ -1359,4 +1359,53 @@ public class ContextMenuTests (ITestOutputHelper output)
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void Handling_TextField_With_Opened_ContextMenu_By_Mouse_HasFocus ()
|
||||
{
|
||||
var tf1 = new TextField { Width = 10, Text = "TextField 1" };
|
||||
var tf2 = new TextField { Y = 2, Width = 10, Text = "TextField 2" };
|
||||
var win = new Window ();
|
||||
win.Add (tf1, tf2);
|
||||
var rs = Application.Begin (win);
|
||||
|
||||
Assert.True (tf1.HasFocus);
|
||||
Assert.False (tf2.HasFocus);
|
||||
Assert.Equal (2, win.Subviews.Count);
|
||||
Assert.Null (Application.MouseEnteredView);
|
||||
|
||||
// Right click on tf2 to open context menu
|
||||
Application.OnMouseEvent (new () { Position = new (1, 3), Flags = MouseFlags.Button3Clicked });
|
||||
Assert.False (tf1.HasFocus);
|
||||
Assert.False (tf2.HasFocus);
|
||||
Assert.Equal (3, win.Subviews.Count);
|
||||
Assert.True (tf2.ContextMenu.MenuBar.IsMenuOpen);
|
||||
Assert.True (win.Focused is Menu);
|
||||
Assert.True (Application.MouseGrabView is MenuBar);
|
||||
Assert.Equal (tf2, Application.MouseEnteredView);
|
||||
|
||||
// Click on tf1 to focus it, which cause context menu being closed
|
||||
Application.OnMouseEvent (new () { Position = new (1, 1), Flags = MouseFlags.Button1Clicked });
|
||||
Assert.True (tf1.HasFocus);
|
||||
Assert.False (tf2.HasFocus);
|
||||
Assert.Equal (2, win.Subviews.Count);
|
||||
Assert.Null (tf2.ContextMenu.MenuBar);
|
||||
Assert.Equal (win.Focused, tf1);
|
||||
Assert.Null (Application.MouseGrabView);
|
||||
Assert.Equal (tf1, Application.MouseEnteredView);
|
||||
|
||||
// Click on tf2 to focus it
|
||||
Application.OnMouseEvent (new () { Position = new (1, 3), Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (tf1.HasFocus);
|
||||
Assert.True (tf2.HasFocus);
|
||||
Assert.Equal (2, win.Subviews.Count);
|
||||
Assert.Null (tf2.ContextMenu.MenuBar);
|
||||
Assert.Equal (win.Focused, tf2);
|
||||
Assert.Null (Application.MouseGrabView);
|
||||
Assert.Equal (tf2, Application.MouseEnteredView);
|
||||
|
||||
Application.End (rs);
|
||||
win.Dispose ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,9 +38,6 @@ public class ShortcutTests
|
||||
|
||||
Assert.IsType<DimAuto> (shortcut.Width);
|
||||
Assert.IsType<DimAuto> (shortcut.Height);
|
||||
//shortcut.BeginInit();
|
||||
//shortcut.EndInit ();
|
||||
// shortcut.LayoutSubviews ();
|
||||
shortcut.SetRelativeLayout (new (100, 100));
|
||||
|
||||
// |0123456789
|
||||
@@ -256,19 +253,6 @@ public class ShortcutTests
|
||||
Assert.True (actionInvoked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ColorScheme_SetsAndGetsCorrectly ()
|
||||
{
|
||||
var colorScheme = new ColorScheme ();
|
||||
|
||||
var shortcut = new Shortcut
|
||||
{
|
||||
ColorScheme = colorScheme
|
||||
};
|
||||
|
||||
Assert.Same (colorScheme, shortcut.ColorScheme);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Subview_Visibility_Controlled_By_Removal ()
|
||||
{
|
||||
@@ -600,5 +584,35 @@ public class ShortcutTests
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ColorScheme_SetsAndGetsCorrectly ()
|
||||
{
|
||||
var colorScheme = new ColorScheme ();
|
||||
|
||||
var shortcut = new Shortcut
|
||||
{
|
||||
ColorScheme = colorScheme
|
||||
};
|
||||
|
||||
Assert.Same (colorScheme, shortcut.ColorScheme);
|
||||
}
|
||||
|
||||
// https://github.com/gui-cs/Terminal.Gui/issues/3664
|
||||
[Fact]
|
||||
public void ColorScheme_SetColorScheme_Does_Not_Fault_3664 ()
|
||||
{
|
||||
Application.Current = new Toplevel ();
|
||||
Shortcut shortcut = new Shortcut ();
|
||||
|
||||
Application.Current.ColorScheme = null;
|
||||
|
||||
Assert.Null (shortcut.ColorScheme);
|
||||
|
||||
shortcut.HasFocus = true;
|
||||
|
||||
Assert.NotNull (shortcut.ColorScheme);
|
||||
|
||||
Application.Current.Dispose ();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -246,14 +246,26 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
top.OnUnloaded ();
|
||||
Assert.Equal ("Unloaded", eventInvoked);
|
||||
|
||||
top.AddMenuStatusBar (new MenuBar ());
|
||||
top.Add (new MenuBar ());
|
||||
Assert.NotNull (top.MenuBar);
|
||||
top.AddMenuStatusBar (new StatusBar ());
|
||||
top.Add (new StatusBar ());
|
||||
Assert.NotNull (top.StatusBar);
|
||||
top.RemoveMenuStatusBar (top.MenuBar);
|
||||
var menuBar = top.MenuBar;
|
||||
top.Remove (top.MenuBar);
|
||||
Assert.Null (top.MenuBar);
|
||||
top.RemoveMenuStatusBar (top.StatusBar);
|
||||
Assert.NotNull (menuBar);
|
||||
var statusBar = top.StatusBar;
|
||||
top.Remove (top.StatusBar);
|
||||
Assert.Null (top.StatusBar);
|
||||
Assert.NotNull (statusBar);
|
||||
#if true
|
||||
Assert.False (menuBar.WasDisposed);
|
||||
Assert.False (statusBar.WasDisposed);
|
||||
menuBar.Dispose ();
|
||||
statusBar.Dispose ();
|
||||
Assert.True (menuBar.WasDisposed);
|
||||
Assert.True (statusBar.WasDisposed);
|
||||
#endif
|
||||
|
||||
Application.Begin (top);
|
||||
Assert.Equal (top, Application.Top);
|
||||
@@ -265,7 +277,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (0, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new MenuBar ());
|
||||
top.Add (new MenuBar ());
|
||||
Assert.NotNull (top.MenuBar);
|
||||
|
||||
// Application.Top with a menu and without status bar.
|
||||
@@ -274,7 +286,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (1, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new StatusBar ());
|
||||
top.Add (new StatusBar ());
|
||||
Assert.NotNull (top.StatusBar);
|
||||
|
||||
// Application.Top with a menu and status bar.
|
||||
@@ -286,8 +298,10 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (2, ny);
|
||||
Assert.NotNull (sb);
|
||||
|
||||
top.RemoveMenuStatusBar (top.MenuBar);
|
||||
menuBar = top.MenuBar;
|
||||
top.Remove (top.MenuBar);
|
||||
Assert.Null (top.MenuBar);
|
||||
Assert.NotNull (menuBar);
|
||||
|
||||
// Application.Top without a menu and with a status bar.
|
||||
View.GetLocationEnsuringFullVisibility (top, 2, 2, out nx, out ny, out sb);
|
||||
@@ -298,8 +312,10 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (2, ny);
|
||||
Assert.NotNull (sb);
|
||||
|
||||
top.RemoveMenuStatusBar (top.StatusBar);
|
||||
statusBar = top.StatusBar;
|
||||
top.Remove (top.StatusBar);
|
||||
Assert.Null (top.StatusBar);
|
||||
Assert.NotNull (statusBar);
|
||||
Assert.Null (top.MenuBar);
|
||||
|
||||
var win = new Window { Width = Dim.Fill (), Height = Dim.Fill () };
|
||||
@@ -318,7 +334,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (0, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new MenuBar ());
|
||||
top.Add (new MenuBar ());
|
||||
Assert.NotNull (top.MenuBar);
|
||||
|
||||
// Application.Top with a menu and without status bar.
|
||||
@@ -327,7 +343,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (1, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new StatusBar ());
|
||||
top.Add (new StatusBar ());
|
||||
Assert.NotNull (top.StatusBar);
|
||||
|
||||
// Application.Top with a menu and status bar.
|
||||
@@ -339,10 +355,14 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (20, ny);
|
||||
Assert.NotNull (sb);
|
||||
|
||||
top.RemoveMenuStatusBar (top.MenuBar);
|
||||
top.RemoveMenuStatusBar (top.StatusBar);
|
||||
Assert.Null (top.StatusBar);
|
||||
menuBar = top.MenuBar;
|
||||
statusBar = top.StatusBar;
|
||||
top.Remove (top.MenuBar);
|
||||
Assert.Null (top.MenuBar);
|
||||
Assert.NotNull (menuBar);
|
||||
top.Remove (top.StatusBar);
|
||||
Assert.Null (top.StatusBar);
|
||||
Assert.NotNull (statusBar);
|
||||
|
||||
top.Remove (win);
|
||||
|
||||
@@ -355,7 +375,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (0, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new MenuBar ());
|
||||
top.Add (new MenuBar ());
|
||||
Assert.NotNull (top.MenuBar);
|
||||
|
||||
// Application.Top with a menu and without status bar.
|
||||
@@ -364,7 +384,7 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
Assert.Equal (2, ny);
|
||||
Assert.Null (sb);
|
||||
|
||||
top.AddMenuStatusBar (new StatusBar ());
|
||||
top.Add (new StatusBar ());
|
||||
Assert.NotNull (top.StatusBar);
|
||||
|
||||
// Application.Top with a menu and status bar.
|
||||
@@ -387,7 +407,21 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
win.NewMouseEvent (new () { Position = new (6, 0), Flags = MouseFlags.Button1Pressed });
|
||||
|
||||
//Assert.Null (Toplevel._dragPosition);
|
||||
#if true
|
||||
Assert.False (top.MenuBar.WasDisposed);
|
||||
Assert.False (top.StatusBar.WasDisposed);
|
||||
#endif
|
||||
menuBar = top.MenuBar;
|
||||
statusBar = top.StatusBar;
|
||||
top.Dispose ();
|
||||
Assert.Null (top.MenuBar);
|
||||
Assert.Null (top.StatusBar);
|
||||
Assert.NotNull (menuBar);
|
||||
Assert.NotNull (statusBar);
|
||||
#if true
|
||||
Assert.True (menuBar.WasDisposed);
|
||||
Assert.True (statusBar.WasDisposed);
|
||||
#endif
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -1568,4 +1602,31 @@ public partial class ToplevelTests (ITestOutputHelper output)
|
||||
t.Dispose ();
|
||||
Application.Shutdown ();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Remove_Do_Not_Dispose_MenuBar_Or_StatusBar ()
|
||||
{
|
||||
var mb = new MenuBar ();
|
||||
var sb = new StatusBar ();
|
||||
var tl = new Toplevel ();
|
||||
|
||||
#if DEBUG
|
||||
Assert.False (mb.WasDisposed);
|
||||
Assert.False (sb.WasDisposed);
|
||||
#endif
|
||||
tl.Add (mb, sb);
|
||||
Assert.NotNull (tl.MenuBar);
|
||||
Assert.NotNull (tl.StatusBar);
|
||||
#if DEBUG
|
||||
Assert.False (mb.WasDisposed);
|
||||
Assert.False (sb.WasDisposed);
|
||||
#endif
|
||||
tl.RemoveAll ();
|
||||
Assert.Null (tl.MenuBar);
|
||||
Assert.Null (tl.StatusBar);
|
||||
#if DEBUG
|
||||
Assert.False (mb.WasDisposed);
|
||||
Assert.False (sb.WasDisposed);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user