MouseDeviceTests.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Avalonia.Controls;
  2. using Avalonia.Input.Raw;
  3. using Avalonia.Layout;
  4. using Avalonia.Rendering;
  5. using Avalonia.UnitTests;
  6. using Avalonia.VisualTree;
  7. using Moq;
  8. using System;
  9. using Xunit;
  10. namespace Avalonia.Input.UnitTests
  11. {
  12. public class MouseDeviceTests
  13. {
  14. [Fact]
  15. public void MouseMove_Should_Update_PointerOver()
  16. {
  17. var renderer = new Mock<IRenderer>();
  18. using (TestApplication(renderer.Object))
  19. {
  20. var inputManager = InputManager.Instance;
  21. Canvas canvas;
  22. Border border;
  23. Decorator decorator;
  24. var root = new TestRoot
  25. {
  26. MouseDevice = new MouseDevice(),
  27. Renderer = renderer.Object,
  28. Child = new Panel
  29. {
  30. Children =
  31. {
  32. (canvas = new Canvas()),
  33. (border = new Border
  34. {
  35. Child = decorator = new Decorator(),
  36. })
  37. }
  38. }
  39. };
  40. renderer.Setup(x => x.HitTest(It.IsAny<Point>(), It.IsAny<Func<IVisual, bool>>()))
  41. .Returns(new[] { decorator });
  42. inputManager.ProcessInput(new RawMouseEventArgs(
  43. root.MouseDevice,
  44. 0,
  45. root,
  46. RawMouseEventType.Move,
  47. new Point(),
  48. InputModifiers.None));
  49. Assert.True(decorator.IsPointerOver);
  50. Assert.True(border.IsPointerOver);
  51. Assert.False(canvas.IsPointerOver);
  52. Assert.True(root.IsPointerOver);
  53. renderer.Setup(x => x.HitTest(It.IsAny<Point>(), It.IsAny<Func<IVisual, bool>>()))
  54. .Returns(new[] { canvas });
  55. inputManager.ProcessInput(new RawMouseEventArgs(
  56. root.MouseDevice,
  57. 0,
  58. root,
  59. RawMouseEventType.Move,
  60. new Point(),
  61. InputModifiers.None));
  62. Assert.False(decorator.IsPointerOver);
  63. Assert.False(border.IsPointerOver);
  64. Assert.True(canvas.IsPointerOver);
  65. Assert.True(root.IsPointerOver);
  66. }
  67. }
  68. private IDisposable TestApplication(IRenderer renderer)
  69. {
  70. return UnitTestApplication.Start(
  71. new TestServices(inputManager: new InputManager()));
  72. }
  73. }
  74. }