MouseEnterLeaveTests.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. namespace Terminal.Gui.ViewMouseTests;
  2. [Trait ("Category", "Input")]
  3. public class MouseEnterLeaveTests
  4. {
  5. private class TestView : View
  6. {
  7. public TestView ()
  8. {
  9. MouseEnter += OnMouseEnterHandler;
  10. MouseLeave += OnMouseLeaveHandler;
  11. }
  12. public bool HandleOnEnter { get; init; }
  13. public bool HandleOnLeave { get; }
  14. public bool HandleEnterEvent { get; init; }
  15. public bool HandleLeaveEvent { get; }
  16. public bool OnMouseEnterCalled { get; private set; }
  17. public bool OnMouseLeaveCalled { get; private set; }
  18. protected internal override bool? OnMouseEnter (MouseEvent mouseEvent)
  19. {
  20. OnMouseEnterCalled = true;
  21. mouseEvent.Handled = HandleOnEnter;
  22. base.OnMouseEnter (mouseEvent);
  23. return mouseEvent.Handled;
  24. }
  25. protected internal override bool OnMouseLeave (MouseEvent mouseEvent)
  26. {
  27. OnMouseLeaveCalled = true;
  28. mouseEvent.Handled = HandleOnLeave;
  29. base.OnMouseLeave (mouseEvent);
  30. return mouseEvent.Handled;
  31. }
  32. public bool MouseEnterRaised { get; private set; }
  33. public bool MouseLeaveRaised { get; private set; }
  34. private void OnMouseEnterHandler (object s, MouseEventEventArgs e)
  35. {
  36. MouseEnterRaised = true;
  37. if (HandleEnterEvent)
  38. {
  39. e.Handled = true;
  40. }
  41. }
  42. private void OnMouseLeaveHandler (object s, MouseEventEventArgs e)
  43. {
  44. MouseLeaveRaised = true;
  45. if (HandleLeaveEvent)
  46. {
  47. e.Handled = true;
  48. }
  49. }
  50. }
  51. [Fact]
  52. public void NewMouseEnterEvent_ViewIsEnabledAndVisible_CallsOnMouseEnter ()
  53. {
  54. // Arrange
  55. var view = new TestView
  56. {
  57. Enabled = true,
  58. Visible = true
  59. };
  60. var mouseEvent = new MouseEvent ();
  61. // Act
  62. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  63. // Assert
  64. Assert.True (view.OnMouseEnterCalled);
  65. Assert.False (handled);
  66. Assert.False (mouseEvent.Handled);
  67. // Cleanup
  68. view.Dispose ();
  69. }
  70. [Fact]
  71. public void NewMouseEnterEvent_ViewIsDisabled_DoesNotCallOnMouseEnter ()
  72. {
  73. // Arrange
  74. var view = new TestView
  75. {
  76. Enabled = false,
  77. Visible = true
  78. };
  79. var mouseEvent = new MouseEvent ();
  80. // Act
  81. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  82. // Assert
  83. Assert.False (view.OnMouseEnterCalled);
  84. Assert.False (handled);
  85. Assert.False (mouseEvent.Handled);
  86. // Cleanup
  87. view.Dispose ();
  88. }
  89. [Fact]
  90. public void NewMouseEnterEvent_ViewIsNotVisible_DoesNotCallOnMouseEnter ()
  91. {
  92. // Arrange
  93. var view = new TestView
  94. {
  95. Enabled = true,
  96. Visible = false
  97. };
  98. var mouseEvent = new MouseEvent ();
  99. // Act
  100. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  101. // Assert
  102. Assert.False (view.OnMouseEnterCalled);
  103. Assert.False (handled);
  104. Assert.False (mouseEvent.Handled);
  105. // Cleanup
  106. view.Dispose ();
  107. }
  108. [Fact]
  109. public void NewMouseLeaveEvent_ViewIsVisible_CallsOnMouseLeave ()
  110. {
  111. // Arrange
  112. var view = new TestView
  113. {
  114. Enabled = true, Visible = true
  115. };
  116. var mouseEvent = new MouseEvent ();
  117. // Act
  118. bool? handled = view.NewMouseLeaveEvent (mouseEvent);
  119. // Assert
  120. Assert.True (view.OnMouseLeaveCalled);
  121. Assert.False (handled);
  122. Assert.False (mouseEvent.Handled);
  123. // Cleanup
  124. view.Dispose ();
  125. }
  126. [Fact]
  127. public void NewMouseLeaveEvent_ViewIsNotVisible_CallsOnMouseLeave ()
  128. {
  129. // Arrange
  130. var view = new TestView
  131. {
  132. Enabled = true,
  133. Visible = false
  134. };
  135. var mouseEvent = new MouseEvent ();
  136. // Act
  137. bool? handled = view.NewMouseLeaveEvent (mouseEvent);
  138. // Assert
  139. Assert.True (view.OnMouseLeaveCalled);
  140. Assert.False (handled);
  141. Assert.False (mouseEvent.Handled);
  142. // Cleanup
  143. view.Dispose ();
  144. }
  145. // Events
  146. [Fact]
  147. public void NewMouseEnterEvent_ViewIsEnabledAndVisible_RaisesMouseEnter ()
  148. {
  149. // Arrange
  150. var view = new TestView
  151. {
  152. Enabled = true,
  153. Visible = true
  154. };
  155. var mouseEvent = new MouseEvent ();
  156. // Act
  157. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  158. // Assert
  159. Assert.True (view.MouseEnterRaised);
  160. Assert.False (handled);
  161. Assert.False (mouseEvent.Handled);
  162. // Cleanup
  163. view.Dispose ();
  164. }
  165. [Fact]
  166. public void NewMouseEnterEvent_ViewIsDisabled_DoesNotRaiseMouseEnter ()
  167. {
  168. // Arrange
  169. var view = new TestView
  170. {
  171. Enabled = false,
  172. Visible = true
  173. };
  174. var mouseEvent = new MouseEvent ();
  175. // Act
  176. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  177. // Assert
  178. Assert.False (view.MouseEnterRaised);
  179. Assert.False (handled);
  180. Assert.False (mouseEvent.Handled);
  181. // Cleanup
  182. view.Dispose ();
  183. }
  184. [Fact]
  185. public void NewMouseEnterEvent_ViewIsNotVisible_DoesNotRaiseMouseEnter ()
  186. {
  187. // Arrange
  188. var view = new TestView
  189. {
  190. Enabled = true,
  191. Visible = false
  192. };
  193. var mouseEvent = new MouseEvent ();
  194. // Act
  195. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  196. // Assert
  197. Assert.False (view.MouseEnterRaised);
  198. Assert.False (handled);
  199. Assert.False (mouseEvent.Handled);
  200. // Cleanup
  201. view.Dispose ();
  202. }
  203. [Fact]
  204. public void NewMouseLeaveEvent_ViewIsVisible_RaisesMouseLeave ()
  205. {
  206. // Arrange
  207. var view = new TestView
  208. {
  209. Enabled = true,
  210. Visible = true
  211. };
  212. var mouseEvent = new MouseEvent ();
  213. // Act
  214. bool? handled = view.NewMouseLeaveEvent (mouseEvent);
  215. // Assert
  216. Assert.True (view.MouseLeaveRaised);
  217. Assert.False (handled);
  218. Assert.False (mouseEvent.Handled);
  219. // Cleanup
  220. view.Dispose ();
  221. }
  222. [Fact]
  223. public void NewMouseLeaveEvent_ViewIsNotVisible_DoesNotRaiseMouseLeave ()
  224. {
  225. // Arrange
  226. var view = new TestView
  227. {
  228. Enabled = true,
  229. Visible = false
  230. };
  231. var mouseEvent = new MouseEvent ();
  232. // Act
  233. bool? handled = view.NewMouseLeaveEvent (mouseEvent);
  234. // Assert
  235. Assert.True (view.MouseLeaveRaised);
  236. Assert.False (handled);
  237. Assert.False (mouseEvent.Handled);
  238. // Cleanup
  239. view.Dispose ();
  240. }
  241. // Handled tests
  242. [Fact]
  243. public void NewMouseEnterEvent_HandleOnMouseEnter_Event_Not_Raised ()
  244. {
  245. // Arrange
  246. var view = new TestView
  247. {
  248. Enabled = true,
  249. Visible = true,
  250. HandleOnEnter = true
  251. };
  252. var mouseEvent = new MouseEvent ();
  253. // Act
  254. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  255. // Assert
  256. Assert.True (view.OnMouseEnterCalled);
  257. Assert.True (handled);
  258. Assert.True (mouseEvent.Handled);
  259. Assert.False (view.MouseEnterRaised);
  260. // Cleanup
  261. view.Dispose ();
  262. }
  263. [Fact]
  264. public void NewMouseEnterEvent_HandleMouseEnterEvent ()
  265. {
  266. // Arrange
  267. var view = new TestView
  268. {
  269. Enabled = true,
  270. Visible = true,
  271. HandleEnterEvent = true
  272. };
  273. var mouseEvent = new MouseEvent ();
  274. // Act
  275. bool? handled = view.NewMouseEnterEvent (mouseEvent);
  276. // Assert
  277. Assert.True (view.OnMouseEnterCalled);
  278. Assert.True (handled);
  279. Assert.True (mouseEvent.Handled);
  280. Assert.True (view.MouseEnterRaised);
  281. // Cleanup
  282. view.Dispose ();
  283. }
  284. }