RestoreFocusTests.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewTests;
  3. public class RestoreFocusTests (ITestOutputHelper _output) : TestsAllViews
  4. {
  5. [Fact]
  6. public void RestoreFocus_Restores ()
  7. {
  8. var view = new View
  9. {
  10. Id = "view",
  11. CanFocus = true
  12. };
  13. var subView = new View
  14. {
  15. Id = "subView",
  16. CanFocus = true
  17. };
  18. var subViewSubView1 = new View
  19. {
  20. Id = "subViewSubView1",
  21. CanFocus = true
  22. };
  23. var subViewSubView2 = new View
  24. {
  25. Id = "subViewSubView2",
  26. CanFocus = true
  27. };
  28. var subViewSubView3 = new View
  29. {
  30. Id = "subViewSubView3",
  31. CanFocus = true
  32. };
  33. subView.Add (subViewSubView1, subViewSubView2, subViewSubView3);
  34. view.Add (subView);
  35. view.SetFocus ();
  36. Assert.True (view.HasFocus);
  37. Assert.True (subView.HasFocus);
  38. Assert.Equal (subView, view.Focused);
  39. Assert.True (subViewSubView1.HasFocus);
  40. Assert.Equal (subViewSubView1, subView.Focused);
  41. view.HasFocus = false;
  42. Assert.False (view.HasFocus);
  43. Assert.False (subView.HasFocus);
  44. Assert.False (subViewSubView1.HasFocus);
  45. Assert.False (subViewSubView2.HasFocus);
  46. Assert.False (subViewSubView3.HasFocus);
  47. view.RestoreFocus (view.TabStop);
  48. Assert.True (view.HasFocus);
  49. Assert.True (subView.HasFocus);
  50. Assert.Equal (subView, view.Focused);
  51. Assert.Equal (subViewSubView1, subView.Focused);
  52. Assert.True (subViewSubView1.HasFocus);
  53. Assert.False (subViewSubView2.HasFocus);
  54. Assert.False (subViewSubView3.HasFocus);
  55. subViewSubView2.SetFocus ();
  56. Assert.True (view.HasFocus);
  57. Assert.True (subView.HasFocus);
  58. Assert.False (subViewSubView1.HasFocus);
  59. Assert.True (subViewSubView2.HasFocus);
  60. Assert.False (subViewSubView3.HasFocus);
  61. view.HasFocus = false;
  62. Assert.False (view.HasFocus);
  63. Assert.False (subView.HasFocus);
  64. Assert.False (subViewSubView1.HasFocus);
  65. Assert.False (subViewSubView2.HasFocus);
  66. Assert.False (subViewSubView3.HasFocus);
  67. view.RestoreFocus (view.TabStop);
  68. Assert.True (subView.HasFocus);
  69. Assert.Equal (subView, view.Focused);
  70. Assert.True (subViewSubView2.HasFocus);
  71. Assert.Equal (subViewSubView2, subView.Focused);
  72. Assert.False (subViewSubView1.HasFocus);
  73. Assert.False (subViewSubView3.HasFocus);
  74. }
  75. [Fact]
  76. public void RestoreFocus_Across_TabGroup ()
  77. {
  78. var top = new View
  79. {
  80. Id = "top",
  81. CanFocus = true,
  82. TabStop = TabBehavior.TabGroup
  83. };
  84. var tabGroup1 = new View
  85. {
  86. Id = "tabGroup1",
  87. CanFocus = true,
  88. TabStop = TabBehavior.TabGroup
  89. };
  90. var tabGroup1SubView1 = new View
  91. {
  92. Id = "tabGroup1SubView1",
  93. CanFocus = true,
  94. TabStop = TabBehavior.TabStop
  95. };
  96. var tabGroup1SubView2 = new View
  97. {
  98. Id = "tabGroup1SubView2",
  99. CanFocus = true,
  100. TabStop = TabBehavior.TabStop
  101. };
  102. tabGroup1.Add (tabGroup1SubView1, tabGroup1SubView2);
  103. var tabGroup2 = new View
  104. {
  105. Id = "tabGroup2",
  106. CanFocus = true,
  107. TabStop = TabBehavior.TabGroup
  108. };
  109. var tabGroup2SubView1 = new View
  110. {
  111. Id = "tabGroup2SubView1",
  112. CanFocus = true,
  113. TabStop = TabBehavior.TabStop
  114. };
  115. var tabGroup2SubView2 = new View
  116. {
  117. Id = "tabGroup2SubView2",
  118. CanFocus = true,
  119. TabStop = TabBehavior.TabStop
  120. };
  121. tabGroup2.Add (tabGroup2SubView1, tabGroup2SubView2);
  122. top.Add (tabGroup1, tabGroup2);
  123. top.SetFocus ();
  124. Assert.True (top.HasFocus);
  125. Assert.Equal (tabGroup1, top.Focused);
  126. Assert.Equal (tabGroup1SubView1, tabGroup1.Focused);
  127. top.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup);
  128. Assert.True (top.HasFocus);
  129. Assert.Equal (tabGroup2, top.Focused);
  130. Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
  131. top.HasFocus = false;
  132. Assert.False (top.HasFocus);
  133. top.RestoreFocus (null);
  134. Assert.True (top.HasFocus);
  135. Assert.Equal (tabGroup2, top.Focused);
  136. Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
  137. top.HasFocus = false;
  138. Assert.False (top.HasFocus);
  139. top.RestoreFocus (TabBehavior.TabGroup);
  140. Assert.True (top.HasFocus);
  141. Assert.Equal (tabGroup2, top.Focused);
  142. Assert.Equal (tabGroup2SubView1, tabGroup2.Focused);
  143. }
  144. }