Browse Source

adds tests

pull/9751/head
Emmanuel Hansen 3 years ago
parent
commit
586c3350dc
  1. 2
      src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs
  2. 98
      tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs
  3. 53
      tests/Avalonia.UnitTests/TouchTestHelper.cs

2
src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs

@ -96,7 +96,7 @@ namespace Avalonia.Input.GestureRecognizers
}
// Pixels per second speed that is considered to be the stop of inertial scroll
private const double InertialScrollSpeedEnd = 0;
private const double InertialScrollSpeedEnd = 5;
public void PointerMoved(PointerEventArgs e)
{

98
tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs

@ -1,6 +1,8 @@
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Input.GestureRecognizers;
using Avalonia.Media;
using Avalonia.UnitTests;
using Xunit;
@ -201,5 +203,101 @@ namespace Avalonia.Base.UnitTests.Input
border.AddHandler(Gestures.TappedEvent, (s, e) => result.Add("bt"));
border.AddHandler(Gestures.DoubleTappedEvent, (s, e) => result.Add("bdt"));
}
[Fact]
public void Pinched_Should_Not_Be_Raised_For_Same_Pointer()
{
var touch = new TouchTestHelper();
Border border = new Border()
{
Width = 100,
Height = 100,
Background = new SolidColorBrush(Colors.Red)
};
border.GestureRecognizers.Add(new PinchGestureRecognizer());
var decorator = new Decorator
{
Child = border
};
var raised = false;
decorator.AddHandler(Gestures.PinchEvent, (s, e) => raised = true);
var firstPoint = new Point(5, 5);
var secondPoint = new Point(10, 10);
touch.Down(border, position: firstPoint);
touch.Down(border, position: secondPoint);
touch.Down(border, position: new Point(20, 20));
Assert.False(raised);
}
[Fact]
public void Pinched_Should_Be_Raised_For_Two_Pointers_Moving()
{
Border border = new Border()
{
Width = 100,
Height = 100,
Background = new SolidColorBrush(Colors.Red)
};
border.GestureRecognizers.Add(new PinchGestureRecognizer());
var decorator = new Decorator
{
Child = border
};
var raised = false;
decorator.AddHandler(Gestures.PinchEvent, (s, e) => raised = true);
var firstPoint = new Point(5, 5);
var secondPoint = new Point(10, 10);
var firstTouch = new TouchTestHelper();
var secondTouch = new TouchTestHelper();
firstTouch.Down(border, position: firstPoint);
secondTouch.Down(border, position: secondPoint);
secondTouch.Move(border, position: new Point(20, 20));
Assert.True(raised);
}
[Fact]
public void Scrolling_Should_Start_After_Start_Distance_Is_Exceded()
{
Border border = new Border()
{
Width = 100,
Height = 100,
Background = new SolidColorBrush(Colors.Red)
};
border.GestureRecognizers.Add(new ScrollGestureRecognizer()
{
CanHorizontallyScroll = true,
CanVerticallyScroll = true,
ScrollStartDistance = 50
});
var decorator = new Decorator
{
Child = border
};
var raised = false;
decorator.AddHandler(Gestures.ScrollGestureEvent, (s, e) => raised = true);
var firstTouch = new TouchTestHelper();
firstTouch.Down(border, position: new Point(5, 5));
firstTouch.Move(border, position: new Point(20, 20));
Assert.False(raised);
firstTouch.Move(border, position: new Point(70, 20));
Assert.True(raised);
}
}
}

53
tests/Avalonia.UnitTests/TouchTestHelper.cs

@ -0,0 +1,53 @@
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.VisualTree;
namespace Avalonia.UnitTests
{
public class TouchTestHelper
{
private readonly Pointer _pointer = new Pointer(Pointer.GetNextFreeId(), PointerType.Touch, true);
private ulong _nextStamp = 1;
private ulong Timestamp() => _nextStamp++;
public IInputElement Captured => _pointer.Captured;
public void Down(Interactive target, Point position = default, KeyModifiers modifiers = default)
{
Down(target, target, position, modifiers);
}
public void Down(Interactive target, Interactive source, Point position = default, KeyModifiers modifiers = default)
{
_pointer.Capture((IInputElement)target);
source.RaiseEvent(new PointerPressedEventArgs(source, _pointer, (Visual)source, position, Timestamp(), PointerPointProperties.None,
modifiers));
}
public void Move(Interactive target, in Point position, KeyModifiers modifiers = default) => Move(target, target, position, modifiers);
public void Move(Interactive target, Interactive source, in Point position, KeyModifiers modifiers = default)
{
target.RaiseEvent(new PointerEventArgs(InputElement.PointerMovedEvent, source, _pointer, (Visual)target, position,
Timestamp(), PointerPointProperties.None, modifiers));
}
public void Up(Interactive target, Point position = default, KeyModifiers modifiers = default)
=> Up(target, target, position, modifiers);
public void Up(Interactive target, Interactive source, Point position = default, KeyModifiers modifiers = default)
{
source.RaiseEvent(new PointerReleasedEventArgs(source, _pointer, (Visual)target, position, Timestamp(), PointerPointProperties.None,
modifiers, MouseButton.None));
_pointer.Capture(null);
}
public void Tap(Interactive target, Point position = default, KeyModifiers modifiers = default)
=> Tap(target, target, position, modifiers);
public void Tap(Interactive target, Interactive source, Point position = default, KeyModifiers modifiers = default)
{
Down(target, source, position, modifiers);
Up(target, source, position, modifiers);
}
}
}
Loading…
Cancel
Save