HasFocusTests.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace ViewBaseTests.Navigation;
  4. [Collection ("Global Test Setup")]
  5. public class HasFocusTests () : TestsAllViews
  6. {
  7. [Fact]
  8. public void HasFocus_False ()
  9. {
  10. var view = new View ()
  11. {
  12. Id = "view",
  13. CanFocus = true
  14. };
  15. view.SetFocus ();
  16. Assert.True (view.HasFocus);
  17. view.HasFocus = false;
  18. Assert.False (view.HasFocus);
  19. }
  20. [Fact]
  21. public void HasFocus_False_WithSuperView_Does_Not_Change_SuperView ()
  22. {
  23. var view = new View ()
  24. {
  25. Id = "view",
  26. CanFocus = true
  27. };
  28. var subview = new View ()
  29. {
  30. Id = "subview",
  31. CanFocus = true
  32. };
  33. view.Add (subview);
  34. view.SetFocus ();
  35. Assert.True (view.HasFocus);
  36. Assert.True (subview.HasFocus);
  37. subview.HasFocus = false;
  38. Assert.False (subview.HasFocus);
  39. Assert.True (view.HasFocus);
  40. }
  41. [Fact]
  42. public void HasFocus_False_WithSubView_Leaves_All ()
  43. {
  44. var view = new View ()
  45. {
  46. Id = "view",
  47. CanFocus = true
  48. };
  49. var subview = new View ()
  50. {
  51. Id = "subview",
  52. CanFocus = true
  53. };
  54. view.Add (subview);
  55. view.SetFocus ();
  56. Assert.True (view.HasFocus);
  57. Assert.True (subview.HasFocus);
  58. Assert.Equal (subview, view.Focused);
  59. view.HasFocus = false;
  60. Assert.Null (view.Focused);
  61. Assert.False (view.HasFocus);
  62. Assert.False (subview.HasFocus);
  63. }
  64. [Fact]
  65. public void Enabled_False_Sets_HasFocus_To_False ()
  66. {
  67. var wasClicked = false;
  68. var view = new Button { Text = "Click Me" };
  69. view.Accepting += (s, e) => wasClicked = !wasClicked;
  70. view.NewKeyDownEvent (Key.Space);
  71. Assert.True (wasClicked);
  72. view.NewMouseEvent (new () { Flags = MouseFlags.Button1Clicked });
  73. Assert.False (wasClicked);
  74. Assert.True (view.Enabled);
  75. Assert.True (view.CanFocus);
  76. Assert.True (view.HasFocus);
  77. view.Enabled = false;
  78. view.NewKeyDownEvent (Key.Space);
  79. Assert.False (wasClicked);
  80. view.NewMouseEvent (new () { Flags = MouseFlags.Button1Clicked });
  81. Assert.False (wasClicked);
  82. Assert.False (view.Enabled);
  83. Assert.True (view.CanFocus);
  84. Assert.False (view.HasFocus);
  85. view.SetFocus ();
  86. Assert.False (view.HasFocus);
  87. }
  88. [Fact]
  89. public void HasFocus_False_CompoundSubView_Leaves_All ()
  90. {
  91. var view = new View ()
  92. {
  93. Id = "view",
  94. CanFocus = true
  95. };
  96. var subView = new View ()
  97. {
  98. Id = "subView",
  99. CanFocus = true
  100. };
  101. var subViewSubView1 = new View ()
  102. {
  103. Id = "subViewSubView1",
  104. CanFocus = false
  105. };
  106. var subViewSubView2 = new View ()
  107. {
  108. Id = "subViewSubView2",
  109. CanFocus = true
  110. };
  111. var subViewSubView3 = new View ()
  112. {
  113. Id = "subViewSubView3",
  114. CanFocus = false
  115. };
  116. subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
  117. view.Add (subView);
  118. view.SetFocus ();
  119. Assert.True (view.HasFocus);
  120. Assert.True (subView.HasFocus);
  121. Assert.False (subViewSubView1.HasFocus);
  122. Assert.True (subViewSubView2.HasFocus);
  123. Assert.False (subViewSubView3.HasFocus);
  124. view.HasFocus = false;
  125. Assert.False (view.HasFocus);
  126. Assert.False (subView.HasFocus);
  127. Assert.False (subViewSubView1.HasFocus);
  128. Assert.False (subViewSubView2.HasFocus);
  129. Assert.False (subViewSubView3.HasFocus);
  130. }
  131. [Fact]
  132. public void HasFocus_False_SubView_Raises_HasFocusChanged ()
  133. {
  134. var top = new View
  135. {
  136. Id = "top",
  137. CanFocus = true
  138. };
  139. var subView1 = new View
  140. {
  141. Id = "subView1",
  142. CanFocus = true
  143. };
  144. var subView2 = new View
  145. {
  146. Id = "subView2",
  147. CanFocus = true
  148. };
  149. top.Add (subView1, subView2);
  150. var subView1HasFocusChangedTrueCount = 0;
  151. var subView1HasFocusChangedFalseCount = 0;
  152. subView1.HasFocusChanged += (s, e) =>
  153. {
  154. if (e.NewValue)
  155. {
  156. subView1HasFocusChangedTrueCount++;
  157. }
  158. else
  159. {
  160. subView1HasFocusChangedFalseCount++;
  161. }
  162. };
  163. var subView2HasFocusChangedTrueCount = 0;
  164. var subView2HasFocusChangedFalseCount = 0;
  165. subView2.HasFocusChanged += (s, e) =>
  166. {
  167. if (e.NewValue)
  168. {
  169. subView2HasFocusChangedTrueCount++;
  170. }
  171. else
  172. {
  173. subView2HasFocusChangedFalseCount++;
  174. }
  175. };
  176. top.SetFocus ();
  177. Assert.True (top.HasFocus);
  178. Assert.True (subView1.HasFocus);
  179. Assert.False (subView2.HasFocus);
  180. Assert.Equal (1, subView1HasFocusChangedTrueCount);
  181. Assert.Equal (0, subView1HasFocusChangedFalseCount);
  182. Assert.Equal (0, subView2HasFocusChangedTrueCount);
  183. Assert.Equal (0, subView2HasFocusChangedFalseCount);
  184. subView1.HasFocus = false; // this should have the same resuilt as top.AdvanceFocus (NavigationDirection.Forward, null);
  185. Assert.False (subView1.HasFocus);
  186. Assert.True (subView2.HasFocus);
  187. Assert.Equal (1, subView1HasFocusChangedTrueCount);
  188. Assert.Equal (1, subView1HasFocusChangedFalseCount);
  189. Assert.Equal (1, subView2HasFocusChangedTrueCount);
  190. Assert.Equal (0, subView2HasFocusChangedFalseCount);
  191. }
  192. }