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.animation.ValueAnimator;
      6 import com.google.common.collect.Ordering;
      7 import java.util.ArrayList;
      8 import java.util.List;
      9 import org.junit.Test;
     10 import org.junit.runner.RunWith;
     11 import org.robolectric.Robolectric;
     12 import org.robolectric.RobolectricTestRunner;
     13 import org.robolectric.Shadows;
     14 import org.robolectric.util.TimeUtils;
     15 
     16 @RunWith(RobolectricTestRunner.class)
     17 public class ShadowValueAnimatorTest {
     18 
     19   @Test
     20   public void start_shouldRunAnimation() {
     21     final List<Integer> values = new ArrayList<>();
     22 
     23     ShadowChoreographer.setFrameInterval(100 * TimeUtils.NANOS_PER_MS);
     24 
     25 
     26     final ValueAnimator animator = ValueAnimator.ofInt(0, 10);
     27     animator.setDuration(1000);
     28     animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
     29       @Override
     30       public void onAnimationUpdate(ValueAnimator animation) {
     31         values.add((int) animation.getAnimatedValue());
     32       }
     33     });
     34     animator.start();
     35 
     36     assertThat(values).isSortedAccordingTo(Ordering.natural());
     37   }
     38 
     39   @Test
     40   public void test_WithInfiniteRepeatCount_CountIsSetToOne() {
     41     final ValueAnimator animator = ValueAnimator.ofInt(0, 10);
     42     animator.setRepeatCount(ValueAnimator.INFINITE);
     43 
     44     assertThat(Shadows.shadowOf(animator).getActualRepeatCount()).isEqualTo(ValueAnimator.INFINITE);
     45     assertThat(animator.getRepeatCount()).isEqualTo(1);
     46   }
     47 
     48   @Test
     49   public void test_WhenInfiniteAnimationIsPlayed_AnimationIsOnlyPlayedOnce() throws InterruptedException {
     50     ShadowChoreographer.setFrameInterval(100 * TimeUtils.NANOS_PER_MS);
     51     final ValueAnimator animator = ValueAnimator.ofInt(0, 10);
     52     animator.setDuration(200);
     53     animator.setRepeatCount(ValueAnimator.INFINITE);
     54 
     55     Robolectric.getForegroundThreadScheduler().pause();
     56     animator.start();
     57     assertThat(animator.isRunning()).isTrue();
     58 
     59     Robolectric.flushForegroundThreadScheduler();
     60     assertThat(animator.isRunning()).isFalse();
     61   }
     62 }
     63