TEST_F(EventHandlerTest, dragSelectionAfterScroll) { setHtmlInnerHTML("<style> body { margin: 0px; } .upper { width: 300px; height: 400px; }" ".lower { margin: 0px; width: 300px; height: 400px; } .line { display: block; width: 300px; height: 30px; } </style>" "<div class='upper'></div>" "<div class='lower'>" "<span class='line'>Line 1</span><span class='line'>Line 2</span><span class='line'>Line 3</span><span class='line'>Line 4</span><span class='line'>Line 5</span>" "<span class='line'>Line 6</span><span class='line'>Line 7</span><span class='line'>Line 8</span><span class='line'>Line 9</span><span class='line'>Line 10</span>" "</div>"); FrameView* frameView = document().view(); frameView->scrollTo(DoublePoint(0, 400)); PlatformMouseEvent mouseDownEvent( IntPoint(0, 0), IntPoint(100, 200), LeftButton, PlatformEvent::MousePressed, 1, static_cast<PlatformEvent::Modifiers>(0), WTF::currentTime()); document().frame()->eventHandler().handleMousePressEvent(mouseDownEvent); PlatformMouseEvent mouseMoveEvent( IntPoint(100, 50), IntPoint(200, 250), LeftButton, PlatformEvent::MouseMoved, 1, static_cast<PlatformEvent::Modifiers>(0), WTF::currentTime()); document().frame()->eventHandler().handleMouseMoveEvent(mouseMoveEvent); page().autoscrollController().animate(WTF::currentTime()); page().animator().serviceScriptedAnimations(WTF::currentTime()); PlatformMouseEvent mouseUpEvent( IntPoint(100, 50), IntPoint(200, 250), LeftButton, PlatformEvent::MouseReleased, 1, static_cast<PlatformEvent::Modifiers>(0), WTF::currentTime()); document().frame()->eventHandler().handleMouseReleaseEvent(mouseUpEvent); FrameSelection& selection = document().frame()->selection(); ASSERT_TRUE(selection.isRange()); RefPtrWillBeRawPtr<Range> range = createRange(selection.selection().toNormalizedEphemeralRange()); ASSERT_TRUE(range.get()); EXPECT_EQ("Line 1\nLine 2", range->text()); }
TEST_F(EventHandlerTest, dragSelectionAfterScroll) { setHtmlInnerHTML( "<style> body { margin: 0px; } .upper { width: 300px; height: 400px; }" ".lower { margin: 0px; width: 300px; height: 400px; } .line { display: " "block; width: 300px; height: 30px; } </style>" "<div class='upper'></div>" "<div class='lower'>" "<span class='line'>Line 1</span><span class='line'>Line 2</span><span " "class='line'>Line 3</span><span class='line'>Line 4</span><span " "class='line'>Line 5</span>" "<span class='line'>Line 6</span><span class='line'>Line 7</span><span " "class='line'>Line 8</span><span class='line'>Line 9</span><span " "class='line'>Line 10</span>" "</div>"); FrameView* frameView = document().view(); frameView->layoutViewportScrollableArea()->setScrollOffset( ScrollOffset(0, 400), ProgrammaticScroll); PlatformMouseEvent mouseDownEvent( IntPoint(0, 0), IntPoint(100, 200), WebPointerProperties::Button::Left, PlatformEvent::MousePressed, 1, PlatformEvent::Modifiers::LeftButtonDown, WTF::monotonicallyIncreasingTime()); document().frame()->eventHandler().handleMousePressEvent(mouseDownEvent); PlatformMouseEvent mouseMoveEvent( IntPoint(100, 50), IntPoint(200, 250), WebPointerProperties::Button::Left, PlatformEvent::MouseMoved, 1, PlatformEvent::Modifiers::LeftButtonDown, WTF::monotonicallyIncreasingTime()); document().frame()->eventHandler().handleMouseMoveEvent( mouseMoveEvent, Vector<PlatformMouseEvent>()); page().autoscrollController().animate(WTF::monotonicallyIncreasingTime()); page().animator().serviceScriptedAnimations( WTF::monotonicallyIncreasingTime()); PlatformMouseEvent mouseUpEvent( IntPoint(100, 50), IntPoint(200, 250), WebPointerProperties::Button::Left, PlatformEvent::MouseReleased, 1, static_cast<PlatformEvent::Modifiers>(0), WTF::monotonicallyIncreasingTime()); document().frame()->eventHandler().handleMouseReleaseEvent(mouseUpEvent); FrameSelection& selection = document().frame()->selection(); ASSERT_TRUE(selection.isRange()); Range* range = createRange(selection.selection().toNormalizedEphemeralRange()); ASSERT_TRUE(range); EXPECT_EQ("Line 1\nLine 2", range->text()); }