CheckBoxTests.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace UnitTests_Parallelizable.ViewsTests;
  4. public class CheckBoxTests ()
  5. {
  6. [Theory]
  7. [InlineData ("01234", 0, 0, 0, 0)]
  8. [InlineData ("01234", 1, 0, 1, 0)]
  9. [InlineData ("01234", 0, 1, 0, 1)]
  10. [InlineData ("01234", 1, 1, 1, 1)]
  11. [InlineData ("01234", 10, 1, 10, 1)]
  12. [InlineData ("01234", 10, 3, 10, 3)]
  13. [InlineData ("0_1234", 0, 0, 0, 0)]
  14. [InlineData ("0_1234", 1, 0, 1, 0)]
  15. [InlineData ("0_1234", 0, 1, 0, 1)]
  16. [InlineData ("0_1234", 1, 1, 1, 1)]
  17. [InlineData ("0_1234", 10, 1, 10, 1)]
  18. [InlineData ("0_12你", 10, 3, 10, 3)]
  19. [InlineData ("0_12你", 0, 0, 0, 0)]
  20. [InlineData ("0_12你", 1, 0, 1, 0)]
  21. [InlineData ("0_12你", 0, 1, 0, 1)]
  22. [InlineData ("0_12你", 1, 1, 1, 1)]
  23. [InlineData ("0_12你", 10, 1, 10, 1)]
  24. public void CheckBox_AbsoluteSize_Text (string text, int width, int height, int expectedWidth, int expectedHeight)
  25. {
  26. var checkBox = new CheckBox
  27. {
  28. X = 0,
  29. Y = 0,
  30. Width = width,
  31. Height = height,
  32. Text = text
  33. };
  34. checkBox.Layout ();
  35. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size);
  36. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size);
  37. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
  38. checkBox.Dispose ();
  39. }
  40. [Theory]
  41. [InlineData (0, 0, 0, 0)]
  42. [InlineData (1, 0, 1, 0)]
  43. [InlineData (0, 1, 0, 1)]
  44. [InlineData (1, 1, 1, 1)]
  45. [InlineData (10, 1, 10, 1)]
  46. [InlineData (10, 3, 10, 3)]
  47. public void CheckBox_AbsoluteSize_DefaultText (int width, int height, int expectedWidth, int expectedHeight)
  48. {
  49. var checkBox = new CheckBox
  50. {
  51. X = 0,
  52. Y = 0,
  53. Width = width,
  54. Height = height
  55. };
  56. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Frame.Size);
  57. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.Viewport.Size);
  58. Assert.Equal (new (expectedWidth, expectedHeight), checkBox.TextFormatter.ConstrainToSize);
  59. checkBox.Dispose ();
  60. }
  61. // Test that Title and Text are the same
  62. [Fact]
  63. public void Text_Mirrors_Title ()
  64. {
  65. var view = new CheckBox ();
  66. view.Title = "Hello";
  67. Assert.Equal ("Hello", view.Title);
  68. Assert.Equal ("Hello", view.TitleTextFormatter.Text);
  69. Assert.Equal ("Hello", view.Text);
  70. Assert.Equal ($"{Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
  71. }
  72. [Fact]
  73. public void Title_Mirrors_Text ()
  74. {
  75. var view = new CheckBox ();
  76. view.Text = "Hello";
  77. Assert.Equal ("Hello", view.Text);
  78. Assert.Equal ($"{Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
  79. Assert.Equal ("Hello", view.Title);
  80. Assert.Equal ("Hello", view.TitleTextFormatter.Text);
  81. }
  82. [Fact]
  83. public void Constructors_Defaults ()
  84. {
  85. var ckb = new CheckBox ();
  86. Assert.True (ckb.Width is DimAuto);
  87. Assert.True (ckb.Height is DimAuto);
  88. ckb.Layout ();
  89. Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
  90. Assert.False (ckb.AllowCheckStateNone);
  91. Assert.Equal (string.Empty, ckb.Text);
  92. Assert.Equal ($"{Glyphs.CheckStateUnChecked} ", ckb.TextFormatter.Text);
  93. Assert.True (ckb.CanFocus);
  94. Assert.Equal (new (0, 0, 2, 1), ckb.Frame);
  95. ckb = new () { Text = "Test", CheckedState = CheckState.Checked };
  96. Assert.True (ckb.Width is DimAuto);
  97. Assert.True (ckb.Height is DimAuto);
  98. ckb.Layout ();
  99. Assert.Equal (CheckState.Checked, ckb.CheckedState);
  100. Assert.False (ckb.AllowCheckStateNone);
  101. Assert.Equal ("Test", ckb.Text);
  102. Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
  103. Assert.True (ckb.CanFocus);
  104. Assert.Equal (new (0, 0, 6, 1), ckb.Frame);
  105. ckb = new () { Text = "Test", X = 1, Y = 2 };
  106. Assert.True (ckb.Width is DimAuto);
  107. Assert.True (ckb.Height is DimAuto);
  108. ckb.Layout ();
  109. Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
  110. Assert.False (ckb.AllowCheckStateNone);
  111. Assert.Equal ("Test", ckb.Text);
  112. Assert.Equal ($"{Glyphs.CheckStateUnChecked} Test", ckb.TextFormatter.Text);
  113. Assert.True (ckb.CanFocus);
  114. Assert.Equal (new (1, 2, 6, 1), ckb.Frame);
  115. ckb = new () { Text = "Test", X = 3, Y = 4, CheckedState = CheckState.Checked };
  116. Assert.True (ckb.Width is DimAuto);
  117. Assert.True (ckb.Height is DimAuto);
  118. ckb.Layout ();
  119. Assert.Equal (CheckState.Checked, ckb.CheckedState);
  120. Assert.False (ckb.AllowCheckStateNone);
  121. Assert.Equal ("Test", ckb.Text);
  122. Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
  123. Assert.True (ckb.CanFocus);
  124. Assert.Equal (new (3, 4, 6, 1), ckb.Frame);
  125. }
  126. [Fact]
  127. public void Accept_Cancel_Event_OnAccept_Returns_True ()
  128. {
  129. var ckb = new CheckBox ();
  130. var acceptInvoked = false;
  131. ckb.Accepting += ViewOnAccept;
  132. bool? ret = ckb.InvokeCommand (Command.Accept);
  133. Assert.True (ret);
  134. Assert.True (acceptInvoked);
  135. return;
  136. void ViewOnAccept (object sender, CommandEventArgs e)
  137. {
  138. acceptInvoked = true;
  139. e.Handled = true;
  140. }
  141. }
  142. [Fact]
  143. public void AllowCheckStateNone_Get_Set ()
  144. {
  145. var checkBox = new CheckBox { Text = "Check this out 你" };
  146. checkBox.HasFocus = true;
  147. Assert.True (checkBox.HasFocus);
  148. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  149. // Select with keyboard
  150. Assert.True (checkBox.NewKeyDownEvent (Key.Space));
  151. Assert.Equal (CheckState.Checked, checkBox.CheckedState);
  152. // Select with mouse
  153. Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
  154. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  155. checkBox.AllowCheckStateNone = true;
  156. Assert.True (checkBox.NewKeyDownEvent (Key.Space));
  157. Assert.Equal (CheckState.None, checkBox.CheckedState);
  158. checkBox.AllowCheckStateNone = false;
  159. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  160. }
  161. [Fact]
  162. public void Mouse_Click_Selects ()
  163. {
  164. var checkBox = new CheckBox { Text = "_Checkbox" };
  165. Assert.True (checkBox.CanFocus);
  166. var checkedStateChangingCount = 0;
  167. checkBox.CheckedStateChanging += (s, e) => checkedStateChangingCount++;
  168. var selectCount = 0;
  169. checkBox.Selecting += (s, e) => selectCount++;
  170. var acceptCount = 0;
  171. checkBox.Accepting += (s, e) => acceptCount++;
  172. checkBox.HasFocus = true;
  173. Assert.True (checkBox.HasFocus);
  174. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  175. Assert.Equal (0, checkedStateChangingCount);
  176. Assert.Equal (0, selectCount);
  177. Assert.Equal (0, acceptCount);
  178. Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
  179. Assert.Equal (CheckState.Checked, checkBox.CheckedState);
  180. Assert.Equal (1, checkedStateChangingCount);
  181. Assert.Equal (1, selectCount);
  182. Assert.Equal (0, acceptCount);
  183. Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
  184. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  185. Assert.Equal (2, checkedStateChangingCount);
  186. Assert.Equal (2, selectCount);
  187. Assert.Equal (0, acceptCount);
  188. checkBox.AllowCheckStateNone = true;
  189. Assert.True (checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked }));
  190. Assert.Equal (CheckState.None, checkBox.CheckedState);
  191. Assert.Equal (3, checkedStateChangingCount);
  192. Assert.Equal (3, selectCount);
  193. Assert.Equal (0, acceptCount);
  194. }
  195. [Fact]
  196. public void Mouse_DoubleClick_Accepts ()
  197. {
  198. var checkBox = new CheckBox { Text = "_Checkbox" };
  199. Assert.True (checkBox.CanFocus);
  200. var checkedStateChangingCount = 0;
  201. checkBox.CheckedStateChanging += (s, e) => checkedStateChangingCount++;
  202. var selectCount = 0;
  203. checkBox.Selecting += (s, e) => selectCount++;
  204. var acceptCount = 0;
  205. checkBox.Accepting += (s, e) =>
  206. {
  207. acceptCount++;
  208. e.Handled = true;
  209. };
  210. checkBox.HasFocus = true;
  211. Assert.True (checkBox.HasFocus);
  212. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  213. Assert.Equal (0, checkedStateChangingCount);
  214. Assert.Equal (0, selectCount);
  215. Assert.Equal (0, acceptCount);
  216. checkBox.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked });
  217. Assert.Equal (CheckState.UnChecked, checkBox.CheckedState);
  218. Assert.Equal (0, checkedStateChangingCount);
  219. Assert.Equal (0, selectCount);
  220. Assert.Equal (1, acceptCount);
  221. }
  222. }