123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- 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);
- }
- }
|