ScrollViewTests.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Xunit;
  7. namespace Terminal.Gui.Views {
  8. public class ScrollViewTests {
  9. [Fact]
  10. public void Constructors_Defaults ()
  11. {
  12. var sv = new ScrollView ();
  13. Assert.True (sv.CanFocus);
  14. Assert.Equal (new Rect (0, 0, 0, 0), sv.Frame);
  15. Assert.Equal (Rect.Empty, sv.Frame);
  16. Assert.Equal (0, sv.X);
  17. Assert.Equal (0, sv.Y);
  18. Assert.Equal (0, sv.Width);
  19. Assert.Equal (0, sv.Height);
  20. Assert.Equal (Point.Empty, sv.ContentOffset);
  21. Assert.Equal (Size.Empty, sv.ContentSize);
  22. Assert.True (sv.AutoHideScrollBars);
  23. Assert.True (sv.KeepContentAlwaysInViewport);
  24. sv = new ScrollView (new Rect (1, 2, 20, 10));
  25. Assert.True (sv.CanFocus);
  26. Assert.Equal (new Rect (1, 2, 20, 10), sv.Frame);
  27. Assert.Equal (1, sv.X);
  28. Assert.Equal (2, sv.Y);
  29. Assert.Equal (20, sv.Width);
  30. Assert.Equal (10, sv.Height);
  31. Assert.Equal (Point.Empty, sv.ContentOffset);
  32. Assert.Equal (Size.Empty, sv.ContentSize);
  33. Assert.True (sv.AutoHideScrollBars);
  34. Assert.True (sv.KeepContentAlwaysInViewport);
  35. }
  36. [Fact]
  37. public void Adding_Views ()
  38. {
  39. var sv = new ScrollView (new Rect (0, 0, 20, 10)) {
  40. ContentSize = new Size (30, 20)
  41. };
  42. sv.Add (new View () { Width = 10, Height = 5 },
  43. new View () { X = 12, Y = 7, Width = 10, Height = 5 });
  44. Assert.Equal (new Size (30, 20), sv.ContentSize);
  45. Assert.Equal (2, sv.Subviews [0].Subviews.Count);
  46. }
  47. [Fact]
  48. public void KeyBindings_Command ()
  49. {
  50. var sv = new ScrollView (new Rect (0, 0, 20, 10)) {
  51. ContentSize = new Size (40, 20)
  52. };
  53. sv.Add (new View () { Width = 20, Height = 5 },
  54. new View () { X = 22, Y = 7, Width = 10, Height = 5 });
  55. Assert.True (sv.KeepContentAlwaysInViewport);
  56. Assert.True (sv.AutoHideScrollBars);
  57. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  58. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  59. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  60. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  61. Assert.Equal (new Point (0, -1), sv.ContentOffset);
  62. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  63. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  64. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageUp, new KeyModifiers ())));
  65. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  66. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  67. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  68. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  69. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  70. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  71. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  72. Assert.True (sv.ProcessKey (new KeyEvent ((Key)'v' | Key.AltMask, new KeyModifiers ())));
  73. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  74. Assert.True (sv.ProcessKey (new KeyEvent (Key.V | Key.CtrlMask, new KeyModifiers ())));
  75. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  76. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
  77. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  78. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
  79. Assert.Equal (new Point (-1, -10), sv.ContentOffset);
  80. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
  81. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  82. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageUp | Key.CtrlMask, new KeyModifiers ())));
  83. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  84. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown | Key.CtrlMask, new KeyModifiers ())));
  85. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  86. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
  87. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  88. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  89. Assert.Equal (new Point (-20, 0), sv.ContentOffset);
  90. Assert.False (sv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  91. Assert.Equal (new Point (-20, 0), sv.ContentOffset);
  92. Assert.True (sv.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  93. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  94. Assert.False (sv.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  95. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  96. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home | Key.CtrlMask, new KeyModifiers ())));
  97. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  98. Assert.False (sv.ProcessKey (new KeyEvent (Key.Home | Key.CtrlMask, new KeyModifiers ())));
  99. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  100. Assert.True (sv.ProcessKey (new KeyEvent (Key.End | Key.CtrlMask, new KeyModifiers ())));
  101. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  102. Assert.False (sv.ProcessKey (new KeyEvent (Key.End | Key.CtrlMask, new KeyModifiers ())));
  103. Assert.Equal (new Point (-20, -10), sv.ContentOffset);
  104. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  105. Assert.Equal (new Point (-20, 0), sv.ContentOffset);
  106. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home | Key.CtrlMask, new KeyModifiers ())));
  107. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  108. sv.KeepContentAlwaysInViewport = false;
  109. Assert.False (sv.KeepContentAlwaysInViewport);
  110. Assert.True (sv.AutoHideScrollBars);
  111. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  112. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  113. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  114. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  115. Assert.Equal (new Point (0, -1), sv.ContentOffset);
  116. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  117. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  118. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageUp, new KeyModifiers ())));
  119. Assert.Equal (new Point (0, 0), sv.ContentOffset);
  120. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  121. Assert.Equal (new Point (0, -10), sv.ContentOffset);
  122. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  123. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  124. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  125. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  126. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  127. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  128. Assert.True (sv.ProcessKey (new KeyEvent ((Key)'v' | Key.AltMask, new KeyModifiers ())));
  129. Assert.Equal (new Point (0, -9), sv.ContentOffset);
  130. Assert.True (sv.ProcessKey (new KeyEvent (Key.V | Key.CtrlMask, new KeyModifiers ())));
  131. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  132. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
  133. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  134. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
  135. Assert.Equal (new Point (-1, -19), sv.ContentOffset);
  136. Assert.True (sv.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
  137. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  138. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageUp | Key.CtrlMask, new KeyModifiers ())));
  139. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  140. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown | Key.CtrlMask, new KeyModifiers ())));
  141. Assert.Equal (new Point (-20, -19), sv.ContentOffset);
  142. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageDown | Key.CtrlMask, new KeyModifiers ())));
  143. Assert.Equal (new Point (-39, -19), sv.ContentOffset);
  144. Assert.False (sv.ProcessKey (new KeyEvent (Key.PageDown | Key.CtrlMask, new KeyModifiers ())));
  145. Assert.Equal (new Point (-39, -19), sv.ContentOffset);
  146. Assert.False (sv.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
  147. Assert.Equal (new Point (-39, -19), sv.ContentOffset);
  148. Assert.True (sv.ProcessKey (new KeyEvent (Key.PageUp | Key.CtrlMask, new KeyModifiers ())));
  149. Assert.Equal (new Point (-19, -19), sv.ContentOffset);
  150. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  151. Assert.Equal (new Point (-19, 0), sv.ContentOffset);
  152. Assert.False (sv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  153. Assert.Equal (new Point (-19, 0), sv.ContentOffset);
  154. Assert.True (sv.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  155. Assert.Equal (new Point (-19, -19), sv.ContentOffset);
  156. Assert.False (sv.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  157. Assert.Equal (new Point (-19, -19), sv.ContentOffset);
  158. Assert.True (sv.ProcessKey (new KeyEvent (Key.Home | Key.CtrlMask, new KeyModifiers ())));
  159. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  160. Assert.False (sv.ProcessKey (new KeyEvent (Key.Home | Key.CtrlMask, new KeyModifiers ())));
  161. Assert.Equal (new Point (0, -19), sv.ContentOffset);
  162. Assert.True (sv.ProcessKey (new KeyEvent (Key.End | Key.CtrlMask, new KeyModifiers ())));
  163. Assert.Equal (new Point (-39, -19), sv.ContentOffset);
  164. Assert.False (sv.ProcessKey (new KeyEvent (Key.End | Key.CtrlMask, new KeyModifiers ())));
  165. Assert.Equal (new Point (-39, -19), sv.ContentOffset);
  166. }
  167. }
  168. }