mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
* Subview clean up * New Add/Remove event pattern * Using Logging * cleanup * Subview -> SubView * Test code cleanup. Killed many warnings. * Fix tznind feedback * Refactored AllViewTest helpers * Moved keyboard tests to parallel * Moved mouse tests to parallel * Moved view tests to parallel * Test code cleanup. Killed many warnings. * dupe test * Some mouse tests can't run in parallel because MouseGrabView * Made SpinnerView more testable * Moved more tests * SubViews to IReadOnlyCollection<View> * SubViews to IReadOnlyCollection<View> 2 * scrollbar tests * shortcut tests * Use InternalSubViews vs. _subviews * Nuked View.IsAdded. Added View.SuperViewChanged. * API doc updats * Unit Test tweak * Unit Test tweak
275 lines
7.4 KiB
C#
275 lines
7.4 KiB
C#
using UnitTests;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace Terminal.Gui.ViewsTests;
|
|
|
|
public class ScrollBarTests
|
|
{
|
|
[Fact]
|
|
public void Constructor_Defaults ()
|
|
{
|
|
var scrollBar = new ScrollBar ();
|
|
Assert.False (scrollBar.CanFocus);
|
|
Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
|
|
Assert.Equal (0, scrollBar.ScrollableContentSize);
|
|
Assert.Equal (0, scrollBar.VisibleContentSize);
|
|
Assert.Equal (0, scrollBar.GetSliderPosition ());
|
|
Assert.Equal (0, scrollBar.Position);
|
|
Assert.False (scrollBar.AutoShow);
|
|
}
|
|
|
|
#region AutoHide
|
|
[Fact]
|
|
public void AutoHide_False_Is_Default_CorrectlyHidesAndShows ()
|
|
{
|
|
var super = new Toplevel ()
|
|
{
|
|
Id = "super",
|
|
Width = 1,
|
|
Height = 20
|
|
};
|
|
|
|
var scrollBar = new ScrollBar
|
|
{
|
|
};
|
|
super.Add (scrollBar);
|
|
Assert.False (scrollBar.AutoShow);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.AutoShow = true;
|
|
Assert.True (scrollBar.AutoShow);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
// Should Show
|
|
scrollBar.ScrollableContentSize = 21;
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
// Should Hide
|
|
scrollBar.ScrollableContentSize = 10;
|
|
super.Layout (new (100, 100));
|
|
Assert.False (scrollBar.Visible);
|
|
|
|
super.Dispose ();
|
|
}
|
|
|
|
[Fact]
|
|
public void AutoHide_False_CorrectlyHidesAndShows ()
|
|
{
|
|
var super = new Toplevel ()
|
|
{
|
|
Id = "super",
|
|
Width = 1,
|
|
Height = 20
|
|
};
|
|
|
|
var scrollBar = new ScrollBar
|
|
{
|
|
ScrollableContentSize = 20,
|
|
AutoShow = false
|
|
};
|
|
super.Add (scrollBar);
|
|
Assert.False (scrollBar.AutoShow);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
// Should Hide if AutoSize = true, but should not hide if AutoSize = false
|
|
scrollBar.ScrollableContentSize = 10;
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
super.Dispose ();
|
|
}
|
|
|
|
[Fact]
|
|
public void AutoHide_True_Changing_ScrollableContentSize_CorrectlyHidesAndShows ()
|
|
{
|
|
var super = new Toplevel ()
|
|
{
|
|
Id = "super",
|
|
Width = 1,
|
|
Height = 20
|
|
};
|
|
|
|
var scrollBar = new ScrollBar
|
|
{
|
|
ScrollableContentSize = 20,
|
|
};
|
|
super.Add (scrollBar);
|
|
Assert.False (scrollBar.AutoShow);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.AutoShow = true;
|
|
|
|
super.Layout (new (100, 100));
|
|
Assert.False (scrollBar.Visible);
|
|
Assert.Equal (1, scrollBar.Frame.Width);
|
|
Assert.Equal (20, scrollBar.Frame.Height);
|
|
|
|
scrollBar.ScrollableContentSize = 10;
|
|
super.Layout (new (100, 100));
|
|
Assert.False (scrollBar.Visible);
|
|
|
|
scrollBar.ScrollableContentSize = 30;
|
|
super.Layout (new (100, 100));
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.AutoShow = false;
|
|
super.Layout (new (100, 100));
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.ScrollableContentSize = 10;
|
|
super.Layout (new (100, 100));
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
super.Dispose ();
|
|
}
|
|
|
|
[Fact]
|
|
public void AutoHide_Change_VisibleContentSize_CorrectlyHidesAndShows ()
|
|
{
|
|
var super = new Toplevel ()
|
|
{
|
|
Id = "super",
|
|
Width = 1,
|
|
Height = 20
|
|
};
|
|
|
|
var scrollBar = new ScrollBar
|
|
{
|
|
ScrollableContentSize = 20,
|
|
VisibleContentSize = 20
|
|
};
|
|
super.Add (scrollBar);
|
|
Assert.False (scrollBar.AutoShow);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.AutoShow = true;
|
|
|
|
Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
|
|
Assert.Equal (20, scrollBar.VisibleContentSize);
|
|
Assert.False (scrollBar.Visible);
|
|
|
|
scrollBar.VisibleContentSize = 10;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.VisibleContentSize = 30;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.False (scrollBar.Visible);
|
|
|
|
scrollBar.VisibleContentSize = 10;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.VisibleContentSize = 21;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.False (scrollBar.Visible);
|
|
|
|
scrollBar.AutoShow = false;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
scrollBar.VisibleContentSize = 10;
|
|
//Application.RunIteration (ref rs);
|
|
Assert.True (scrollBar.Visible);
|
|
|
|
super.Dispose ();
|
|
}
|
|
|
|
#endregion AutoHide
|
|
|
|
#region Orientation
|
|
[Fact]
|
|
public void OnOrientationChanged_Keeps_Size ()
|
|
{
|
|
var scroll = new ScrollBar ();
|
|
scroll.Layout ();
|
|
scroll.ScrollableContentSize = 1;
|
|
|
|
scroll.Orientation = Orientation.Horizontal;
|
|
Assert.Equal (1, scroll.ScrollableContentSize);
|
|
}
|
|
|
|
[Fact]
|
|
public void OnOrientationChanged_Sets_Position_To_0 ()
|
|
{
|
|
View super = new View ()
|
|
{
|
|
Id = "super",
|
|
Width = 10,
|
|
Height = 10
|
|
};
|
|
var scrollBar = new ScrollBar ()
|
|
{
|
|
};
|
|
super.Add (scrollBar);
|
|
scrollBar.Layout ();
|
|
scrollBar.Position = 1;
|
|
scrollBar.Orientation = Orientation.Horizontal;
|
|
|
|
Assert.Equal (0, scrollBar.GetSliderPosition ());
|
|
}
|
|
|
|
#endregion Orientation
|
|
|
|
|
|
#region Size
|
|
|
|
// TODO: Add tests.
|
|
|
|
#endregion Size
|
|
|
|
#region Position
|
|
[Fact]
|
|
public void Position_Event_Cancels ()
|
|
{
|
|
var changingCount = 0;
|
|
var changedCount = 0;
|
|
var scrollBar = new ScrollBar { };
|
|
scrollBar.ScrollableContentSize = 5;
|
|
scrollBar.Frame = new Rectangle (0, 0, 1, 4); // Needs to be at least 4 for slider to move
|
|
|
|
scrollBar.PositionChanging += (s, e) =>
|
|
{
|
|
if (changingCount == 0)
|
|
{
|
|
e.Cancel = true;
|
|
}
|
|
|
|
changingCount++;
|
|
};
|
|
scrollBar.PositionChanged += (s, e) => changedCount++;
|
|
|
|
scrollBar.Position = 1;
|
|
Assert.Equal (0, scrollBar.Position);
|
|
Assert.Equal (1, changingCount);
|
|
Assert.Equal (0, changedCount);
|
|
|
|
scrollBar.Position = 1;
|
|
Assert.Equal (1, scrollBar.Position);
|
|
Assert.Equal (2, changingCount);
|
|
Assert.Equal (1, changedCount);
|
|
}
|
|
#endregion Position
|
|
|
|
|
|
[Fact]
|
|
public void ScrollableContentSize_Cannot_Be_Negative ()
|
|
{
|
|
var scrollBar = new ScrollBar { Height = 10, ScrollableContentSize = -1 };
|
|
Assert.Equal (0, scrollBar.ScrollableContentSize);
|
|
scrollBar.ScrollableContentSize = -10;
|
|
Assert.Equal (0, scrollBar.ScrollableContentSize);
|
|
}
|
|
|
|
[Fact]
|
|
public void ScrollableContentSizeChanged_Event ()
|
|
{
|
|
var count = 0;
|
|
var scrollBar = new ScrollBar ();
|
|
scrollBar.ScrollableContentSizeChanged += (s, e) => count++;
|
|
|
|
scrollBar.ScrollableContentSize = 10;
|
|
Assert.Equal (10, scrollBar.ScrollableContentSize);
|
|
Assert.Equal (1, count);
|
|
}
|
|
}
|