Chromium Code Reviews| 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(); |
|
yosin_UTC9
2016/10/19 06:33:05
nit: Could you add |selection()| getter to |EventH
amaralp
2016/10/21 03:47:19
Done.
|
| + |
| + 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 |