package org.robolectric.shadows; import android.animation.ValueAnimator; import com.google.common.collect.Ordering; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.Shadows; import org.robolectric.TestRunners; import org.robolectric.util.TimeUtils; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowValueAnimatorTest { @Test public void start_shouldRunAnimation() { final List<Integer> values = new ArrayList<>(); ShadowChoreographer.setFrameInterval(100 * TimeUtils.NANOS_PER_MS); final ValueAnimator animator = ValueAnimator.ofInt(0, 10); animator.setDuration(1000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { values.add((int) animation.getAnimatedValue()); } }); animator.start(); assertThat(values).isSortedAccordingTo(Ordering.natural()); } @Test public void test_WithInfiniteRepeatCount_CountIsSetToOne() { final ValueAnimator animator = ValueAnimator.ofInt(0, 10); animator.setRepeatCount(ValueAnimator.INFINITE); assertThat(Shadows.shadowOf(animator).getActualRepeatCount()).isEqualTo(ValueAnimator.INFINITE); assertThat(animator.getRepeatCount()).isEqualTo(1); } @Test public void test_WhenInfiniteAnimationIsPlayed_AnimationIsOnlyPlayedOnce() throws InterruptedException { ShadowChoreographer.setFrameInterval(100 * TimeUtils.NANOS_PER_MS); final ValueAnimator animator = ValueAnimator.ofInt(0, 10); animator.setDuration(200); animator.setRepeatCount(ValueAnimator.INFINITE); Robolectric.getForegroundThreadScheduler().pause(); animator.start(); assertThat(animator.isRunning()).isTrue(); Robolectric.flushForegroundThreadScheduler(); assertThat(animator.isRunning()).isFalse(); } }