RadioGroupTests.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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.ViewTests {
  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, 7, 1), 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, 7, 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. Title = "Test Demo 你"
  73. };
  74. win.Add (rg);
  75. Application.Top.Add (win);
  76. Application.Begin (Application.Top);
  77. ((FakeDriver)Application.Driver).SetBufferSize (30, 5);
  78. Assert.Equal (DisplayModeLayout.Vertical, rg.DisplayMode);
  79. Assert.Equal (2, rg.RadioLabels.Length);
  80. Assert.Equal (0, rg.X);
  81. Assert.Equal (0, rg.Y);
  82. Assert.Equal (14, rg.Width);
  83. Assert.Equal (2, rg.Height);
  84. var expected = @"
  85. ┌ Test Demo 你 ──────────────┐
  86. │● Test │
  87. │◌ New Test 你 │
  88. │ │
  89. └────────────────────────────┘
  90. ";
  91. var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  92. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  93. rg.DisplayMode = DisplayModeLayout.Horizontal;
  94. Application.Refresh ();
  95. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  96. Assert.Equal (2, rg.HorizontalSpace);
  97. Assert.Equal (0, rg.X);
  98. Assert.Equal (0, rg.Y);
  99. Assert.Equal (21, rg.Width);
  100. Assert.Equal (1, rg.Height);
  101. expected = @"
  102. ┌ Test Demo 你 ──────────────┐
  103. │● Test ◌ New Test 你 │
  104. │ │
  105. │ │
  106. └────────────────────────────┘
  107. ";
  108. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  109. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  110. rg.HorizontalSpace = 4;
  111. Application.Refresh ();
  112. Assert.Equal (DisplayModeLayout.Horizontal, rg.DisplayMode);
  113. Assert.Equal (4, rg.HorizontalSpace);
  114. Assert.Equal (0, rg.X);
  115. Assert.Equal (0, rg.Y);
  116. Assert.Equal (23, rg.Width);
  117. Assert.Equal (1, rg.Height);
  118. expected = @"
  119. ┌ Test Demo 你 ──────────────┐
  120. │● Test ◌ New Test 你 │
  121. │ │
  122. │ │
  123. └────────────────────────────┘
  124. ";
  125. pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  126. Assert.Equal (new Rect (0, 0, 30, 5), pos);
  127. }
  128. [Fact]
  129. public void SelectedItemChanged_Event ()
  130. {
  131. var previousSelectedItem = -1;
  132. var selectedItem = -1;
  133. var rg = new RadioGroup (new NStack.ustring [] { "Test", "New Test" });
  134. rg.SelectedItemChanged += (e) => {
  135. previousSelectedItem = e.PreviousSelectedItem;
  136. selectedItem = e.SelectedItem;
  137. };
  138. rg.SelectedItem = 1;
  139. Assert.Equal (0, previousSelectedItem);
  140. Assert.Equal (selectedItem, rg.SelectedItem);
  141. }
  142. [Fact]
  143. public void KeyBindings_Command ()
  144. {
  145. var rg = new RadioGroup (new NStack.ustring [] { "Test", "New Test" });
  146. Assert.True (rg.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  147. Assert.True (rg.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  148. Assert.True (rg.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
  149. Assert.True (rg.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
  150. Assert.True (rg.ProcessKey (new KeyEvent (Key.Space, new KeyModifiers ())));
  151. Assert.Equal (1, rg.SelectedItem);
  152. }
  153. [Fact]
  154. public void ProcessColdKey_HotKey ()
  155. {
  156. var rg = new RadioGroup (new NStack.ustring [] { "Left", "Right", "Cen_tered", "Justified" });
  157. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.t, new KeyModifiers ())));
  158. Assert.Equal (2, rg.SelectedItem);
  159. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.L, new KeyModifiers ())));
  160. Assert.Equal (0, rg.SelectedItem);
  161. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.J, new KeyModifiers ())));
  162. Assert.Equal (3, rg.SelectedItem);
  163. Assert.True (rg.ProcessColdKey (new KeyEvent (Key.R, new KeyModifiers ())));
  164. Assert.Equal (1, rg.SelectedItem);
  165. }
  166. }
  167. }