MouseDeviceTests.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. var mouseDevice = AvaloniaLocator.Current.GetService<IMouseDevice>();
  22. Canvas canvas;
  23. Border border;
  24. Decorator decorator;
  25. var root = new TestRoot
  26. {
  27. Child = new Panel
  28. {
  29. Children =
  30. {
  31. (canvas = new Canvas()),
  32. (border = new Border
  33. {
  34. Child = decorator = new Decorator(),
  35. })
  36. }
  37. }
  38. };
  39. renderer.Setup(x => x.HitTest(It.IsAny<Point>(), It.IsAny<Func<IVisual, bool>>()))
  40. .Returns(new[] { decorator });
  41. inputManager.ProcessInput(new RawMouseEventArgs(
  42. mouseDevice,
  43. 0,
  44. root,
  45. RawMouseEventType.Move,
  46. new Point(),
  47. InputModifiers.None));
  48. Assert.True(decorator.IsPointerOver);
  49. Assert.True(border.IsPointerOver);
  50. Assert.False(canvas.IsPointerOver);
  51. Assert.True(root.IsPointerOver);
  52. renderer.Setup(x => x.HitTest(It.IsAny<Point>(), It.IsAny<Func<IVisual, bool>>()))
  53. .Returns(new[] { canvas });
  54. inputManager.ProcessInput(new RawMouseEventArgs(
  55. mouseDevice,
  56. 0,
  57. root,
  58. RawMouseEventType.Move,
  59. new Point(),
  60. InputModifiers.None));
  61. Assert.False(decorator.IsPointerOver);
  62. Assert.False(border.IsPointerOver);
  63. Assert.True(canvas.IsPointerOver);
  64. Assert.True(root.IsPointerOver);
  65. }
  66. }
  67. private IDisposable TestApplication(IRenderer renderer)
  68. {
  69. return UnitTestApplication.Start(
  70. new TestServices(
  71. inputManager: new InputManager(),
  72. mouseDevice: () => new MouseDevice(),
  73. renderer: (root, loop) => renderer));
  74. }
  75. }
  76. }