MouseInterpreterTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. namespace UnitTests_Parallelizable.DriverTests;
  2. public class MouseInterpreterTests
  3. {
  4. [Theory]
  5. [MemberData (nameof (SequenceTests))]
  6. public void TestMouseEventSequences_InterpretedOnlyAsFlag (List<MouseEventArgs> events, params MouseFlags? [] expected)
  7. {
  8. // Arrange: Mock dependencies and set up the interpreter
  9. var interpreter = new MouseInterpreter ();
  10. // Act and Assert
  11. for (var i = 0; i < events.Count; i++)
  12. {
  13. MouseEventArgs [] results = interpreter.Process (events [i]).ToArray ();
  14. // Raw input event should be there
  15. Assert.Equal (events [i].Flags, results [0].Flags);
  16. // also any expected should be there
  17. if (expected [i] != null)
  18. {
  19. Assert.Equal (expected [i], results [1].Flags);
  20. }
  21. else
  22. {
  23. Assert.Single (results);
  24. }
  25. }
  26. }
  27. public static IEnumerable<object []> SequenceTests ()
  28. {
  29. yield return
  30. [
  31. new List<MouseEventArgs>
  32. {
  33. new () { Flags = MouseFlags.Button1Pressed },
  34. new ()
  35. },
  36. null,
  37. MouseFlags.Button1Clicked
  38. ];
  39. yield return
  40. [
  41. new List<MouseEventArgs>
  42. {
  43. new () { Flags = MouseFlags.Button1Pressed },
  44. new (),
  45. new () { Flags = MouseFlags.Button1Pressed },
  46. new ()
  47. },
  48. null,
  49. MouseFlags.Button1Clicked,
  50. null,
  51. MouseFlags.Button1DoubleClicked
  52. ];
  53. yield return
  54. [
  55. new List<MouseEventArgs>
  56. {
  57. new () { Flags = MouseFlags.Button1Pressed },
  58. new (),
  59. new () { Flags = MouseFlags.Button1Pressed },
  60. new (),
  61. new () { Flags = MouseFlags.Button1Pressed },
  62. new ()
  63. },
  64. null,
  65. MouseFlags.Button1Clicked,
  66. null,
  67. MouseFlags.Button1DoubleClicked,
  68. null,
  69. MouseFlags.Button1TripleClicked
  70. ];
  71. yield return
  72. [
  73. new List<MouseEventArgs>
  74. {
  75. new () { Flags = MouseFlags.Button2Pressed },
  76. new (),
  77. new () { Flags = MouseFlags.Button2Pressed },
  78. new (),
  79. new () { Flags = MouseFlags.Button2Pressed },
  80. new ()
  81. },
  82. null,
  83. MouseFlags.Button2Clicked,
  84. null,
  85. MouseFlags.Button2DoubleClicked,
  86. null,
  87. MouseFlags.Button2TripleClicked
  88. ];
  89. yield return
  90. [
  91. new List<MouseEventArgs>
  92. {
  93. new () { Flags = MouseFlags.Button3Pressed },
  94. new (),
  95. new () { Flags = MouseFlags.Button3Pressed },
  96. new (),
  97. new () { Flags = MouseFlags.Button3Pressed },
  98. new ()
  99. },
  100. null,
  101. MouseFlags.Button3Clicked,
  102. null,
  103. MouseFlags.Button3DoubleClicked,
  104. null,
  105. MouseFlags.Button3TripleClicked
  106. ];
  107. yield return
  108. [
  109. new List<MouseEventArgs>
  110. {
  111. new () { Flags = MouseFlags.Button4Pressed },
  112. new (),
  113. new () { Flags = MouseFlags.Button4Pressed },
  114. new (),
  115. new () { Flags = MouseFlags.Button4Pressed },
  116. new ()
  117. },
  118. null,
  119. MouseFlags.Button4Clicked,
  120. null,
  121. MouseFlags.Button4DoubleClicked,
  122. null,
  123. MouseFlags.Button4TripleClicked
  124. ];
  125. yield return
  126. [
  127. new List<MouseEventArgs>
  128. {
  129. new () { Flags = MouseFlags.Button1Pressed, Position = new (10, 11) },
  130. new () { Position = new (10, 11) },
  131. // Clicking the line below means no double click because it's a different location
  132. new () { Flags = MouseFlags.Button1Pressed, Position = new (10, 12) },
  133. new () { Position = new (10, 12) }
  134. },
  135. null,
  136. MouseFlags.Button1Clicked,
  137. null,
  138. MouseFlags.Button1Clicked //release is click because new position
  139. ];
  140. }
  141. }