AddRemoveTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewTests;
  3. public class AddRemoveNavigationTests (ITestOutputHelper _output) : TestsAllViews
  4. {
  5. [Fact]
  6. public void Add_Subview_Gets_Focus ()
  7. {
  8. View top = new View ()
  9. {
  10. Id = "top",
  11. CanFocus = true
  12. };
  13. top.SetFocus ();
  14. Assert.True (top.HasFocus);
  15. int nEnter = 0;
  16. View subView = new View ()
  17. {
  18. Id = "subView",
  19. CanFocus = true
  20. };
  21. subView.HasFocusChanging += (s, e) => nEnter++;
  22. top.Add (subView);
  23. Assert.True (top.HasFocus);
  24. Assert.Equal (subView, top.Focused);
  25. Assert.True (subView.HasFocus);
  26. Assert.Equal (1, nEnter);
  27. }
  28. [Fact]
  29. public void Add_Subview_Deepest_Gets_Focus ()
  30. {
  31. View top = new View ()
  32. {
  33. Id = "top",
  34. CanFocus = true
  35. };
  36. top.SetFocus ();
  37. Assert.True (top.HasFocus);
  38. View subView = new View ()
  39. {
  40. Id = "subView",
  41. CanFocus = true
  42. };
  43. View subSubView = new View ()
  44. {
  45. Id = "subSubView",
  46. CanFocus = true
  47. };
  48. subView.Add (subSubView);
  49. top.Add (subView);
  50. Assert.True (top.HasFocus);
  51. Assert.Equal (subView, top.Focused);
  52. Assert.True (subView.HasFocus);
  53. Assert.True (subSubView.HasFocus);
  54. }
  55. [Fact]
  56. public void Remove_Focused_Subview_Keeps_Focus_And_SubView_Looses_Focus ()
  57. {
  58. View top = new View ()
  59. {
  60. Id = "top",
  61. CanFocus = true
  62. };
  63. int nLeave = 0;
  64. View subView = new View ()
  65. {
  66. Id = "subView",
  67. CanFocus = true
  68. };
  69. subView.HasFocusChanged += (s, e) => nLeave++;
  70. top.Add (subView);
  71. top.SetFocus ();
  72. Assert.True (top.HasFocus);
  73. Assert.Equal (subView, top.Focused);
  74. Assert.True (subView.HasFocus);
  75. top.Remove (subView);
  76. Assert.True (top.HasFocus);
  77. Assert.Equal (null, top.Focused);
  78. Assert.False (subView.HasFocus);
  79. Assert.Equal (1, nLeave);
  80. }
  81. [Fact]
  82. public void Remove_Focused_Subview_Keeps_Focus_And_SubView_Looses_Focus_And_Next_Gets_Focus ()
  83. {
  84. View top = new View ()
  85. {
  86. Id = "top",
  87. CanFocus = true
  88. };
  89. int nLeave1 = 0;
  90. View subView1 = new View ()
  91. {
  92. Id = "subView1",
  93. CanFocus = true
  94. };
  95. subView1.HasFocusChanged += (s, e) => nLeave1++;
  96. View subView2 = new View ()
  97. {
  98. Id = "subView2",
  99. CanFocus = true
  100. };
  101. top.Add (subView1, subView2);
  102. top.SetFocus ();
  103. Assert.True (top.HasFocus);
  104. Assert.Equal (subView1, top.Focused);
  105. Assert.True (subView1.HasFocus);
  106. Assert.False (subView2.HasFocus);
  107. top.Remove (subView1);
  108. Assert.True (top.HasFocus);
  109. Assert.True (subView2.HasFocus);
  110. Assert.Equal (subView2, top.Focused);
  111. Assert.False (subView1.HasFocus);
  112. Assert.Equal (1, nLeave1);
  113. }
  114. }