CursorTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace UnitTests.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. Application.ResetState (true);
  41. }
  42. [Fact]
  43. [SetupFakeDriver]
  44. public void PositionCursor_No_Position_Returns_False ()
  45. {
  46. Application.Navigation = new ();
  47. TestView view = new ()
  48. {
  49. CanFocus = false,
  50. Width = 1,
  51. Height = 1,
  52. };
  53. view.CanFocus = true;
  54. view.SetFocus ();
  55. Assert.False (Application.PositionCursor ());
  56. Application.ResetState (true);
  57. }
  58. [Fact]
  59. [SetupFakeDriver]
  60. public void PositionCursor_No_IntersectSuperView_Returns_False ()
  61. {
  62. Application.Navigation = new ();
  63. View superView = new ()
  64. {
  65. Width = 1,
  66. Height = 1,
  67. };
  68. TestView view = new ()
  69. {
  70. CanFocus = false,
  71. X = 1,
  72. Y = 1,
  73. Width = 1,
  74. Height = 1,
  75. };
  76. superView.Add (view);
  77. view.CanFocus = true;
  78. view.SetFocus ();
  79. view.TestLocation = new Point (0, 0);
  80. Assert.False (Application.PositionCursor ());
  81. Application.ResetState (true);
  82. }
  83. [Fact]
  84. [SetupFakeDriver]
  85. public void PositionCursor_Position_OutSide_SuperView_Returns_False ()
  86. {
  87. Application.Navigation = new ();
  88. View superView = new ()
  89. {
  90. Width = 1,
  91. Height = 1,
  92. };
  93. TestView view = new ()
  94. {
  95. CanFocus = false,
  96. X = 0,
  97. Y = 0,
  98. Width = 2,
  99. Height = 2,
  100. };
  101. superView.Add (view);
  102. view.CanFocus = true;
  103. view.SetFocus ();
  104. view.TestLocation = new Point (1, 1);
  105. Assert.False (Application.PositionCursor ());
  106. Application.ResetState (true);
  107. }
  108. [Fact]
  109. [SetupFakeDriver]
  110. public void PositionCursor_Focused_With_Position_Returns_True ()
  111. {
  112. Application.Navigation = new ();
  113. TestView view = new ()
  114. {
  115. CanFocus = false,
  116. Width = 1,
  117. Height = 1,
  118. };
  119. view.CanFocus = true;
  120. view.SetFocus ();
  121. view.TestLocation = new Point (0, 0);
  122. Assert.True (Application.PositionCursor ());
  123. Application.ResetState (true);
  124. }
  125. [Fact]
  126. [SetupFakeDriver]
  127. public void PositionCursor_Defaults_Invisible ()
  128. {
  129. Application.Navigation = new ();
  130. View view = new ()
  131. {
  132. CanFocus = true,
  133. Width = 1,
  134. Height = 1,
  135. };
  136. view.SetFocus ();
  137. Assert.True (view.HasFocus);
  138. Assert.False (Application.PositionCursor ());
  139. if (Application.Driver?.GetCursorVisibility (out CursorVisibility cursor) ?? false)
  140. {
  141. Assert.Equal (CursorVisibility.Invisible, cursor);
  142. }
  143. Application.ResetState (true);
  144. }
  145. }