CursorTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace Terminal.Gui.ApplicationTests;
  4. public class CursorTests
  5. {
  6. private readonly ITestOutputHelper _output;
  7. public CursorTests (ITestOutputHelper output)
  8. {
  9. _output = output;
  10. ConsoleDriver.RunningUnitTests = true;
  11. }
  12. private class TestView : View
  13. {
  14. public Point? TestLocation { get; set; }
  15. /// <inheritdoc />
  16. public override Point? PositionCursor ()
  17. {
  18. if (TestLocation.HasValue && HasFocus)
  19. {
  20. Driver.SetCursorVisibility (CursorVisibility.Default);
  21. }
  22. return TestLocation;
  23. }
  24. }
  25. [Fact]
  26. [SetupFakeDriver]
  27. public void PositionCursor_No_Focus_Returns_False ()
  28. {
  29. Application.Navigation = new ();
  30. Application.Navigation.SetFocused (null);
  31. Assert.False (Application.PositionCursor ());
  32. TestView view = new ()
  33. {
  34. CanFocus = false,
  35. Width = 1,
  36. Height = 1,
  37. };
  38. view.TestLocation = new Point (0, 0);
  39. Assert.False (Application.PositionCursor ());
  40. }
  41. [Fact]
  42. [SetupFakeDriver]
  43. public void PositionCursor_No_Position_Returns_False ()
  44. {
  45. Application.Navigation = new ();
  46. TestView view = new ()
  47. {
  48. CanFocus = false,
  49. Width = 1,
  50. Height = 1,
  51. };
  52. view.CanFocus = true;
  53. view.SetFocus ();
  54. Assert.False (Application.PositionCursor ());
  55. }
  56. [Fact]
  57. [SetupFakeDriver]
  58. public void PositionCursor_No_IntersectSuperView_Returns_False ()
  59. {
  60. Application.Navigation = new ();
  61. View superView = new ()
  62. {
  63. Width = 1,
  64. Height = 1,
  65. };
  66. TestView view = new ()
  67. {
  68. CanFocus = false,
  69. X = 1,
  70. Y = 1,
  71. Width = 1,
  72. Height = 1,
  73. };
  74. superView.Add (view);
  75. view.CanFocus = true;
  76. view.SetFocus ();
  77. view.TestLocation = new Point (0, 0);
  78. Assert.False (Application.PositionCursor ());
  79. }
  80. [Fact]
  81. [SetupFakeDriver]
  82. public void PositionCursor_Position_OutSide_SuperView_Returns_False ()
  83. {
  84. Application.Navigation = new ();
  85. View superView = new ()
  86. {
  87. Width = 1,
  88. Height = 1,
  89. };
  90. TestView view = new ()
  91. {
  92. CanFocus = false,
  93. X = 0,
  94. Y = 0,
  95. Width = 2,
  96. Height = 2,
  97. };
  98. superView.Add (view);
  99. view.CanFocus = true;
  100. view.SetFocus ();
  101. view.TestLocation = new Point (1, 1);
  102. Assert.False (Application.PositionCursor ());
  103. }
  104. [Fact]
  105. [SetupFakeDriver]
  106. public void PositionCursor_Focused_With_Position_Returns_True ()
  107. {
  108. Application.Navigation = new ();
  109. TestView view = new ()
  110. {
  111. CanFocus = false,
  112. Width = 1,
  113. Height = 1,
  114. };
  115. view.CanFocus = true;
  116. view.SetFocus ();
  117. view.TestLocation = new Point (0, 0);
  118. Assert.True (Application.PositionCursor ());
  119. }
  120. [Fact]
  121. [SetupFakeDriver]
  122. public void PositionCursor_Defaults_Invisible ()
  123. {
  124. Application.Navigation = new ();
  125. View view = new ()
  126. {
  127. CanFocus = true,
  128. Width = 1,
  129. Height = 1,
  130. };
  131. view.SetFocus ();
  132. Assert.True (view.HasFocus);
  133. Assert.False (Application.PositionCursor ());
  134. if (Application.Driver?.GetCursorVisibility (out CursorVisibility cursor) ?? false)
  135. {
  136. Assert.Equal (CursorVisibility.Invisible, cursor);
  137. }
  138. }
  139. }