ScrollViewTests.cs 9.4 KB

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