RadioGroupTests.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. using Xunit.Abstractions;
  8. namespace Terminal.Gui.ViewsTests {
  9. public class RadioGroupTests {
  10. readonly ITestOutputHelper output;
  11. public RadioGroupTests (ITestOutputHelper output)
  12. {
  13. this.output = output;
  14. }
  15. [Fact]
  16. public void Constructors_Defaults ()
  17. {
  18. var rg = new RadioGroup ();
  19. Assert.True (rg.CanFocus);
  20. Assert.Empty (rg.RadioLabels);
  21. Assert.Null (rg.X);
  22. Assert.Null (rg.Y);
  23. Assert.Null (rg.Width);
  24. Assert.Null (rg.Height);
  25. Assert.Equal (Rect.Empty, rg.Frame);
  26. Assert.Equal (0, rg.SelectedItem);
  27. rg = new RadioGroup (new NStack.ustring [] { "Test" });
  28. Assert.True (rg.CanFocus);
  29. Assert.Single (rg.RadioLabels);
  30. Assert.Null (rg.X);
  31. Assert.Null (rg.Y);
  32. Assert.Null (rg.Width);
  33. Assert.Null (rg.Height);
  34. Assert.Equal (new Rect (0, 0, 0, 0), rg.Frame);
  35. Assert.Equal (0, rg.SelectedItem);
  36. rg = new RadioGroup (new Rect (1, 2, 20, 5), new NStack.ustring [] { "Test" });
  37. Assert.True (rg.CanFocus);
  38. Assert.Single (rg.RadioLabels);
  39. Assert.Equal (LayoutStyle.Absolute, rg.LayoutStyle);
  40. Assert.Null (rg.X);
  41. Assert.Null (rg.Y);
  42. Assert.Null (rg.Width);
  43. Assert.Null (rg.Height);
  44. Assert.Equal (new Rect (1, 2, 20, 5), rg.Frame);
  45. Assert.Equal (0, rg.SelectedItem);
  46. rg = new RadioGroup (1, 2, new NStack.ustring [] { "Test" });
  47. Assert.True (rg.CanFocus);
  48. Assert.Single (rg.RadioLabels);
  49. Assert.Equal (LayoutStyle.Absolute, rg.LayoutStyle);
  50. Assert.Null (rg.X);
  51. Assert.Null (rg.Y);
  52. Assert.Null (rg.Width);
  53. Assert.Null (rg.Height);
  54. Assert.Equal (new Rect (1, 2, 6, 1), rg.Frame);
  55. Assert.Equal (0, rg.SelectedItem);
  56. }
  57. [Fact]
  58. public void Initialize_SelectedItem_With_Minus_One ()
  59. {
  60. var rg = new RadioGroup (new NStack.ustring [] { "Test" }, -1);
  61. Assert.Equal (-1, rg.SelectedItem);
  62. Assert.True (rg.ProcessKey (new KeyEvent (Key.Space, new KeyModifiers ())));
  63. Assert.Equal (0, rg.SelectedItem);
  64. }
  65. [Fact, AutoInitShutdown]
  66. public void DisplayMode_Width_Height_Vertical_Horizontal_Space ()
  67. {
  68. var rg = new RadioGroup (new NStack.ustring [] { "Test", "New Test 你" });
  69. var win = new Window () {
  70. Width = Dim.Fill (),
  71. Height = Dim.Fill ()
  72. };
  73. win.Add (rg);
  74. Application.Top.Add (win);
  75. Application.Begin (Application.Top);
  76. ((FakeDriver)Application.Driver).SetBufferSize (30, 5);
  77. Assert.Equal (DisplayModeLayout.Vertical, rg.DisplayMode);
  78. Assert.Equal (2, rg.RadioLabels.Length);
  79. Assert.Equal (0, rg.X);
  80. Assert.Equal (0, rg.Y);
  81. Assert.Equal (13, rg.Frame.Width);
  82. Assert.Equal (2, rg.Frame.Height);
  83. var expected = @"
  84. ┌────────────────────────────┐
  85. │● Test │
  86. │◌ New Test 你 │
  87. │ │
  88. └────────────────────────────┘
  89. ";
  90. var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  91. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  92. rg.DisplayMode = DisplayModeLayout.Horizontal;
  93. Application.Refresh ();
  94. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  95. Assert.Equal (2, rg.HorizontalSpace);
  96. Assert.Equal (0, rg.X);
  97. Assert.Equal (0, rg.Y);
  98. Assert.Equal (21, rg.Width);
  99. Assert.Equal (1, rg.Height);
  100. expected = @"
  101. ┌────────────────────────────┐
  102. │● Test ◌ New Test 你 │
  103. │ │
  104. │ │
  105. └────────────────────────────┘
  106. ";
  107. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  108. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  109. rg.HorizontalSpace = 4;
  110. Application.Refresh ();
  111. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  112. Assert.Equal (4, rg.HorizontalSpace);
  113. Assert.Equal (0, rg.X);
  114. Assert.Equal (0, rg.Y);
  115. Assert.Equal (23, rg.Width);
  116. Assert.Equal (1, rg.Height);
  117. expected = @"
  118. ┌────────────────────────────┐
  119. │● Test ◌ New Test 你 │
  120. │ │
  121. │ │
  122. └────────────────────────────┘
  123. ";
  124. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  125. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  126. }
  127. [Fact]
  128. public void SelectedItemChanged_Event ()
  129. {
  130. var previousSelectedItem = -1;
  131. var selectedItem = -1;
  132. var rg = new RadioGroup (new NStack.ustring [] { "Test", "New Test" });
  133. rg.SelectedItemChanged += (s,e) => {
  134. previousSelectedItem = e.PreviousSelectedItem;
  135. selectedItem = e.SelectedItem;
  136. };
  137. rg.SelectedItem = 1;
  138. Assert.Equal (0, previousSelectedItem);
  139. Assert.Equal (selectedItem, rg.SelectedItem);
  140. }
  141. [Fact]
  142. public void KeyBindings_Command ()
  143. {
  144. var rg = new RadioGroup (new NStack.ustring [] { "Test", "New Test" });
  145. Assert.True (rg.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  146. Assert.True (rg.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  147. Assert.True (rg.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  148. Assert.True (rg.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  149. Assert.True (rg.ProcessKey (new KeyEvent (Key.Space, new KeyModifiers ())));
  150. Assert.Equal (1, rg.SelectedItem);
  151. }
  152. [Fact]
  153. public void ProcessColdKey_HotKey ()
  154. {
  155. var rg = new RadioGroup (new NStack.ustring [] { "Left", "Right", "Cen_tered", "Justified" });
  156. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.t, new KeyModifiers ())));
  157. Assert.Equal (2, rg.SelectedItem);
  158. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.L, new KeyModifiers ())));
  159. Assert.Equal (0, rg.SelectedItem);
  160. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.J, new KeyModifiers ())));
  161. Assert.Equal (3, rg.SelectedItem);
  162. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.R, new KeyModifiers ())));
  163. Assert.Equal (1, rg.SelectedItem);
  164. }
  165. }
  166. }