Home | History | Annotate | Download | only in shadows
      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