ScrollBarTests.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace Terminal.Gui.ViewsTests;
  4. public class ScrollBarTests
  5. {
  6. [Fact]
  7. public void Constructor_Defaults ()
  8. {
  9. var scrollBar = new ScrollBar ();
  10. Assert.False (scrollBar.CanFocus);
  11. Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
  12. Assert.Equal (0, scrollBar.ScrollableContentSize);
  13. Assert.Equal (0, scrollBar.VisibleContentSize);
  14. Assert.Equal (0, scrollBar.GetSliderPosition ());
  15. Assert.Equal (0, scrollBar.Position);
  16. Assert.False (scrollBar.AutoShow);
  17. }
  18. #region AutoHide
  19. [Fact]
  20. public void AutoHide_False_Is_Default_CorrectlyHidesAndShows ()
  21. {
  22. var super = new Toplevel ()
  23. {
  24. Id = "super",
  25. Width = 1,
  26. Height = 20
  27. };
  28. var scrollBar = new ScrollBar
  29. {
  30. };
  31. super.Add (scrollBar);
  32. Assert.False (scrollBar.AutoShow);
  33. Assert.True (scrollBar.Visible);
  34. scrollBar.AutoShow = true;
  35. Assert.True (scrollBar.AutoShow);
  36. Assert.True (scrollBar.Visible);
  37. // Should Show
  38. scrollBar.ScrollableContentSize = 21;
  39. Assert.True (scrollBar.Visible);
  40. // Should Hide
  41. scrollBar.ScrollableContentSize = 10;
  42. super.Layout (new (100, 100));
  43. Assert.False (scrollBar.Visible);
  44. super.Dispose ();
  45. }
  46. [Fact]
  47. public void AutoHide_False_CorrectlyHidesAndShows ()
  48. {
  49. var super = new Toplevel ()
  50. {
  51. Id = "super",
  52. Width = 1,
  53. Height = 20
  54. };
  55. var scrollBar = new ScrollBar
  56. {
  57. ScrollableContentSize = 20,
  58. AutoShow = false
  59. };
  60. super.Add (scrollBar);
  61. Assert.False (scrollBar.AutoShow);
  62. Assert.True (scrollBar.Visible);
  63. // Should Hide if AutoSize = true, but should not hide if AutoSize = false
  64. scrollBar.ScrollableContentSize = 10;
  65. Assert.True (scrollBar.Visible);
  66. super.Dispose ();
  67. }
  68. [Fact]
  69. public void AutoHide_True_Changing_ScrollableContentSize_CorrectlyHidesAndShows ()
  70. {
  71. var super = new Toplevel ()
  72. {
  73. Id = "super",
  74. Width = 1,
  75. Height = 20
  76. };
  77. var scrollBar = new ScrollBar
  78. {
  79. ScrollableContentSize = 20,
  80. };
  81. super.Add (scrollBar);
  82. Assert.False (scrollBar.AutoShow);
  83. Assert.True (scrollBar.Visible);
  84. scrollBar.AutoShow = true;
  85. super.Layout (new (100, 100));
  86. Assert.False (scrollBar.Visible);
  87. Assert.Equal (1, scrollBar.Frame.Width);
  88. Assert.Equal (20, scrollBar.Frame.Height);
  89. scrollBar.ScrollableContentSize = 10;
  90. super.Layout (new (100, 100));
  91. Assert.False (scrollBar.Visible);
  92. scrollBar.ScrollableContentSize = 30;
  93. super.Layout (new (100, 100));
  94. Assert.True (scrollBar.Visible);
  95. scrollBar.AutoShow = false;
  96. super.Layout (new (100, 100));
  97. Assert.True (scrollBar.Visible);
  98. scrollBar.ScrollableContentSize = 10;
  99. super.Layout (new (100, 100));
  100. Assert.True (scrollBar.Visible);
  101. super.Dispose ();
  102. }
  103. [Fact]
  104. public void AutoHide_Change_VisibleContentSize_CorrectlyHidesAndShows ()
  105. {
  106. var super = new Toplevel ()
  107. {
  108. Id = "super",
  109. Width = 1,
  110. Height = 20
  111. };
  112. var scrollBar = new ScrollBar
  113. {
  114. ScrollableContentSize = 20,
  115. VisibleContentSize = 20
  116. };
  117. super.Add (scrollBar);
  118. Assert.False (scrollBar.AutoShow);
  119. Assert.True (scrollBar.Visible);
  120. scrollBar.AutoShow = true;
  121. Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
  122. Assert.Equal (20, scrollBar.VisibleContentSize);
  123. Assert.False (scrollBar.Visible);
  124. scrollBar.VisibleContentSize = 10;
  125. //Application.RunIteration (ref rs);
  126. Assert.True (scrollBar.Visible);
  127. scrollBar.VisibleContentSize = 30;
  128. //Application.RunIteration (ref rs);
  129. Assert.False (scrollBar.Visible);
  130. scrollBar.VisibleContentSize = 10;
  131. //Application.RunIteration (ref rs);
  132. Assert.True (scrollBar.Visible);
  133. scrollBar.VisibleContentSize = 21;
  134. //Application.RunIteration (ref rs);
  135. Assert.False (scrollBar.Visible);
  136. scrollBar.AutoShow = false;
  137. //Application.RunIteration (ref rs);
  138. Assert.True (scrollBar.Visible);
  139. scrollBar.VisibleContentSize = 10;
  140. //Application.RunIteration (ref rs);
  141. Assert.True (scrollBar.Visible);
  142. super.Dispose ();
  143. }
  144. #endregion AutoHide
  145. #region Orientation
  146. [Fact]
  147. public void OnOrientationChanged_Keeps_Size ()
  148. {
  149. var scroll = new ScrollBar ();
  150. scroll.Layout ();
  151. scroll.ScrollableContentSize = 1;
  152. scroll.Orientation = Orientation.Horizontal;
  153. Assert.Equal (1, scroll.ScrollableContentSize);
  154. }
  155. [Fact]
  156. public void OnOrientationChanged_Sets_Position_To_0 ()
  157. {
  158. View super = new View ()
  159. {
  160. Id = "super",
  161. Width = 10,
  162. Height = 10
  163. };
  164. var scrollBar = new ScrollBar ()
  165. {
  166. };
  167. super.Add (scrollBar);
  168. scrollBar.Layout ();
  169. scrollBar.Position = 1;
  170. scrollBar.Orientation = Orientation.Horizontal;
  171. Assert.Equal (0, scrollBar.GetSliderPosition ());
  172. }
  173. #endregion Orientation
  174. #region Size
  175. // TODO: Add tests.
  176. #endregion Size
  177. #region Position
  178. [Fact]
  179. public void Position_Event_Cancels ()
  180. {
  181. var changingCount = 0;
  182. var changedCount = 0;
  183. var scrollBar = new ScrollBar { };
  184. scrollBar.ScrollableContentSize = 5;
  185. scrollBar.Frame = new Rectangle (0, 0, 1, 4); // Needs to be at least 4 for slider to move
  186. scrollBar.PositionChanging += (s, e) =>
  187. {
  188. if (changingCount == 0)
  189. {
  190. e.Cancel = true;
  191. }
  192. changingCount++;
  193. };
  194. scrollBar.PositionChanged += (s, e) => changedCount++;
  195. scrollBar.Position = 1;
  196. Assert.Equal (0, scrollBar.Position);
  197. Assert.Equal (1, changingCount);
  198. Assert.Equal (0, changedCount);
  199. scrollBar.Position = 1;
  200. Assert.Equal (1, scrollBar.Position);
  201. Assert.Equal (2, changingCount);
  202. Assert.Equal (1, changedCount);
  203. }
  204. #endregion Position
  205. [Fact]
  206. public void ScrollableContentSize_Cannot_Be_Negative ()
  207. {
  208. var scrollBar = new ScrollBar { Height = 10, ScrollableContentSize = -1 };
  209. Assert.Equal (0, scrollBar.ScrollableContentSize);
  210. scrollBar.ScrollableContentSize = -10;
  211. Assert.Equal (0, scrollBar.ScrollableContentSize);
  212. }
  213. [Fact]
  214. public void ScrollableContentSizeChanged_Event ()
  215. {
  216. var count = 0;
  217. var scrollBar = new ScrollBar ();
  218. scrollBar.ScrollableContentSizeChanged += (s, e) => count++;
  219. scrollBar.ScrollableContentSize = 10;
  220. Assert.Equal (10, scrollBar.ScrollableContentSize);
  221. Assert.Equal (1, count);
  222. }
  223. }