MouseTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace UnitTests_Parallelizable.ViewMouseTests;
  4. [Collection ("Global Test Setup")]
  5. [Trait ("Category", "Input")]
  6. public class MouseTests (ITestOutputHelper output) : TestsAllViews
  7. {
  8. [Theory]
  9. [InlineData (false, false, false)]
  10. [InlineData (true, false, true)]
  11. [InlineData (true, true, true)]
  12. public void MouseClick_SetsFocus_If_CanFocus (bool canFocus, bool setFocus, bool expectedHasFocus)
  13. {
  14. var superView = new View { CanFocus = true, Height = 1, Width = 15 };
  15. var focusedView = new View { CanFocus = true, Width = 1, Height = 1 };
  16. var testView = new View { CanFocus = canFocus, X = 4, Width = 4, Height = 1 };
  17. superView.Add (focusedView, testView);
  18. focusedView.SetFocus ();
  19. Assert.True (superView.HasFocus);
  20. Assert.True (focusedView.HasFocus);
  21. Assert.False (testView.HasFocus);
  22. if (setFocus)
  23. {
  24. testView.SetFocus ();
  25. }
  26. testView.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
  27. Assert.True (superView.HasFocus);
  28. Assert.Equal (expectedHasFocus, testView.HasFocus);
  29. }
  30. [Theory]
  31. [InlineData (false, false, 1)]
  32. [InlineData (true, false, 1)]
  33. [InlineData (true, true, 1)]
  34. public void MouseClick_Raises_Selecting (bool canFocus, bool setFocus, int expectedSelectingCount)
  35. {
  36. var superView = new View { CanFocus = true, Height = 1, Width = 15 };
  37. var focusedView = new View { CanFocus = true, Width = 1, Height = 1 };
  38. var testView = new View { CanFocus = canFocus, X = 4, Width = 4, Height = 1 };
  39. superView.Add (focusedView, testView);
  40. focusedView.SetFocus ();
  41. Assert.True (superView.HasFocus);
  42. Assert.True (focusedView.HasFocus);
  43. Assert.False (testView.HasFocus);
  44. if (setFocus)
  45. {
  46. testView.SetFocus ();
  47. }
  48. var selectingCount = 0;
  49. testView.Selecting += (sender, args) => selectingCount++;
  50. testView.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
  51. Assert.True (superView.HasFocus);
  52. Assert.Equal (expectedSelectingCount, selectingCount);
  53. }
  54. [Theory]
  55. [InlineData (MouseFlags.WheeledUp | MouseFlags.ButtonCtrl, MouseFlags.WheeledLeft)]
  56. [InlineData (MouseFlags.WheeledDown | MouseFlags.ButtonCtrl, MouseFlags.WheeledRight)]
  57. public void WheeledLeft_WheeledRight (MouseFlags mouseFlags, MouseFlags expectedMouseFlagsFromEvent)
  58. {
  59. var mouseFlagsFromEvent = MouseFlags.None;
  60. var view = new View ();
  61. view.MouseEvent += (s, e) => mouseFlagsFromEvent = e.Flags;
  62. view.NewMouseEvent (new () { Flags = mouseFlags });
  63. Assert.Equal (mouseFlagsFromEvent, expectedMouseFlagsFromEvent);
  64. }
  65. [Fact]
  66. public void NewMouseEvent_Invokes_MouseEvent_Properly ()
  67. {
  68. View view = new ()
  69. {
  70. Width = 1,
  71. Height = 1
  72. };
  73. var mouseEventInvoked = false;
  74. view.MouseEvent += (s, e) =>
  75. {
  76. mouseEventInvoked = true;
  77. e.Handled = true;
  78. };
  79. MouseEventArgs me = new ();
  80. view.NewMouseEvent (me);
  81. Assert.True (mouseEventInvoked);
  82. Assert.True (me.Handled);
  83. view.Dispose ();
  84. }
  85. [Theory]
  86. [MemberData (nameof (AllViewTypes))]
  87. public void AllViews_NewMouseEvent_Enabled_False_Does_Not_Set_Handled (Type viewType)
  88. {
  89. View view = CreateInstanceIfNotGeneric (viewType);
  90. if (view == null)
  91. {
  92. output.WriteLine ($"Ignoring {viewType} - It's a Generic");
  93. return;
  94. }
  95. view.Enabled = false;
  96. var me = new MouseEventArgs ();
  97. view.NewMouseEvent (me);
  98. Assert.False (me.Handled);
  99. view.Dispose ();
  100. }
  101. [Theory]
  102. [MemberData (nameof (AllViewTypes))]
  103. public void AllViews_NewMouseEvent_Clicked_Enabled_False_Does_Not_Set_Handled (Type viewType)
  104. {
  105. View view = CreateInstanceIfNotGeneric (viewType);
  106. if (view == null)
  107. {
  108. output.WriteLine ($"Ignoring {viewType} - It's a Generic");
  109. return;
  110. }
  111. view.Enabled = false;
  112. var me = new MouseEventArgs
  113. {
  114. Flags = MouseFlags.Button1Clicked
  115. };
  116. view.NewMouseEvent (me);
  117. Assert.False (me.Handled);
  118. view.Dispose ();
  119. }
  120. }