Browse Source

ICustomHitTest renderer tests

pull/5923/head
mat1jaczyyy 5 years ago
parent
commit
5f4a338c18
  1. 17
      tests/Avalonia.Visuals.UnitTests/Rendering/CustomHitTestBorder.cs
  2. 43
      tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs
  3. 37
      tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs

17
tests/Avalonia.Visuals.UnitTests/Rendering/CustomHitTestBorder.cs

@ -0,0 +1,17 @@
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Rendering;
namespace Avalonia.Visuals.UnitTests.Rendering
{
internal class CustomHitTestBorder : Border, ICustomHitTest
{
public bool HitTest(Point point)
{
// Move hit testing window halfway to the left
return Bounds
.WithX(Bounds.X - Bounds.Width / 2)
.Contains(point);
}
}
}

43
tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs

@ -1,6 +1,9 @@
using System.Linq;
using System;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Shapes;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Media;
using Avalonia.Platform;
@ -9,8 +12,6 @@ using Avalonia.UnitTests;
using Avalonia.VisualTree;
using Moq;
using Xunit;
using System;
using Avalonia.Controls.Shapes;
namespace Avalonia.Visuals.UnitTests.Rendering
{
@ -501,6 +502,42 @@ namespace Avalonia.Visuals.UnitTests.Rendering
}
}
[Fact]
public void HitTest_Should_Accommodate_ICustomHitTest()
{
using (TestApplication())
{
Border border;
var root = new TestRoot
{
Width = 300,
Height = 200,
Child = border = new CustomHitTestBorder
{
Width = 100,
Height = 100,
Background = Brushes.Red,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
}
};
root.Renderer = new DeferredRenderer(root, null);
root.Measure(Size.Infinity);
root.Arrange(new Rect(root.DesiredSize));
var result = root.Renderer.HitTest(new Point(75, 100), root, null);
Assert.Equal(new[] { border }, result);
result = root.Renderer.HitTest(new Point(125, 100), root, null);
Assert.Equal(new[] { border }, result);
result = root.Renderer.HitTest(new Point(175, 100), root, null);
Assert.Empty(result);
}
}
private IDisposable TestApplication()
{
return UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);

37
tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs

@ -413,6 +413,43 @@ namespace Avalonia.Visuals.UnitTests.Rendering
}
}
[Fact]
public void HitTest_Should_Accommodate_ICustomHitTest()
{
using (TestApplication())
{
Border border;
var root = new TestRoot
{
Width = 300,
Height = 200,
Child = border = new CustomHitTestBorder
{
Width = 100,
Height = 100,
Background = Brushes.Red,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
}
};
root.Renderer = new ImmediateRenderer(root);
root.Measure(Size.Infinity);
root.Arrange(new Rect(root.DesiredSize));
root.Renderer.Paint(new Rect(root.ClientSize));
var result = root.Renderer.HitTest(new Point(75, 100), root, null).First();
Assert.Equal(border, result);
result = root.Renderer.HitTest(new Point(125, 100), root, null).First();
Assert.Equal(border, result);
result = root.Renderer.HitTest(new Point(175, 100), root, null).First();
Assert.Equal(root, result);
}
}
private IDisposable TestApplication()
{
return UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);

Loading…
Cancel
Save