Index: third_party/WebKit/Source/core/input/EventHandlerTest.cpp |
diff --git a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp |
index d1ec45a7f6382c6a7bfd52d9896a6379d6c7fed6..f243e9e248f911c6607266c422c4bd5da6c15e04 100644 |
--- a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp |
+++ b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp |
@@ -47,6 +47,32 @@ class TapEventBuilder : public PlatformGestureEvent { |
} |
}; |
+class LongPressEventBuilder : public PlatformGestureEvent { |
+ public: |
+ LongPressEventBuilder(IntPoint position) |
+ : PlatformGestureEvent(PlatformEvent::GestureLongPress, |
+ position, |
+ position, |
+ IntSize(5, 5), |
+ WTF::monotonicallyIncreasingTime(), |
+ static_cast<PlatformEvent::Modifiers>(0), |
+ PlatformGestureSourceTouchscreen) {} |
+}; |
+ |
+class MousePressEventBuilder : public PlatformMouseEvent { |
+ public: |
+ MousePressEventBuilder(IntPoint position, |
+ int clickCount, |
+ WebMouseEvent::Button button) |
+ : PlatformMouseEvent(position, |
+ position, |
+ button, |
+ PlatformEvent::MousePressed, |
+ clickCount, |
+ static_cast<PlatformEvent::Modifiers>(0), |
+ WTF::monotonicallyIncreasingTime()) {} |
+}; |
+ |
void EventHandlerTest::SetUp() { |
m_dummyPageHolder = DummyPageHolder::create(IntSize(300, 400)); |
} |
@@ -255,4 +281,116 @@ TEST_F(EventHandlerTest, sendContextMenuEventWithHover) { |
document().frame()->eventHandler().sendContextMenuEvent(mouseDownEvent)); |
} |
+TEST_F(EventHandlerTest, EmptyTextfieldInsertionOnTap) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50></textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ TapEventBuilder singleTapEvent(IntPoint(200, 200), 1); |
+ document().frame()->eventHandler().handleGestureEvent(singleTapEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+} |
+ |
+TEST_F(EventHandlerTest, NonEmptyTextfieldInsertionOnTap) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50>Enter text</textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ TapEventBuilder singleTapEvent(IntPoint(200, 200), 1); |
+ document().frame()->eventHandler().handleGestureEvent(singleTapEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_TRUE(selection.isHandleVisible()); |
+} |
+ |
+TEST_F(EventHandlerTest, EmptyTextfieldInsertionOnLongPress) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50></textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ LongPressEventBuilder longPressEvent(IntPoint(200, 200)); |
+ document().frame()->eventHandler().handleGestureEvent(longPressEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_TRUE(selection.isHandleVisible()); |
+ |
+ // Single Tap on an empty edit field should clear insertion handle |
+ TapEventBuilder singleTapEvent(IntPoint(200, 200), 1); |
+ document().frame()->eventHandler().handleGestureEvent(singleTapEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+} |
+ |
+TEST_F(EventHandlerTest, NonEmptyTextfieldInsertionOnLongPress) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50>Enter text</textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ LongPressEventBuilder longPressEvent(IntPoint(200, 200)); |
+ document().frame()->eventHandler().handleGestureEvent(longPressEvent); |
+ |
+ ASSERT_TRUE(selection.selection().isCaret()); |
+ ASSERT_TRUE(selection.isHandleVisible()); |
+} |
+ |
+TEST_F(EventHandlerTest, ClearHandleAfterTap) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50>Enter text</textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ // Show handle |
+ LongPressEventBuilder longPressEvent(IntPoint(200, 200)); |
+ document().frame()->eventHandler().handleGestureEvent(longPressEvent); |
+ |
+ ASSERT_TRUE(selection.selection().isCaret()); |
+ ASSERT_TRUE(selection.isHandleVisible()); |
+ |
+ // Tap away from text area should clear handle |
+ TapEventBuilder singleTapEvent(IntPoint(700, 700), 1); |
+ document().frame()->eventHandler().handleGestureEvent(singleTapEvent); |
+ |
+ ASSERT_TRUE(selection.isNone()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+} |
+ |
+TEST_F(EventHandlerTest, HandleNotShownOnMouseEvents) { |
+ setHtmlInnerHTML("<textarea cols=50 rows=50>Enter text</textarea>"); |
+ |
+ FrameSelection& selection = document().frame()->selection(); |
+ |
+ MousePressEventBuilder leftMousePressEvent( |
+ IntPoint(200, 200), 1, WebPointerProperties::Button::Left); |
+ document().frame()->eventHandler().handleMousePressEvent(leftMousePressEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+ |
+ MousePressEventBuilder rightMousePressEvent( |
+ IntPoint(200, 200), 1, WebPointerProperties::Button::Right); |
+ document().frame()->eventHandler().handleMousePressEvent( |
+ rightMousePressEvent); |
+ |
+ ASSERT_TRUE(selection.isCaret()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+ |
+ MousePressEventBuilder doubleClickMousePressEvent( |
+ IntPoint(200, 200), 2, WebPointerProperties::Button::Left); |
+ document().frame()->eventHandler().handleMousePressEvent( |
+ doubleClickMousePressEvent); |
+ |
+ ASSERT_TRUE(selection.isRange()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+ |
+ MousePressEventBuilder tripleClickMousePressEvent( |
+ IntPoint(200, 200), 3, WebPointerProperties::Button::Left); |
+ document().frame()->eventHandler().handleMousePressEvent( |
+ tripleClickMousePressEvent); |
+ |
+ ASSERT_TRUE(selection.isRange()); |
+ ASSERT_FALSE(selection.isHandleVisible()); |
+} |
+ |
} // namespace blink |