AddRemoveTests.cs 5.4 KB

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