RadioGroupTests.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using Xunit;
  2. using Xunit.Abstractions;
  3. namespace Terminal.Gui.ViewsTests;
  4. public class RadioGroupTests {
  5. readonly ITestOutputHelper _output;
  6. public RadioGroupTests (ITestOutputHelper output)
  7. {
  8. this._output = output;
  9. }
  10. [Fact]
  11. public void Constructors_Defaults ()
  12. {
  13. var rg = new RadioGroup ();
  14. Assert.True (rg.CanFocus);
  15. Assert.Empty (rg.RadioLabels);
  16. Assert.Null (rg.X);
  17. Assert.Null (rg.Y);
  18. Assert.Null (rg.Width);
  19. Assert.Null (rg.Height);
  20. Assert.Equal (Rect.Empty, rg.Frame);
  21. Assert.Equal (0, rg.SelectedItem);
  22. rg = new RadioGroup (new string [] { "Test" });
  23. Assert.True (rg.CanFocus);
  24. Assert.Single (rg.RadioLabels);
  25. Assert.Null (rg.X);
  26. Assert.Null (rg.Y);
  27. Assert.Null (rg.Width);
  28. Assert.Null (rg.Height);
  29. Assert.Equal (new Rect (0, 0, 0, 0), rg.Frame);
  30. Assert.Equal (0, rg.SelectedItem);
  31. rg = new RadioGroup (new Rect (1, 2, 20, 5), new string [] { "Test" });
  32. Assert.True (rg.CanFocus);
  33. Assert.Single (rg.RadioLabels);
  34. Assert.Equal (LayoutStyle.Absolute, rg.LayoutStyle);
  35. Assert.Null (rg.X);
  36. Assert.Null (rg.Y);
  37. Assert.Null (rg.Width);
  38. Assert.Null (rg.Height);
  39. Assert.Equal (new Rect (1, 2, 20, 5), rg.Frame);
  40. Assert.Equal (0, rg.SelectedItem);
  41. rg = new RadioGroup (1, 2, new string [] { "Test" });
  42. Assert.True (rg.CanFocus);
  43. Assert.Single (rg.RadioLabels);
  44. Assert.Equal (LayoutStyle.Absolute, rg.LayoutStyle);
  45. Assert.Null (rg.X);
  46. Assert.Null (rg.Y);
  47. Assert.Null (rg.Width);
  48. Assert.Null (rg.Height);
  49. Assert.Equal (new Rect (1, 2, 6, 1), rg.Frame);
  50. Assert.Equal (0, rg.SelectedItem);
  51. }
  52. [Fact]
  53. public void Initialize_SelectedItem_With_Minus_One ()
  54. {
  55. var rg = new RadioGroup (new string [] { "Test" }, -1);
  56. Assert.Equal (-1, rg.SelectedItem);
  57. Assert.True (rg.NewKeyDownEvent (new (KeyCode.Space)));
  58. Assert.Equal (0, rg.SelectedItem);
  59. }
  60. [Fact, AutoInitShutdown]
  61. public void DisplayMode_Width_Height_Vertical_Horizontal_Space ()
  62. {
  63. var rg = new RadioGroup (new string [] { "Test", "New Test 你" });
  64. var win = new Window () {
  65. Width = Dim.Fill (),
  66. Height = Dim.Fill ()
  67. };
  68. win.Add (rg);
  69. Application.Top.Add (win);
  70. Application.Begin (Application.Top);
  71. ((FakeDriver)Application.Driver).SetBufferSize (30, 5);
  72. Assert.Equal (DisplayModeLayout.Vertical, rg.DisplayMode);
  73. Assert.Equal (2, rg.RadioLabels.Length);
  74. Assert.Equal (0, rg.X);
  75. Assert.Equal (0, rg.Y);
  76. Assert.Equal (13, rg.Frame.Width);
  77. Assert.Equal (2, rg.Frame.Height);
  78. var expected = @$"
  79. ┌────────────────────────────┐
  80. │{CM.Glyphs.Selected} Test │
  81. │{CM.Glyphs.UnSelected} New Test 你 │
  82. │ │
  83. └────────────────────────────┘
  84. ";
  85. var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  86. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  87. rg.DisplayMode = DisplayModeLayout.Horizontal;
  88. Application.Refresh ();
  89. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  90. Assert.Equal (2, rg.HorizontalSpace);
  91. Assert.Equal (0, rg.X);
  92. Assert.Equal (0, rg.Y);
  93. Assert.Equal (21, rg.Width);
  94. Assert.Equal (1, rg.Height);
  95. expected = @$"
  96. ┌────────────────────────────┐
  97. │{CM.Glyphs.Selected} Test {CM.Glyphs.UnSelected} New Test 你 │
  98. │ │
  99. │ │
  100. └────────────────────────────┘
  101. ";
  102. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  103. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  104. rg.HorizontalSpace = 4;
  105. Application.Refresh ();
  106. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  107. Assert.Equal (4, rg.HorizontalSpace);
  108. Assert.Equal (0, rg.X);
  109. Assert.Equal (0, rg.Y);
  110. Assert.Equal (23, rg.Width);
  111. Assert.Equal (1, rg.Height);
  112. expected = @$"
  113. ┌────────────────────────────┐
  114. │{CM.Glyphs.Selected} Test {CM.Glyphs.UnSelected} New Test 你 │
  115. │ │
  116. │ │
  117. └────────────────────────────┘
  118. ";
  119. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  120. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  121. }
  122. [Fact]
  123. public void SelectedItemChanged_Event ()
  124. {
  125. var previousSelectedItem = -1;
  126. var selectedItem = -1;
  127. var rg = new RadioGroup (new string [] { "Test", "New Test" });
  128. rg.SelectedItemChanged += (s, e) => {
  129. previousSelectedItem = e.PreviousSelectedItem;
  130. selectedItem = e.SelectedItem;
  131. };
  132. rg.SelectedItem = 1;
  133. Assert.Equal (0, previousSelectedItem);
  134. Assert.Equal (selectedItem, rg.SelectedItem);
  135. }
  136. [Fact]
  137. public void KeyBindings_Command ()
  138. {
  139. var rg = new RadioGroup (new string [] { "Test", "New Test" });
  140. Assert.True (rg.NewKeyDownEvent (new (KeyCode.CursorUp)));
  141. Assert.True (rg.NewKeyDownEvent (new (KeyCode.CursorDown)));
  142. Assert.True (rg.NewKeyDownEvent (new (KeyCode.Home)));
  143. Assert.True (rg.NewKeyDownEvent (new (KeyCode.End)));
  144. Assert.True (rg.NewKeyDownEvent (new (KeyCode.Space)));
  145. Assert.Equal (1, rg.SelectedItem);
  146. }
  147. [Fact]
  148. public void KeyBindings_Are_Added_Correctly ()
  149. {
  150. var rg = new RadioGroup (new string [] { "Left", "Right" });
  151. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L));
  152. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.R));
  153. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L | KeyCode.ShiftMask));
  154. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L | KeyCode.AltMask));
  155. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.R | KeyCode.ShiftMask));
  156. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.R | KeyCode.AltMask));
  157. }
  158. [Fact]
  159. public void KeyBindings_HotKeys ()
  160. {
  161. var rg = new RadioGroup (new string [] { "Left", "Right", "Cen_tered", "Justified" });
  162. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L));
  163. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L | KeyCode.ShiftMask));
  164. Assert.NotEmpty (rg.KeyBindings.GetCommands (KeyCode.L | KeyCode.AltMask));
  165. // BUGBUG: These tests only test that RG works on it's own, not if it's a subview
  166. Assert.True (rg.NewKeyDownEvent (new (KeyCode.T)));
  167. Assert.Equal (2, rg.SelectedItem);
  168. Assert.True (rg.NewKeyDownEvent (new (KeyCode.L)));
  169. Assert.Equal (0, rg.SelectedItem);
  170. Assert.True (rg.NewKeyDownEvent (new (KeyCode.J)));
  171. Assert.Equal (3, rg.SelectedItem);
  172. Assert.True (rg.NewKeyDownEvent (new (KeyCode.R)));
  173. Assert.Equal (1, rg.SelectedItem);
  174. Assert.True (rg.NewKeyDownEvent (new (KeyCode.T | KeyCode.AltMask)));
  175. Assert.Equal (2, rg.SelectedItem);
  176. Assert.True (rg.NewKeyDownEvent (new (KeyCode.L | KeyCode.AltMask)));
  177. Assert.Equal (0, rg.SelectedItem);
  178. Assert.True (rg.NewKeyDownEvent (new (KeyCode.J | KeyCode.AltMask)));
  179. Assert.Equal (3, rg.SelectedItem);
  180. Assert.True (rg.NewKeyDownEvent (new (KeyCode.R | KeyCode.AltMask)));
  181. Assert.Equal (1, rg.SelectedItem);
  182. var superView = new View ();
  183. superView.Add (rg);
  184. Assert.True (superView.NewKeyDownEvent (new (KeyCode.T)));
  185. Assert.Equal (2, rg.SelectedItem);
  186. Assert.True (superView.NewKeyDownEvent (new (KeyCode.L)));
  187. Assert.Equal (0, rg.SelectedItem);
  188. Assert.True (superView.NewKeyDownEvent (new (KeyCode.J)));
  189. Assert.Equal (3, rg.SelectedItem);
  190. Assert.True (superView.NewKeyDownEvent (new (KeyCode.R)));
  191. Assert.Equal (1, rg.SelectedItem);
  192. Assert.True (superView.NewKeyDownEvent (new (KeyCode.T | KeyCode.AltMask)));
  193. Assert.Equal (2, rg.SelectedItem);
  194. Assert.True (superView.NewKeyDownEvent (new (KeyCode.L | KeyCode.AltMask)));
  195. Assert.Equal (0, rg.SelectedItem);
  196. Assert.True (superView.NewKeyDownEvent (new (KeyCode.J | KeyCode.AltMask)));
  197. Assert.Equal (3, rg.SelectedItem);
  198. Assert.True (superView.NewKeyDownEvent (new (KeyCode.R | KeyCode.AltMask)));
  199. Assert.Equal (1, rg.SelectedItem);
  200. }
  201. }