FindDeepestViewTests.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using UICatalog.Scenarios;
  2. using Xunit.Abstractions;
  3. namespace Terminal.Gui.ViewTests;
  4. /// <summary>
  5. /// Tests View.FindDeepestView
  6. /// </summary>
  7. /// <param name="output"></param>
  8. public class FindDeepestViewTests (ITestOutputHelper output)
  9. {
  10. // Test that FindDeepestView returns the correct view if the start view has no subviews
  11. [Theory]
  12. [InlineData (0, 0)]
  13. [InlineData (1, 1)]
  14. [InlineData (2, 2)]
  15. public void Returns_Start_If_No_SubViews (int testX, int testY)
  16. {
  17. var view = new View ()
  18. {
  19. Width = 10, Height = 10,
  20. };
  21. Assert.Same (view, View.FindDeepestView (view, testX, testY, out _, out _));
  22. }
  23. // Test that FindDeepestView returns null if the start view has no subviews and coords are outside the view
  24. [Theory]
  25. [InlineData (0, 0)]
  26. [InlineData (2, 1)]
  27. [InlineData (20, 20)]
  28. public void Returns_Null_If_No_SubViews_Coords_Outside (int testX, int testY)
  29. {
  30. var view = new View ()
  31. {
  32. X = 1, Y = 2,
  33. Width = 10, Height = 10,
  34. };
  35. Assert.Null(View.FindDeepestView (view, testX, testY, out _, out _));
  36. }
  37. // Test that FindDeepestView returns the correct view if the start view has subviews
  38. [Theory]
  39. [InlineData (0, 0, false)]
  40. [InlineData (1, 1, false)]
  41. [InlineData (9, 9, false)]
  42. [InlineData (10, 10, false)]
  43. [InlineData (6, 7, false)]
  44. [InlineData (1, 2, true)]
  45. [InlineData (5, 6, true)]
  46. public void Returns_Correct_If_SubViews (int testX, int testY, bool expectedSubViewFound)
  47. {
  48. var view = new View ()
  49. {
  50. Width = 10, Height = 10,
  51. };
  52. var subview = new View ()
  53. {
  54. X = 1, Y = 2,
  55. Width = 5, Height = 5,
  56. };
  57. view.Add (subview);
  58. var found = View.FindDeepestView (view, testX, testY, out _, out _);
  59. Assert.Equal (expectedSubViewFound, found == subview);
  60. }
  61. // Test that FindDeepestView works if the start view has positive Adornments
  62. [Theory]
  63. [InlineData (0, 0, false)]
  64. [InlineData (1, 1, false)]
  65. [InlineData (9, 9, false)]
  66. [InlineData (10, 10, false)]
  67. [InlineData (7, 8, false)]
  68. [InlineData (1, 2, false)]
  69. [InlineData (2, 3, true)]
  70. [InlineData (5, 6, true)]
  71. [InlineData (2, 3, true)]
  72. [InlineData (6, 7, true)]
  73. public void Returns_Correct_If_Start_Has_Adornments (int testX, int testY, bool expectedSubViewFound)
  74. {
  75. var view = new View ()
  76. {
  77. Width = 10, Height = 10,
  78. };
  79. view.Margin.Thickness = new Thickness (1);
  80. var subview = new View ()
  81. {
  82. X = 1, Y = 2,
  83. Width = 5, Height = 5,
  84. };
  85. view.Add (subview);
  86. var found = View.FindDeepestView (view, testX, testY, out _, out _);
  87. Assert.Equal (expectedSubViewFound, found == subview);
  88. }
  89. // Test that FindDeepestView works if the subview has positive Adornments
  90. [Theory]
  91. [InlineData (0, 0, false)]
  92. [InlineData (1, 1, false)]
  93. [InlineData (9, 9, false)]
  94. [InlineData (10, 10, false)]
  95. [InlineData (7, 8, false)]
  96. [InlineData (6, 7, false)]
  97. [InlineData (1, 2, true)]
  98. [InlineData (2, 3, true)]
  99. [InlineData (5, 6, true)]
  100. [InlineData (2, 3, true)]
  101. public void Returns_Correct_If_SubView_Has_Adornments (int testX, int testY, bool expectedSubViewFound)
  102. {
  103. var view = new View ()
  104. {
  105. Width = 10, Height = 10,
  106. };
  107. var subview = new View ()
  108. {
  109. X = 1, Y = 2,
  110. Width = 5, Height = 5,
  111. };
  112. subview.Margin.Thickness = new Thickness (1);
  113. view.Add (subview);
  114. var found = View.FindDeepestView (view, testX, testY, out _, out _);
  115. Assert.Equal (expectedSubViewFound, found == subview);
  116. }
  117. // Test that FindDeepestView works with nested subviews
  118. [Theory]
  119. [InlineData (0, 0, -1)]
  120. [InlineData (9, 9, -1)]
  121. [InlineData (10, 10, -1)]
  122. [InlineData (1, 1, 0)]
  123. [InlineData (1, 2, 0)]
  124. [InlineData (2, 2, 1)]
  125. [InlineData (3, 3, 2)]
  126. [InlineData (5, 5, 2)]
  127. public void Returns_Correct_With_NestedSubViews (int testX, int testY, int expectedSubViewFound)
  128. {
  129. var start = new View ()
  130. {
  131. Width = 10, Height = 10
  132. };
  133. int numSubViews = 3;
  134. List<View> subviews = new List<View> ();
  135. for (int i = 0; i < numSubViews; i++)
  136. {
  137. var subview = new View ()
  138. {
  139. X = 1, Y = 1,
  140. Width = 5, Height = 5,
  141. };
  142. subviews.Add (subview);
  143. if (i > 0)
  144. {
  145. subviews [i - 1].Add (subview);
  146. }
  147. }
  148. start.Add (subviews [0]);
  149. var found = View.FindDeepestView (start, testX, testY, out _, out _);
  150. Assert.Equal (expectedSubViewFound, subviews.IndexOf(found));
  151. }
  152. }