blob: bb198ef4b626739ec2224752dc95359314fbc9ef [file] [log] [blame]
package org.robolectric.shadows;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
import android.animation.ValueAnimator;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.collect.Ordering;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Shadows;
import org.robolectric.util.TimeUtils;
@RunWith(AndroidJUnit4.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).isInOrder(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);
shadowMainLooper().pause();
animator.start();
assertThat(animator.isRunning()).isTrue();
shadowMainLooper().idleFor(Duration.ofMillis(200));
assertThat(animator.isRunning()).isFalse();
}
}