--- a/layout/base/gtest/TestAccessibleCaretEventHub.cpp
+++ b/layout/base/gtest/TestAccessibleCaretEventHub.cpp
@@ -163,31 +163,36 @@ public:
RefPtr<dom::Touch> touch(
new dom::Touch(identifier, point, radius, rotationAngle, force));
event->touches.AppendElement(touch);
return Move(event);
}
- static UniquePtr<WidgetEvent> CreateTouchPressEvent(nscoord aX, nscoord aY)
+ static UniquePtr<WidgetEvent> CreateTouchStartEvent(nscoord aX, nscoord aY)
{
return CreateTouchEvent(eTouchStart, aX, aY);
}
static UniquePtr<WidgetEvent> CreateTouchMoveEvent(nscoord aX, nscoord aY)
{
return CreateTouchEvent(eTouchMove, aX, aY);
}
- static UniquePtr<WidgetEvent> CreateTouchReleaseEvent(nscoord aX, nscoord aY)
+ static UniquePtr<WidgetEvent> CreateTouchEndEvent(nscoord aX, nscoord aY)
{
return CreateTouchEvent(eTouchEnd, aX, aY);
}
+ static UniquePtr<WidgetEvent> CreateTouchCancelEvent(nscoord aX, nscoord aY)
+ {
+ return CreateTouchEvent(eTouchCancel, aX, aY);
+ }
+
static UniquePtr<WidgetEvent> CreateWheelEvent(EventMessage aMessage)
{
auto event = MakeUnique<WidgetWheelEvent>(true, aMessage, nullptr);
return Move(event);
}
void HandleEventAndCheckState(UniquePtr<WidgetEvent> aEvent,
@@ -247,17 +252,17 @@ public:
TEST_F(AccessibleCaretEventHubTester, TestMousePressReleaseOnNoCaret)
{
TestPressReleaseOnNoCaret(CreateMousePressEvent, CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchPressReleaseOnNoCaret)
{
- TestPressReleaseOnNoCaret(CreateTouchPressEvent, CreateTouchReleaseEvent);
+ TestPressReleaseOnNoCaret(CreateTouchStartEvent, CreateTouchEndEvent);
}
template <typename PressEventCreator, typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestPressReleaseOnNoCaret(
PressEventCreator aPressEventCreator,
ReleaseEventCreator aReleaseEventCreator)
{
@@ -279,17 +284,17 @@ AccessibleCaretEventHubTester::TestPress
TEST_F(AccessibleCaretEventHubTester, TestMousePressReleaseOnCaret)
{
TestPressReleaseOnCaret(CreateMousePressEvent, CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchPressReleaseOnCaret)
{
- TestPressReleaseOnCaret(CreateTouchPressEvent, CreateTouchReleaseEvent);
+ TestPressReleaseOnCaret(CreateTouchStartEvent, CreateTouchEndEvent);
}
template <typename PressEventCreator, typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestPressReleaseOnCaret(
PressEventCreator aPressEventCreator,
ReleaseEventCreator aReleaseEventCreator)
{
@@ -322,18 +327,18 @@ AccessibleCaretEventHubTester::TestPress
TEST_F(AccessibleCaretEventHubTester, TestMousePressMoveReleaseOnNoCaret)
{
TestPressMoveReleaseOnNoCaret(CreateMousePressEvent, CreateMouseMoveEvent,
CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchPressMoveReleaseOnNoCaret)
{
- TestPressMoveReleaseOnNoCaret(CreateTouchPressEvent, CreateTouchMoveEvent,
- CreateTouchReleaseEvent);
+ TestPressMoveReleaseOnNoCaret(CreateTouchStartEvent, CreateTouchMoveEvent,
+ CreateTouchEndEvent);
}
template <typename PressEventCreator, typename MoveEventCreator,
typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestPressMoveReleaseOnNoCaret(
PressEventCreator aPressEventCreator, MoveEventCreator aMoveEventCreator,
ReleaseEventCreator aReleaseEventCreator)
@@ -376,18 +381,18 @@ AccessibleCaretEventHubTester::TestPress
TEST_F(AccessibleCaretEventHubTester, TestMousePressMoveReleaseOnCaret)
{
TestPressMoveReleaseOnCaret(CreateMousePressEvent, CreateMouseMoveEvent,
CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchPressMoveReleaseOnCaret)
{
- TestPressMoveReleaseOnCaret(CreateTouchPressEvent, CreateTouchMoveEvent,
- CreateTouchReleaseEvent);
+ TestPressMoveReleaseOnCaret(CreateTouchStartEvent, CreateTouchMoveEvent,
+ CreateTouchEndEvent);
}
template <typename PressEventCreator, typename MoveEventCreator,
typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestPressMoveReleaseOnCaret(
PressEventCreator aPressEventCreator, MoveEventCreator aMoveEventCreator,
ReleaseEventCreator aReleaseEventCreator)
@@ -434,26 +439,85 @@ AccessibleCaretEventHubTester::TestPress
MockAccessibleCaretEventHub::DragCaretState(),
nsEventStatus_eConsumeNoDefault);
HandleEventAndCheckState(aReleaseEventCreator(x3, y3),
MockAccessibleCaretEventHub::NoActionState(),
nsEventStatus_eConsumeNoDefault);
}
+TEST_F(AccessibleCaretEventHubTester,
+ TestTouchStartMoveEndOnCaretWithTouchCancelIgnored)
+{
+ nscoord x0 = 0, y0 = 0;
+ nscoord x1 = 100, y1 = 100;
+ nscoord x2 = 300, y2 = 300;
+ nscoord x3 = 400, y3 = 400;
+
+ {
+ InSequence dummy;
+
+ EXPECT_CALL(*mHub->GetMockAccessibleCaretManager(), PressCaret(_))
+ .WillOnce(Return(NS_OK));
+
+ EXPECT_CALL(*mHub->GetMockAccessibleCaretManager(), DragCaret(_))
+ .WillOnce(Return(NS_OK));
+
+ EXPECT_CALL(*mHub->GetMockAccessibleCaretManager(), ReleaseCaret())
+ .WillOnce(Return(NS_OK));
+ }
+
+ // All the eTouchCancel events should be ignored in this test.
+
+ HandleEventAndCheckState(CreateTouchStartEvent(x0, y0),
+ MockAccessibleCaretEventHub::PressCaretState(),
+ nsEventStatus_eConsumeNoDefault);
+
+ HandleEventAndCheckState(CreateTouchCancelEvent(x0, y0),
+ MockAccessibleCaretEventHub::PressCaretState(),
+ nsEventStatus_eIgnore);
+
+ // A small move with the distance between (x0, y0) and (x1, y1) below the
+ // tolerance value.
+ HandleEventAndCheckState(CreateTouchMoveEvent(x1, y1),
+ MockAccessibleCaretEventHub::PressCaretState(),
+ nsEventStatus_eConsumeNoDefault);
+
+ HandleEventAndCheckState(CreateTouchCancelEvent(x1, y1),
+ MockAccessibleCaretEventHub::PressCaretState(),
+ nsEventStatus_eIgnore);
+
+ // A large move forms a valid drag since the distance between (x0, y0) and
+ // (x2, y2) is above the tolerance value.
+ HandleEventAndCheckState(CreateTouchMoveEvent(x2, y2),
+ MockAccessibleCaretEventHub::DragCaretState(),
+ nsEventStatus_eConsumeNoDefault);
+
+ HandleEventAndCheckState(CreateTouchCancelEvent(x2, y2),
+ MockAccessibleCaretEventHub::DragCaretState(),
+ nsEventStatus_eIgnore);
+
+ HandleEventAndCheckState(CreateTouchEndEvent(x3, y3),
+ MockAccessibleCaretEventHub::NoActionState(),
+ nsEventStatus_eConsumeNoDefault);
+
+ HandleEventAndCheckState(CreateTouchCancelEvent(x3, y3),
+ MockAccessibleCaretEventHub::NoActionState(),
+ nsEventStatus_eIgnore);}
+
TEST_F(AccessibleCaretEventHubTester, TestMouseLongTapWithSelectWordSuccessful)
{
TestLongTapWithSelectWordSuccessful(CreateMousePressEvent,
CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchLongTapWithSelectWordSuccessful)
{
- TestLongTapWithSelectWordSuccessful(CreateTouchPressEvent,
- CreateTouchReleaseEvent);
+ TestLongTapWithSelectWordSuccessful(CreateTouchStartEvent,
+ CreateTouchEndEvent);
}
template <typename PressEventCreator, typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestLongTapWithSelectWordSuccessful(
PressEventCreator aPressEventCreator,
ReleaseEventCreator aReleaseEventCreator)
{
@@ -526,18 +590,18 @@ AccessibleCaretEventHubTester::TestLongT
TEST_F(AccessibleCaretEventHubTester, TestMouseLongTapWithSelectWordFailed)
{
TestLongTapWithSelectWordFailed(CreateMousePressEvent,
CreateMouseReleaseEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchLongTapWithSelectWordFailed)
{
- TestLongTapWithSelectWordFailed(CreateTouchPressEvent,
- CreateTouchReleaseEvent);
+ TestLongTapWithSelectWordFailed(CreateTouchStartEvent,
+ CreateTouchEndEvent);
}
template <typename PressEventCreator, typename ReleaseEventCreator>
void
AccessibleCaretEventHubTester::TestLongTapWithSelectWordFailed(
PressEventCreator aPressEventCreator,
ReleaseEventCreator aReleaseEventCreator)
{
@@ -561,18 +625,18 @@ AccessibleCaretEventHubTester::TestLongT
HandleEventAndCheckState(aReleaseEventCreator(0, 0),
MockAccessibleCaretEventHub::NoActionState(),
nsEventStatus_eIgnore);
}
TEST_F(AccessibleCaretEventHubTester, TestTouchEventDrivenAsyncPanZoomScroll)
{
- TestEventDrivenAsyncPanZoomScroll(CreateTouchPressEvent, CreateTouchMoveEvent,
- CreateTouchReleaseEvent);
+ TestEventDrivenAsyncPanZoomScroll(CreateTouchStartEvent, CreateTouchMoveEvent,
+ CreateTouchEndEvent);
}
TEST_F(AccessibleCaretEventHubTester, TestMouseEventDrivenAsyncPanZoomScroll)
{
TestEventDrivenAsyncPanZoomScroll(CreateMousePressEvent, CreateMouseMoveEvent,
CreateMouseReleaseEvent);
}