|
|
@@ -3,9 +3,11 @@ using System.Windows.Input;
|
|
|
using Avalonia.Data;
|
|
|
using Avalonia.Input;
|
|
|
using Avalonia.Interactivity;
|
|
|
+using Avalonia.Layout;
|
|
|
using Avalonia.Media;
|
|
|
using Avalonia.Platform;
|
|
|
using Avalonia.Rendering;
|
|
|
+using Avalonia.Threading;
|
|
|
using Avalonia.UnitTests;
|
|
|
using Avalonia.VisualTree;
|
|
|
using Moq;
|
|
|
@@ -14,7 +16,7 @@ using MouseButton = Avalonia.Input.MouseButton;
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests
|
|
|
{
|
|
|
- public class ButtonTests
|
|
|
+ public class ButtonTests : ScopedTestBase
|
|
|
{
|
|
|
private MouseTestHelper _helper = new MouseTestHelper();
|
|
|
|
|
|
@@ -139,11 +141,19 @@ namespace Avalonia.Controls.UnitTests
|
|
|
renderer.Setup(r => r.HitTest(It.IsAny<Point>(), It.IsAny<Visual>(), It.IsAny<Func<Visual, bool>>()))
|
|
|
.Returns<Point, Visual, Func<Visual, bool>>((p, r, f) =>
|
|
|
r.Bounds.Contains(p) ? new Visual[] { r } : new Visual[0]);
|
|
|
-
|
|
|
- var target = new TestButton(renderer.Object)
|
|
|
+
|
|
|
+ using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
|
|
|
+
|
|
|
+ var root = new Window() { HitTesterOverride = renderer.Object };
|
|
|
+ var target = new Button()
|
|
|
{
|
|
|
- Bounds = new Rect(0, 0, 100, 100)
|
|
|
+ Width = 100,
|
|
|
+ Height = 100,
|
|
|
+ VerticalAlignment = VerticalAlignment.Top,
|
|
|
+ HorizontalAlignment = HorizontalAlignment.Left
|
|
|
};
|
|
|
+ root.Content = target;
|
|
|
+ root.Show();
|
|
|
|
|
|
bool clicked = false;
|
|
|
|
|
|
@@ -165,16 +175,13 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
|
public void Button_Does_Not_Raise_Click_When_PointerReleased_Outside()
|
|
|
{
|
|
|
- var renderer = new Mock<IHitTester>();
|
|
|
-
|
|
|
- renderer.Setup(r => r.HitTest(It.IsAny<Point>(), It.IsAny<Visual>(), It.IsAny<Func<Visual, bool>>()))
|
|
|
- .Returns<Point, Visual, Func<Visual, bool>>((p, r, f) =>
|
|
|
- r.Bounds.Contains(p) ? new Visual[] { r } : new Visual[0]);
|
|
|
-
|
|
|
- var target = new TestButton(renderer.Object)
|
|
|
+ var root = new TestRoot();
|
|
|
+ var target = new Button()
|
|
|
{
|
|
|
- Bounds = new Rect(0, 0, 100, 100)
|
|
|
+ Width = 100,
|
|
|
+ Height = 100
|
|
|
};
|
|
|
+ root.Child = target;
|
|
|
|
|
|
bool clicked = false;
|
|
|
|
|
|
@@ -203,12 +210,20 @@ namespace Avalonia.Controls.UnitTests
|
|
|
.Returns<Point, Visual, Func<Visual, bool>>((p, r, f) =>
|
|
|
r.Bounds.Contains(p.Transform(r.RenderTransform.Value.Invert())) ?
|
|
|
new Visual[] { r } : new Visual[0]);
|
|
|
-
|
|
|
- var target = new TestButton(renderer.Object)
|
|
|
+
|
|
|
+ using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
|
|
|
+
|
|
|
+ var root = new Window() { HitTesterOverride = renderer.Object };
|
|
|
+ var target = new Button()
|
|
|
{
|
|
|
- Bounds = new Rect(0, 0, 100, 100),
|
|
|
+ Width = 100,
|
|
|
+ Height = 100,
|
|
|
+ VerticalAlignment = VerticalAlignment.Top,
|
|
|
+ HorizontalAlignment = HorizontalAlignment.Left,
|
|
|
RenderTransform = new TranslateTransform { X = 100, Y = 0 }
|
|
|
};
|
|
|
+ root.Content = target;
|
|
|
+ root.Show();
|
|
|
|
|
|
//actual bounds of button should be 100,0,100,100 x -> translated 100 pixels
|
|
|
//so mouse with x=150 coordinates should trigger click
|
|
|
@@ -381,37 +396,6 @@ namespace Avalonia.Controls.UnitTests
|
|
|
return new KeyEventArgs { RoutedEvent = InputElement.KeyDownEvent, Key = key, Source = source };
|
|
|
}
|
|
|
|
|
|
- private class TestButton : Button, IRenderRoot
|
|
|
- {
|
|
|
- public TestButton(IHitTester hit)
|
|
|
- {
|
|
|
- IsVisible = true;
|
|
|
- HitTester = hit;
|
|
|
- Renderer = new NullRenderer();
|
|
|
- }
|
|
|
-
|
|
|
- public new Rect Bounds
|
|
|
- {
|
|
|
- get => base.Bounds;
|
|
|
- set => base.Bounds = value;
|
|
|
- }
|
|
|
-
|
|
|
- public Size ClientSize => throw new NotImplementedException();
|
|
|
-
|
|
|
- public IRenderer Renderer { get; }
|
|
|
- public IHitTester HitTester { get; }
|
|
|
-
|
|
|
- public double RenderScaling => throw new NotImplementedException();
|
|
|
-
|
|
|
- public IRenderTarget CreateRenderTarget() => throw new NotImplementedException();
|
|
|
-
|
|
|
- public void Invalidate(Rect rect) => throw new NotImplementedException();
|
|
|
-
|
|
|
- public Point PointToClient(PixelPoint p) => throw new NotImplementedException();
|
|
|
-
|
|
|
- public PixelPoint PointToScreen(Point p) => throw new NotImplementedException();
|
|
|
- }
|
|
|
-
|
|
|
private void RaisePointerPressed(Button button, int clickCount, MouseButton mouseButton, Point position)
|
|
|
{
|
|
|
_helper.Down(button, mouseButton, position, clickCount: clickCount);
|