From a030d29d15f175bce7f565ef30847b1ec316d1ae Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Fri, 25 Aug 2023 13:40:48 +0000 Subject: [PATCH] add failing test --- .../Input/GesturesTests.cs | 34 +++++++++++++++++++ tests/Avalonia.UnitTests/TouchTestHelper.cs | 6 ++++ 2 files changed, 40 insertions(+) diff --git a/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs b/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs index 14fa242146..a2afdd0af2 100644 --- a/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs @@ -487,6 +487,40 @@ namespace Avalonia.Base.UnitTests.Input Assert.True(raised); } + [Fact] + public void Gestures_Should_Be_Cancelled_When_Pointer_Capture_Is_Lost() + { + Border border = new Border() + { + Width = 100, + Height = 100, + Background = new SolidColorBrush(Colors.Red) + }; + border.GestureRecognizers.Add(new PinchGestureRecognizer()); + var root = new TestRoot + { + Child = border + }; + var raised = false; + + root.AddHandler(Gestures.PinchEvent, (_, _) => 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); + + firstTouch.Cancel(); + + secondTouch.Down(border, position: secondPoint); + secondTouch.Move(border, position: new Point(20, 20)); + + Assert.False(raised); + } + [Fact] public void Scrolling_Should_Start_After_Start_Distance_Is_Exceeded() { diff --git a/tests/Avalonia.UnitTests/TouchTestHelper.cs b/tests/Avalonia.UnitTests/TouchTestHelper.cs index 574599d1ad..120b0c0670 100644 --- a/tests/Avalonia.UnitTests/TouchTestHelper.cs +++ b/tests/Avalonia.UnitTests/TouchTestHelper.cs @@ -61,5 +61,11 @@ namespace Avalonia.UnitTests Down(target, source, position, modifiers); Up(target, source, position, modifiers); } + + public void Cancel() + { + _pointer.Capture(null); + _pointer.CaptureGestureRecognizer(null); + } } }