CursorTests.cs 3.7 KB

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