MouseInterpreterTests.cs 4.4 KB

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