diff options
author | mkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-19 10:57:20 +0000 |
---|---|---|
committer | mkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-19 10:57:20 +0000 |
commit | e4228b4723fa71fed40e83aff89f78423a5cb73b (patch) | |
tree | 5a9269e32d7e50778614802295b6d27ea5b34f1c /android_webview/javatests | |
parent | 0731029d816d3389f584a19128a33e801956ffb8 (diff) | |
download | chromium_src-e4228b4723fa71fed40e83aff89f78423a5cb73b.zip chromium_src-e4228b4723fa71fed40e83aff89f78423a5cb73b.tar.gz chromium_src-e4228b4723fa71fed40e83aff89f78423a5cb73b.tar.bz2 |
[android_webview] Implement requestChildRectangleOnScreen.
This implements the AwContents.requestChildRectangleOnScreen method.
BUG=272744
TEST=AndroidWebViewTest
NOTRY=true
Java-only CL, ran through trybots.
Review URL: https://chromiumcodereview.appspot.com/22839006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218265 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/javatests')
-rw-r--r-- | android_webview/javatests/src/org/chromium/android_webview/test/AwScrollOffsetManagerTest.java | 117 |
1 files changed, 110 insertions, 7 deletions
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwScrollOffsetManagerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwScrollOffsetManagerTest.java index c394774..b692820 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwScrollOffsetManagerTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwScrollOffsetManagerTest.java @@ -5,11 +5,12 @@ package org.chromium.android_webview.test; import android.content.Context; -import android.view.View; -import android.view.View.MeasureSpec; -import android.widget.OverScroller; +import android.graphics.Rect; import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.SmallTest; +import android.view.View.MeasureSpec; +import android.view.View; +import android.widget.OverScroller; import org.chromium.android_webview.AwScrollOffsetManager; import org.chromium.base.test.util.Feature; @@ -106,6 +107,15 @@ public class AwScrollOffsetManagerTest extends InstrumentationTestCase { offsetManager.onContainerViewOverScrolled(scrollX, scrollY, false, false); } + private void simlateOverScrollPropagation(AwScrollOffsetManager offsetManager, + TestScrollOffsetManagerDelegate delegate) { + assertTrue(delegate.getOverScrollCallCount() > 0); + + offsetManager.onContainerViewOverScrolled( + delegate.getOverScrollDeltaX() + delegate.getScrollX(), + delegate.getOverScrollDeltaY() + delegate.getScrollY(), false, false); + } + @SmallTest @Feature({"AndroidWebView"}) public void testWhenContentSizeMatchesView() { @@ -154,8 +164,8 @@ public class AwScrollOffsetManagerTest extends InstrumentationTestCase { private static final int VIEW_WIDTH = 211; private static final int VIEW_HEIGHT = 312; - private static final int MAX_HORIZONTAL_OFFSET = 61; - private static final int MAX_VERTICAL_OFFSET = 42; + private static final int MAX_HORIZONTAL_OFFSET = 757; + private static final int MAX_VERTICAL_OFFSET = 127; private static final int CONTENT_WIDTH = VIEW_WIDTH + MAX_HORIZONTAL_OFFSET; private static final int CONTENT_HEIGHT = VIEW_HEIGHT + MAX_VERTICAL_OFFSET; @@ -235,8 +245,8 @@ public class AwScrollOffsetManagerTest extends InstrumentationTestCase { @SmallTest @Feature({"AndroidWebView"}) public void testDelegateOverridenScrollsDontExceedBounds() { - final int overrideScrollX = 222; - final int overrideScrollY = 333; + final int overrideScrollX = MAX_HORIZONTAL_OFFSET + 10; + final int overrideScrollY = MAX_VERTICAL_OFFSET + 20; TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDelegate() { @Override public int getContainerViewScrollX() { @@ -351,4 +361,97 @@ public class AwScrollOffsetManagerTest extends InstrumentationTestCase { assertTrue(delegate.getInvalidateCount() == 2); assertEquals(111, (int) scroller.getCurrVelocity()); } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testRequestChildRectangleOnScreenDontScrollIfAlreadyThere() { + TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDelegate(); + OverScroller scroller = new OverScroller(getInstrumentation().getContext()); + AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate, scroller); + + offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); + offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); + + offsetManager.requestChildRectangleOnScreen(0, 0, + new Rect(0, 0, VIEW_WIDTH / 4, VIEW_HEIGHT / 4), true); + assertEquals(0, delegate.getOverScrollDeltaX()); + assertEquals(0, delegate.getOverScrollDeltaY()); + assertEquals(0, delegate.getScrollX()); + assertEquals(0, delegate.getScrollY()); + + offsetManager.requestChildRectangleOnScreen(3 * VIEW_WIDTH / 4, 3 * VIEW_HEIGHT / 4, + new Rect(0, 0, VIEW_WIDTH / 4, VIEW_HEIGHT / 4), true); + assertEquals(0, delegate.getOverScrollDeltaX()); + assertEquals(0, delegate.getOverScrollDeltaY()); + assertEquals(0, delegate.getScrollX()); + assertEquals(0, delegate.getScrollY()); + } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testRequestChildRectangleOnScreenScrollToBottom() { + TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDelegate(); + OverScroller scroller = new OverScroller(getInstrumentation().getContext()); + AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate, scroller); + + final int rectWidth = 2; + final int rectHeight = 3; + + offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); + offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); + + offsetManager.requestChildRectangleOnScreen(CONTENT_WIDTH - rectWidth, + CONTENT_HEIGHT - rectHeight, new Rect(0, 0, rectWidth, rectHeight), true); + simlateOverScrollPropagation(offsetManager, delegate); + assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getOverScrollDeltaX()); + assertEquals(CONTENT_HEIGHT - rectHeight - VIEW_HEIGHT / 3, delegate.getOverScrollDeltaY()); + assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getScrollX()); + assertEquals(MAX_VERTICAL_OFFSET, delegate.getScrollY()); + } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testRequestChildRectangleOnScreenScrollToBottomLargeRect() { + TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDelegate(); + OverScroller scroller = new OverScroller(getInstrumentation().getContext()); + AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate, scroller); + + final int rectWidth = VIEW_WIDTH; + final int rectHeight = VIEW_HEIGHT; + + offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); + offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); + + offsetManager.requestChildRectangleOnScreen(CONTENT_WIDTH - rectWidth, + CONTENT_HEIGHT - rectHeight, new Rect(0, 0, rectWidth, rectHeight), true); + simlateOverScrollPropagation(offsetManager, delegate); + assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getOverScrollDeltaX()); + assertEquals(MAX_VERTICAL_OFFSET, delegate.getOverScrollDeltaY()); + assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getScrollX()); + assertEquals(MAX_VERTICAL_OFFSET, delegate.getScrollY()); + } + + @SmallTest + @Feature({"AndroidWebView"}) + public void testRequestChildRectangleOnScreenScrollToTop() { + TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDelegate(); + OverScroller scroller = new OverScroller(getInstrumentation().getContext()); + AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate, scroller); + + final int rectWidth = 2; + final int rectHeight = 3; + + offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); + offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); + simulateScrolling(offsetManager, delegate, + CONTENT_WIDTH - VIEW_WIDTH, CONTENT_HEIGHT - VIEW_HEIGHT); + + offsetManager.requestChildRectangleOnScreen(0, 0, + new Rect(0, 0, rectWidth, rectHeight), true); + simlateOverScrollPropagation(offsetManager, delegate); + assertEquals(-CONTENT_WIDTH + VIEW_WIDTH, delegate.getOverScrollDeltaX()); + assertEquals(-CONTENT_HEIGHT + VIEW_HEIGHT, delegate.getOverScrollDeltaY()); + assertEquals(0, delegate.getScrollX()); + assertEquals(0, delegate.getScrollX()); + } } |