MouseTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using Terminal.Gui.App;
  2. using Xunit.Abstractions;
  3. namespace UnitTests_Parallelizable.ApplicationTests;
  4. /// <summary>
  5. /// Tests for the <see cref="IMouse"/> interface and <see cref="MouseImpl"/> implementation.
  6. /// These tests demonstrate the decoupled mouse handling that enables parallel test execution.
  7. /// </summary>
  8. public class MouseTests (ITestOutputHelper output)
  9. {
  10. private readonly ITestOutputHelper _output = output;
  11. [Fact]
  12. public void Mouse_Instance_CreatedSuccessfully ()
  13. {
  14. // Arrange & Act
  15. MouseImpl mouse = new ();
  16. // Assert
  17. Assert.NotNull (mouse);
  18. Assert.False (mouse.IsMouseDisabled);
  19. Assert.Null (mouse.LastMousePosition);
  20. }
  21. [Fact]
  22. public void Mouse_LastMousePosition_CanBeSetAndRetrieved ()
  23. {
  24. // Arrange
  25. MouseImpl mouse = new ();
  26. Point expectedPosition = new (10, 20);
  27. // Act
  28. mouse.LastMousePosition = expectedPosition;
  29. Point? actualPosition = mouse.LastMousePosition;
  30. // Assert
  31. Assert.Equal (expectedPosition, actualPosition);
  32. }
  33. [Fact]
  34. public void Mouse_IsMouseDisabled_CanBeSetAndRetrieved ()
  35. {
  36. // Arrange
  37. MouseImpl mouse = new ();
  38. // Act
  39. mouse.IsMouseDisabled = true;
  40. // Assert
  41. Assert.True (mouse.IsMouseDisabled);
  42. }
  43. [Fact]
  44. public void Mouse_CachedViewsUnderMouse_InitializedEmpty ()
  45. {
  46. // Arrange
  47. MouseImpl mouse = new ();
  48. // Assert
  49. Assert.NotNull (mouse.CachedViewsUnderMouse);
  50. Assert.Empty (mouse.CachedViewsUnderMouse);
  51. }
  52. [Fact]
  53. public void Mouse_ResetState_ClearsEventAndCachedViews ()
  54. {
  55. // Arrange
  56. MouseImpl mouse = new ();
  57. var eventFired = false;
  58. mouse.MouseEvent += (sender, args) => eventFired = true;
  59. mouse.CachedViewsUnderMouse.Add (new View ());
  60. // Act
  61. mouse.ResetState ();
  62. // Assert - CachedViewsUnderMouse should be cleared
  63. Assert.Empty (mouse.CachedViewsUnderMouse);
  64. // Event handlers should be cleared
  65. MouseEventArgs mouseEvent = new () { ScreenPosition = new Point (0, 0), Flags = MouseFlags.Button1Pressed };
  66. mouse.RaiseMouseEvent (mouseEvent);
  67. Assert.False (eventFired, "Event should not fire after ResetState");
  68. }
  69. [Fact]
  70. public void Mouse_RaiseMouseEvent_DoesNotUpdateLastPositionWhenNotInitialized ()
  71. {
  72. // Arrange
  73. MouseImpl mouse = new ();
  74. MouseEventArgs mouseEvent = new () { ScreenPosition = new Point (5, 10), Flags = MouseFlags.Button1Pressed };
  75. // Act - Application is not initialized, so LastMousePosition should not be set
  76. mouse.RaiseMouseEvent (mouseEvent);
  77. // Assert
  78. // Since Application.Initialized is false, LastMousePosition should remain null
  79. // This behavior matches the original implementation
  80. Assert.Null (mouse.LastMousePosition);
  81. }
  82. [Fact]
  83. public void Mouse_MouseEvent_CanBeSubscribedAndUnsubscribed ()
  84. {
  85. // Arrange
  86. MouseImpl mouse = new ();
  87. var eventCount = 0;
  88. EventHandler<MouseEventArgs> handler = (sender, args) => eventCount++;
  89. // Act - Subscribe
  90. mouse.MouseEvent += handler;
  91. MouseEventArgs mouseEvent = new () { ScreenPosition = new Point (0, 0), Flags = MouseFlags.Button1Pressed };
  92. mouse.RaiseMouseEvent (mouseEvent);
  93. // Assert - Event fired once
  94. Assert.Equal (1, eventCount);
  95. // Act - Unsubscribe
  96. mouse.MouseEvent -= handler;
  97. mouse.RaiseMouseEvent (mouseEvent);
  98. // Assert - Event count unchanged
  99. Assert.Equal (1, eventCount);
  100. }
  101. }