1 package org.robolectric.shadows; 2 3 import static org.assertj.core.api.Assertions.assertThat; 4 5 import android.view.animation.LinearInterpolator; 6 import android.widget.OverScroller; 7 import org.junit.Before; 8 import org.junit.Test; 9 import org.junit.runner.RunWith; 10 import org.robolectric.RobolectricTestRunner; 11 import org.robolectric.RuntimeEnvironment; 12 13 @RunWith(RobolectricTestRunner.class) 14 public class ShadowOverScrollerTest { 15 private OverScroller overScroller; 16 17 @Before 18 public void setUp() { 19 overScroller = new OverScroller(RuntimeEnvironment.application, new LinearInterpolator()); 20 } 21 22 @Test 23 public void shouldScrollOverTime() { 24 overScroller.startScroll(0, 0, 100, 200, 1000); 25 26 assertThat(overScroller.getStartX()).isEqualTo(0); 27 assertThat(overScroller.getStartY()).isEqualTo(0); 28 assertThat(overScroller.getFinalX()).isEqualTo(100); 29 assertThat(overScroller.getFinalY()).isEqualTo(200); 30 assertThat(overScroller.isScrollingInDirection(1, 1)).isTrue(); 31 assertThat(overScroller.isScrollingInDirection(-1, -1)).isFalse(); 32 33 assertThat(overScroller.getCurrX()).isEqualTo(0); 34 assertThat(overScroller.getCurrY()).isEqualTo(0); 35 assertThat(overScroller.timePassed()).isEqualTo(0); 36 assertThat(overScroller.isFinished()).isFalse(); 37 38 ShadowLooper.idleMainLooper(100); 39 assertThat(overScroller.getCurrX()).isEqualTo(10); 40 assertThat(overScroller.getCurrY()).isEqualTo(20); 41 assertThat(overScroller.timePassed()).isEqualTo(100); 42 assertThat(overScroller.isFinished()).isFalse(); 43 44 ShadowLooper.idleMainLooper(401); 45 assertThat(overScroller.getCurrX()).isEqualTo(50); 46 assertThat(overScroller.getCurrY()).isEqualTo(100); 47 assertThat(overScroller.timePassed()).isEqualTo(501); 48 assertThat(overScroller.isFinished()).isFalse(); 49 50 ShadowLooper.idleMainLooper(1000); 51 assertThat(overScroller.getCurrX()).isEqualTo(100); 52 assertThat(overScroller.getCurrY()).isEqualTo(200); 53 assertThat(overScroller.timePassed()).isEqualTo(1501); 54 assertThat(overScroller.isFinished()).isEqualTo(true); 55 assertThat(overScroller.isScrollingInDirection(1, 1)).isFalse(); 56 assertThat(overScroller.isScrollingInDirection(-1, -1)).isFalse(); 57 } 58 59 @Test 60 public void computeScrollOffsetShouldCalculateWhetherScrollIsFinished() { 61 assertThat(overScroller.computeScrollOffset()).isFalse(); 62 63 overScroller.startScroll(0, 0, 100, 200, 1000); 64 assertThat(overScroller.computeScrollOffset()).isTrue(); 65 66 ShadowLooper.idleMainLooper(500); 67 assertThat(overScroller.computeScrollOffset()).isTrue(); 68 69 ShadowLooper.idleMainLooper(500); 70 assertThat(overScroller.computeScrollOffset()).isTrue(); 71 assertThat(overScroller.computeScrollOffset()).isFalse(); 72 } 73 74 @Test 75 public void abortAnimationShouldMoveToFinalPositionImmediately() { 76 overScroller.startScroll(0, 0, 100, 200, 1000); 77 ShadowLooper.idleMainLooper(500); 78 overScroller.abortAnimation(); 79 80 assertThat(overScroller.getCurrX()).isEqualTo(100); 81 assertThat(overScroller.getCurrY()).isEqualTo(200); 82 assertThat(overScroller.timePassed()).isEqualTo(500); 83 assertThat(overScroller.isFinished()).isTrue(); 84 } 85 86 @Test 87 public void forceFinishedShouldFinishWithoutMovingFurther() { 88 overScroller.startScroll(0, 0, 100, 200, 1000); 89 ShadowLooper.idleMainLooper(500); 90 overScroller.forceFinished(true); 91 92 assertThat(overScroller.getCurrX()).isEqualTo(50); 93 assertThat(overScroller.getCurrY()).isEqualTo(100); 94 assertThat(overScroller.timePassed()).isEqualTo(500); 95 assertThat(overScroller.isFinished()).isTrue(); 96 } 97 } 98