OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.android_webview.test; | 5 package org.chromium.android_webview.test; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.view.View; | 8 import android.graphics.Rect; |
9 import android.view.View.MeasureSpec; | |
10 import android.widget.OverScroller; | |
11 import android.test.InstrumentationTestCase; | 9 import android.test.InstrumentationTestCase; |
12 import android.test.suitebuilder.annotation.SmallTest; | 10 import android.test.suitebuilder.annotation.SmallTest; |
| 11 import android.view.View.MeasureSpec; |
| 12 import android.view.View; |
| 13 import android.widget.OverScroller; |
13 | 14 |
14 import org.chromium.android_webview.AwScrollOffsetManager; | 15 import org.chromium.android_webview.AwScrollOffsetManager; |
15 import org.chromium.base.test.util.Feature; | 16 import org.chromium.base.test.util.Feature; |
16 | 17 |
17 public class AwScrollOffsetManagerTest extends InstrumentationTestCase { | 18 public class AwScrollOffsetManagerTest extends InstrumentationTestCase { |
18 private static class TestScrollOffsetManagerDelegate implements AwScrollOffs
etManager.Delegate { | 19 private static class TestScrollOffsetManagerDelegate implements AwScrollOffs
etManager.Delegate { |
19 private int mOverScrollDeltaX; | 20 private int mOverScrollDeltaX; |
20 private int mOverScrollDeltaY; | 21 private int mOverScrollDeltaY; |
21 private int mOverScrollCallCount; | 22 private int mOverScrollCallCount; |
22 private int mScrollX; | 23 private int mScrollX; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 int callCount = delegate.getOverScrollCallCount(); | 100 int callCount = delegate.getOverScrollCallCount(); |
100 offsetManager.scrollContainerViewTo(scrollX, scrollY); | 101 offsetManager.scrollContainerViewTo(scrollX, scrollY); |
101 // The manager then asks the delegate to overscroll the view. | 102 // The manager then asks the delegate to overscroll the view. |
102 assertEquals(callCount + 1, delegate.getOverScrollCallCount()); | 103 assertEquals(callCount + 1, delegate.getOverScrollCallCount()); |
103 assertEquals(scrollX, delegate.getOverScrollDeltaX() + delegate.getScrol
lX()); | 104 assertEquals(scrollX, delegate.getOverScrollDeltaX() + delegate.getScrol
lX()); |
104 assertEquals(scrollY, delegate.getOverScrollDeltaY() + delegate.getScrol
lY()); | 105 assertEquals(scrollY, delegate.getOverScrollDeltaY() + delegate.getScrol
lY()); |
105 // As a response to that the menager expects the view to call back with
the new scroll. | 106 // As a response to that the menager expects the view to call back with
the new scroll. |
106 offsetManager.onContainerViewOverScrolled(scrollX, scrollY, false, false
); | 107 offsetManager.onContainerViewOverScrolled(scrollX, scrollY, false, false
); |
107 } | 108 } |
108 | 109 |
| 110 private void simlateOverScrollPropagation(AwScrollOffsetManager offsetManage
r, |
| 111 TestScrollOffsetManagerDelegate delegate) { |
| 112 assertTrue(delegate.getOverScrollCallCount() > 0); |
| 113 |
| 114 offsetManager.onContainerViewOverScrolled( |
| 115 delegate.getOverScrollDeltaX() + delegate.getScrollX(), |
| 116 delegate.getOverScrollDeltaY() + delegate.getScrollY(), false, f
alse); |
| 117 } |
| 118 |
109 @SmallTest | 119 @SmallTest |
110 @Feature({"AndroidWebView"}) | 120 @Feature({"AndroidWebView"}) |
111 public void testWhenContentSizeMatchesView() { | 121 public void testWhenContentSizeMatchesView() { |
112 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); | 122 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
113 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); | 123 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
114 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); | 124 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
115 | 125 |
116 final int width = 132; | 126 final int width = 132; |
117 final int height = 212; | 127 final int height = 212; |
118 final int scrollX = 11; | 128 final int scrollX = 11; |
(...skipping 28 matching lines...) Expand all Loading... |
147 assertEquals(-scrollX, delegate.getOverScrollDeltaX()); | 157 assertEquals(-scrollX, delegate.getOverScrollDeltaX()); |
148 assertEquals(-scrollY, delegate.getOverScrollDeltaY()); | 158 assertEquals(-scrollY, delegate.getOverScrollDeltaY()); |
149 assertEquals(0, delegate.getScrollX()); | 159 assertEquals(0, delegate.getScrollX()); |
150 assertEquals(0, delegate.getScrollY()); | 160 assertEquals(0, delegate.getScrollY()); |
151 assertEquals(0, delegate.getNativeScrollX()); | 161 assertEquals(0, delegate.getNativeScrollX()); |
152 assertEquals(0, delegate.getNativeScrollY()); | 162 assertEquals(0, delegate.getNativeScrollY()); |
153 } | 163 } |
154 | 164 |
155 private static final int VIEW_WIDTH = 211; | 165 private static final int VIEW_WIDTH = 211; |
156 private static final int VIEW_HEIGHT = 312; | 166 private static final int VIEW_HEIGHT = 312; |
157 private static final int MAX_HORIZONTAL_OFFSET = 61; | 167 private static final int MAX_HORIZONTAL_OFFSET = 757; |
158 private static final int MAX_VERTICAL_OFFSET = 42; | 168 private static final int MAX_VERTICAL_OFFSET = 127; |
159 private static final int CONTENT_WIDTH = VIEW_WIDTH + MAX_HORIZONTAL_OFFSET; | 169 private static final int CONTENT_WIDTH = VIEW_WIDTH + MAX_HORIZONTAL_OFFSET; |
160 private static final int CONTENT_HEIGHT = VIEW_HEIGHT + MAX_VERTICAL_OFFSET; | 170 private static final int CONTENT_HEIGHT = VIEW_HEIGHT + MAX_VERTICAL_OFFSET; |
161 | 171 |
162 @SmallTest | 172 @SmallTest |
163 @Feature({"AndroidWebView"}) | 173 @Feature({"AndroidWebView"}) |
164 public void testScrollRangeAndMaxOffset() { | 174 public void testScrollRangeAndMaxOffset() { |
165 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); | 175 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
166 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); | 176 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
167 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); | 177 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
168 | 178 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); | 238 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); |
229 | 239 |
230 offsetManager.onContainerViewOverScrolled(0, 0, false, false); | 240 offsetManager.onContainerViewOverScrolled(0, 0, false, false); |
231 assertEquals(overrideScrollX, delegate.getNativeScrollX()); | 241 assertEquals(overrideScrollX, delegate.getNativeScrollX()); |
232 assertEquals(overrideScrollY, delegate.getNativeScrollY()); | 242 assertEquals(overrideScrollY, delegate.getNativeScrollY()); |
233 } | 243 } |
234 | 244 |
235 @SmallTest | 245 @SmallTest |
236 @Feature({"AndroidWebView"}) | 246 @Feature({"AndroidWebView"}) |
237 public void testDelegateOverridenScrollsDontExceedBounds() { | 247 public void testDelegateOverridenScrollsDontExceedBounds() { |
238 final int overrideScrollX = 222; | 248 final int overrideScrollX = MAX_HORIZONTAL_OFFSET + 10; |
239 final int overrideScrollY = 333; | 249 final int overrideScrollY = MAX_VERTICAL_OFFSET + 20; |
240 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate() { | 250 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate() { |
241 @Override | 251 @Override |
242 public int getContainerViewScrollX() { | 252 public int getContainerViewScrollX() { |
243 return overrideScrollX; | 253 return overrideScrollX; |
244 } | 254 } |
245 | 255 |
246 @Override | 256 @Override |
247 public int getContainerViewScrollY() { | 257 public int getContainerViewScrollY() { |
248 return overrideScrollY; | 258 return overrideScrollY; |
249 } | 259 } |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 offsetManager.flingScroll(0, 101); | 354 offsetManager.flingScroll(0, 101); |
345 assertTrue(!scroller.isFinished()); | 355 assertTrue(!scroller.isFinished()); |
346 assertTrue(delegate.getInvalidateCount() == 1); | 356 assertTrue(delegate.getInvalidateCount() == 1); |
347 assertEquals(101, (int) scroller.getCurrVelocity()); | 357 assertEquals(101, (int) scroller.getCurrVelocity()); |
348 | 358 |
349 offsetManager.flingScroll(111, 0); | 359 offsetManager.flingScroll(111, 0); |
350 assertTrue(!scroller.isFinished()); | 360 assertTrue(!scroller.isFinished()); |
351 assertTrue(delegate.getInvalidateCount() == 2); | 361 assertTrue(delegate.getInvalidateCount() == 2); |
352 assertEquals(111, (int) scroller.getCurrVelocity()); | 362 assertEquals(111, (int) scroller.getCurrVelocity()); |
353 } | 363 } |
| 364 |
| 365 @SmallTest |
| 366 @Feature({"AndroidWebView"}) |
| 367 public void testRequestChildRectangleOnScreenDontScrollIfAlreadyThere() { |
| 368 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
| 369 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
| 370 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
| 371 |
| 372 offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); |
| 373 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); |
| 374 |
| 375 offsetManager.requestChildRectangleOnScreen(0, 0, |
| 376 new Rect(0, 0, VIEW_WIDTH / 4, VIEW_HEIGHT / 4), true); |
| 377 assertEquals(0, delegate.getOverScrollDeltaX()); |
| 378 assertEquals(0, delegate.getOverScrollDeltaY()); |
| 379 assertEquals(0, delegate.getScrollX()); |
| 380 assertEquals(0, delegate.getScrollY()); |
| 381 |
| 382 offsetManager.requestChildRectangleOnScreen(3 * VIEW_WIDTH / 4, 3 * VIEW
_HEIGHT / 4, |
| 383 new Rect(0, 0, VIEW_WIDTH / 4, VIEW_HEIGHT / 4), true); |
| 384 assertEquals(0, delegate.getOverScrollDeltaX()); |
| 385 assertEquals(0, delegate.getOverScrollDeltaY()); |
| 386 assertEquals(0, delegate.getScrollX()); |
| 387 assertEquals(0, delegate.getScrollY()); |
| 388 } |
| 389 |
| 390 @SmallTest |
| 391 @Feature({"AndroidWebView"}) |
| 392 public void testRequestChildRectangleOnScreenScrollToBottom() { |
| 393 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
| 394 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
| 395 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
| 396 |
| 397 final int rectWidth = 2; |
| 398 final int rectHeight = 3; |
| 399 |
| 400 offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); |
| 401 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); |
| 402 |
| 403 offsetManager.requestChildRectangleOnScreen(CONTENT_WIDTH - rectWidth, |
| 404 CONTENT_HEIGHT - rectHeight, new Rect(0, 0, rectWidth, rectHeigh
t), true); |
| 405 simlateOverScrollPropagation(offsetManager, delegate); |
| 406 assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getOverScrollDeltaX()); |
| 407 assertEquals(CONTENT_HEIGHT - rectHeight - VIEW_HEIGHT / 3, delegate.get
OverScrollDeltaY()); |
| 408 assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getScrollX()); |
| 409 assertEquals(MAX_VERTICAL_OFFSET, delegate.getScrollY()); |
| 410 } |
| 411 |
| 412 @SmallTest |
| 413 @Feature({"AndroidWebView"}) |
| 414 public void testRequestChildRectangleOnScreenScrollToBottomLargeRect() { |
| 415 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
| 416 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
| 417 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
| 418 |
| 419 final int rectWidth = VIEW_WIDTH; |
| 420 final int rectHeight = VIEW_HEIGHT; |
| 421 |
| 422 offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); |
| 423 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); |
| 424 |
| 425 offsetManager.requestChildRectangleOnScreen(CONTENT_WIDTH - rectWidth, |
| 426 CONTENT_HEIGHT - rectHeight, new Rect(0, 0, rectWidth, rectHeigh
t), true); |
| 427 simlateOverScrollPropagation(offsetManager, delegate); |
| 428 assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getOverScrollDeltaX()); |
| 429 assertEquals(MAX_VERTICAL_OFFSET, delegate.getOverScrollDeltaY()); |
| 430 assertEquals(MAX_HORIZONTAL_OFFSET, delegate.getScrollX()); |
| 431 assertEquals(MAX_VERTICAL_OFFSET, delegate.getScrollY()); |
| 432 } |
| 433 |
| 434 @SmallTest |
| 435 @Feature({"AndroidWebView"}) |
| 436 public void testRequestChildRectangleOnScreenScrollToTop() { |
| 437 TestScrollOffsetManagerDelegate delegate = new TestScrollOffsetManagerDe
legate(); |
| 438 OverScroller scroller = new OverScroller(getInstrumentation().getContext
()); |
| 439 AwScrollOffsetManager offsetManager = new AwScrollOffsetManager(delegate
, scroller); |
| 440 |
| 441 final int rectWidth = 2; |
| 442 final int rectHeight = 3; |
| 443 |
| 444 offsetManager.setContentSize(CONTENT_WIDTH, CONTENT_HEIGHT); |
| 445 offsetManager.setContainerViewSize(VIEW_WIDTH, VIEW_HEIGHT); |
| 446 simulateScrolling(offsetManager, delegate, |
| 447 CONTENT_WIDTH - VIEW_WIDTH, CONTENT_HEIGHT - VIEW_HEIGHT); |
| 448 |
| 449 offsetManager.requestChildRectangleOnScreen(0, 0, |
| 450 new Rect(0, 0, rectWidth, rectHeight), true); |
| 451 simlateOverScrollPropagation(offsetManager, delegate); |
| 452 assertEquals(-CONTENT_WIDTH + VIEW_WIDTH, delegate.getOverScrollDeltaX()
); |
| 453 assertEquals(-CONTENT_HEIGHT + VIEW_HEIGHT, delegate.getOverScrollDeltaY
()); |
| 454 assertEquals(0, delegate.getScrollX()); |
| 455 assertEquals(0, delegate.getScrollX()); |
| 456 } |
354 } | 457 } |
OLD | NEW |