ComboBoxTests.cs 7.5 KB

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