RadioGroupTests.cs 7.5 KB

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