ComboBoxTests.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Xunit;
  5. using Xunit.Abstractions;
  6. namespace Terminal.Gui.Views {
  7. public class ComboBoxTests {
  8. ITestOutputHelper output;
  9. public ComboBoxTests (ITestOutputHelper output)
  10. {
  11. this.output = output;
  12. }
  13. [Fact]
  14. public void Constructors_Defaults ()
  15. {
  16. var cb = new ComboBox ();
  17. Assert.Equal (string.Empty, cb.Text);
  18. Assert.Null (cb.Source);
  19. Assert.False (cb.AutoSize);
  20. Assert.Equal (new Rect (0, 0, 0, 2), cb.Frame);
  21. cb = new ComboBox ("Test");
  22. Assert.Equal ("Test", cb.Text);
  23. Assert.Null (cb.Source);
  24. Assert.False (cb.AutoSize);
  25. Assert.Equal (new Rect (0, 0, 0, 2), cb.Frame);
  26. cb = new ComboBox (new Rect (1, 2, 10, 20), new List<string> () { "One", "Two", "Three" });
  27. Assert.Equal (string.Empty, cb.Text);
  28. Assert.NotNull (cb.Source);
  29. Assert.False (cb.AutoSize);
  30. Assert.Equal (new Rect (1, 2, 10, 20), cb.Frame);
  31. }
  32. [Fact]
  33. [AutoInitShutdown]
  34. public void EnsureKeyEventsDoNotCauseExceptions ()
  35. {
  36. var comboBox = new ComboBox ("0");
  37. var source = Enumerable.Range (0, 15).Select (x => x.ToString ()).ToArray ();
  38. comboBox.SetSource (source);
  39. Application.Top.Add (comboBox);
  40. foreach (var key in (Key [])Enum.GetValues (typeof (Key))) {
  41. Assert.Null (Record.Exception (() => comboBox.ProcessKey (new KeyEvent (key, new KeyModifiers ()))));
  42. }
  43. }
  44. [Fact]
  45. [AutoInitShutdown]
  46. public void KeyBindings_Command ()
  47. {
  48. List<string> source = new List<string> () { "One", "Two", "Three" };
  49. ComboBox cb = new ComboBox () { Width = 10 };
  50. cb.SetSource (source);
  51. Application.Top.Add (cb);
  52. Application.Top.FocusFirst ();
  53. Assert.Equal (-1, cb.SelectedItem);
  54. Assert.Equal (string.Empty, cb.Text);
  55. var opened = false;
  56. cb.OpenSelectedItem += (_) => opened = true;
  57. Assert.True (cb.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
  58. Assert.False (opened);
  59. cb.Text = "Tw";
  60. Assert.True (cb.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
  61. Assert.True (opened);
  62. Assert.Equal ("Two", cb.Text);
  63. cb.SetSource (null);
  64. Assert.False (cb.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
  65. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ()))); // with no source also expand empty
  66. Assert.True (cb.IsShow);
  67. Assert.Equal (-1, cb.SelectedItem);
  68. cb.SetSource (source);
  69. cb.Text = "";
  70. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ()))); // collapse
  71. Assert.False (cb.IsShow);
  72. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ()))); // expand
  73. Assert.True (cb.IsShow);
  74. cb.Collapse ();
  75. Assert.False (cb.IsShow);
  76. Assert.True (cb.HasFocus);
  77. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()))); // losing focus
  78. Assert.False (cb.IsShow);
  79. Assert.False (cb.HasFocus);
  80. Application.Top.FocusFirst (); // Gets focus again
  81. Assert.False (cb.IsShow);
  82. Assert.True (cb.HasFocus);
  83. cb.Expand ();
  84. Assert.True (cb.IsShow);
  85. Assert.Equal (0, cb.SelectedItem);
  86. Assert.Equal ("One", cb.Text);
  87. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  88. Assert.True (cb.IsShow);
  89. Assert.Equal (1, cb.SelectedItem);
  90. Assert.Equal ("Two", cb.Text);
  91. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  92. Assert.True (cb.IsShow);
  93. Assert.Equal (2, cb.SelectedItem);
  94. Assert.Equal ("Three", cb.Text);
  95. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  96. Assert.True (cb.IsShow);
  97. Assert.Equal (2, cb.SelectedItem);
  98. Assert.Equal ("Three", cb.Text);
  99. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  100. Assert.True (cb.IsShow);
  101. Assert.Equal (1, cb.SelectedItem);
  102. Assert.Equal ("Two", cb.Text);
  103. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  104. Assert.True (cb.IsShow);
  105. Assert.Equal (0, cb.SelectedItem);
  106. Assert.Equal ("One", cb.Text);
  107. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  108. Assert.True (cb.IsShow);
  109. Assert.Equal (0, cb.SelectedItem);
  110. Assert.Equal ("One", cb.Text);
  111. Application.Begin (Application.Top);
  112. GraphViewTests.AssertDriverContentsWithFrameAre (@"
  113. One ▼
  114. One
  115. ", output);
  116. Assert.True (cb.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  117. Assert.True (cb.IsShow);
  118. Assert.Equal (1, cb.SelectedItem);
  119. Assert.Equal ("Two", cb.Text);
  120. Application.Begin (Application.Top);
  121. GraphViewTests.AssertDriverContentsWithFrameAre (@"
  122. Two ▼
  123. Two
  124. ", output);
  125. Assert.True (cb.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
  126. Assert.True (cb.IsShow);
  127. Assert.Equal (2, cb.SelectedItem);
  128. Assert.Equal ("Three", cb.Text);
  129. Application.Begin (Application.Top);
  130. GraphViewTests.AssertDriverContentsWithFrameAre (@"
  131. Three ▼
  132. Three
  133. ", output);
  134. Assert.True (cb.ProcessKey (new KeyEvent (Key.PageUp, new KeyModifiers ())));
  135. Assert.True (cb.IsShow);
  136. Assert.Equal (1, cb.SelectedItem);
  137. Assert.Equal ("Two", cb.Text);
  138. Assert.True (cb.ProcessKey (new KeyEvent (Key.PageUp, new KeyModifiers ())));
  139. Assert.True (cb.IsShow);
  140. Assert.Equal (0, cb.SelectedItem);
  141. Assert.Equal ("One", cb.Text);
  142. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ())));
  143. Assert.False (cb.IsShow);
  144. Assert.Equal (0, cb.SelectedItem);
  145. Assert.Equal ("One", cb.Text);
  146. Assert.True (cb.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  147. Assert.False (cb.IsShow);
  148. Assert.Equal (0, cb.SelectedItem);
  149. Assert.Equal ("One", cb.Text);
  150. Assert.True (cb.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  151. Assert.False (cb.IsShow);
  152. Assert.Equal (0, cb.SelectedItem);
  153. Assert.Equal ("One", cb.Text);
  154. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ())));
  155. Assert.True (cb.IsShow);
  156. Assert.Equal (0, cb.SelectedItem);
  157. Assert.Equal ("One", cb.Text);
  158. Assert.True (cb.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  159. Assert.True (cb.IsShow);
  160. Assert.Equal (2, cb.SelectedItem);
  161. Assert.Equal ("Three", cb.Text);
  162. Assert.True (cb.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  163. Assert.True (cb.IsShow);
  164. Assert.Equal (0, cb.SelectedItem);
  165. Assert.Equal ("One", cb.Text);
  166. Assert.True (cb.ProcessKey (new KeyEvent (Key.Esc, new KeyModifiers ())));
  167. Assert.False (cb.IsShow);
  168. Assert.Equal (0, cb.SelectedItem);
  169. Assert.Equal ("", cb.Text);
  170. Assert.True (cb.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ()))); // losing focus
  171. Assert.False (cb.HasFocus);
  172. Assert.False (cb.IsShow);
  173. Assert.Equal (0, cb.SelectedItem);
  174. Assert.Equal ("One", cb.Text);
  175. Application.Top.FocusFirst (); // Gets focus again
  176. Assert.True (cb.HasFocus);
  177. Assert.False (cb.IsShow);
  178. Assert.Equal (0, cb.SelectedItem);
  179. Assert.Equal ("One", cb.Text);
  180. Assert.True (cb.ProcessKey (new KeyEvent (Key.U | Key.CtrlMask, new KeyModifiers ())));
  181. Assert.True (cb.HasFocus);
  182. Assert.True (cb.IsShow);
  183. Assert.Equal (0, cb.SelectedItem);
  184. Assert.Equal ("", cb.Text);
  185. Assert.Equal (3, cb.Source.Count);
  186. }
  187. [Fact]
  188. [AutoInitShutdown]
  189. public void Source_Equal_Null_Or_Count_Equal_Zero_Sets_SelectedItem_Equal_To_Minus_One ()
  190. {
  191. var cb = new ComboBox ();
  192. Application.Top.Add (cb);
  193. Application.Top.FocusFirst ();
  194. Assert.Null (cb.Source);
  195. Assert.Equal (-1, cb.SelectedItem);
  196. var source = new List<string> ();
  197. cb.SetSource (source);
  198. Assert.NotNull (cb.Source);
  199. Assert.Equal (0, cb.Source.Count);
  200. Assert.Equal (-1, cb.SelectedItem);
  201. source.Add ("One");
  202. Assert.Equal (1, cb.Source.Count);
  203. Assert.Equal (-1, cb.SelectedItem);
  204. Assert.True (cb.ProcessKey (new KeyEvent (Key.F4, new KeyModifiers ())));
  205. Assert.True (cb.IsShow);
  206. Assert.Equal (0, cb.SelectedItem);
  207. Assert.Equal ("One", cb.Text);
  208. source.Add ("Two");
  209. Assert.Equal (0, cb.SelectedItem);
  210. Assert.Equal ("One", cb.Text);
  211. cb.Text = "T";
  212. Assert.True (cb.IsShow);
  213. Assert.Equal (0, cb.SelectedItem);
  214. Assert.Equal ("T", cb.Text);
  215. Assert.True (cb.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
  216. Assert.False (cb.IsShow);
  217. Assert.Equal (2, cb.Source.Count);
  218. Assert.Equal (1, cb.SelectedItem);
  219. Assert.Equal ("Two", cb.Text);
  220. Assert.True (cb.ProcessKey (new KeyEvent (Key.Esc, new KeyModifiers ())));
  221. Assert.False (cb.IsShow);
  222. Assert.Equal (1, cb.SelectedItem); // retains last accept selected item
  223. Assert.Equal ("", cb.Text); // clear text
  224. cb.SetSource (new List<string> ());
  225. Assert.Equal (0, cb.Source.Count);
  226. Assert.Equal (-1, cb.SelectedItem);
  227. Assert.Equal ("", cb.Text);
  228. }
  229. }
  230. }