MouseInterpreterTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using Moq;
  2. namespace UnitTests.ConsoleDrivers.V2;
  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 (null);
  11. // Act and Assert
  12. for (int i = 0; i < events.Count; i++)
  13. {
  14. var 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 new object []
  31. {
  32. new List<MouseEventArgs>
  33. {
  34. new() { Flags = MouseFlags.Button1Pressed },
  35. new()
  36. },
  37. null,
  38. MouseFlags.Button1Clicked
  39. };
  40. yield return new object []
  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 new object []
  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 new object []
  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 new object []
  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 new object []
  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 new object []
  127. {
  128. new List<MouseEventArgs>
  129. {
  130. new() { Flags = MouseFlags.Button1Pressed ,Position = new Point (10,11)},
  131. new(){Position = new Point (10,11)},
  132. // Clicking the line below means no double click because it's a different location
  133. new() { Flags = MouseFlags.Button1Pressed,Position = new Point (10,12) },
  134. new(){Position = new Point (10,12)}
  135. },
  136. null,
  137. MouseFlags.Button1Clicked,
  138. null,
  139. MouseFlags.Button1Clicked //release is click because new position
  140. };
  141. }
  142. }